aboutsummaryrefslogtreecommitdiffstats
path: root/python/servo/package_commands.py
diff options
context:
space:
mode:
authorConnor Brewster <connor.brewster@eagles.oc.edu>2016-06-28 16:18:28 -0600
committerConnor Brewster <connor.brewster@eagles.oc.edu>2016-06-28 16:24:21 -0600
commit694b9308911b511b874fd5c4c57d7c6459425ac7 (patch)
treee27a62ec67b1d96b86864f462a0f0e9a75d554fd /python/servo/package_commands.py
parent96b7a19ca0d6a543aae2f05c23494689c56911a7 (diff)
downloadservo-694b9308911b511b874fd5c4c57d7c6459425ac7.tar.gz
servo-694b9308911b511b874fd5c4c57d7c6459425ac7.zip
fix dylib relinking issue for mac packaging
Diffstat (limited to 'python/servo/package_commands.py')
-rw-r--r--python/servo/package_commands.py43
1 files changed, 25 insertions, 18 deletions
diff --git a/python/servo/package_commands.py b/python/servo/package_commands.py
index 83cab370f04..4693d0136e0 100644
--- a/python/servo/package_commands.py
+++ b/python/servo/package_commands.py
@@ -43,7 +43,10 @@ def otool(s):
def install_name_tool(old, new, binary):
- subprocess.call(['install_name_tool', '-change', old, '@executable_path/' + new, binary])
+ try:
+ subprocess.check_call(['install_name_tool', '-change', old, '@executable_path/' + new, binary])
+ except subprocess.CalledProcessError as e:
+ print("install_name_tool exited with return value %d" % e.returncode)
@CommandProvider
@@ -108,23 +111,27 @@ class PackageCommands(CommandBase):
shutil.copy2(dir_to_resources + 'package-prefs.json', dir_to_resources + 'prefs.json')
delete(dir_to_resources + '/package-prefs.json')
- print("Finding dylibs to be copied")
- need = set([dir_to_app + '/Contents/MacOS/servo'])
- done = set()
-
- while need:
- needed = set(need)
- need = set()
- for f in needed:
- need.update(otool(f))
- done.update(needed)
- need.difference_update(done)
-
- print("Copying dylibs")
- for f in sorted(done):
- if '/System/Library' not in f and '/usr/lib' not in f and 'servo' not in f:
- shutil.copyfile(f, dir_to_app + '/Contents/MacOS/' + f.split('/')[-1])
- install_name_tool(f, f.split('/')[-1], dir_to_app + '/Contents/MacOS/servo')
+ print("Finding dylibs and relinking")
+ need_checked = set([dir_to_app + '/Contents/MacOS/servo'])
+ checked = set()
+ while need_checked:
+ checking = set(need_checked)
+ need_checked = set()
+ for f in checking:
+ # No need to check these for their dylibs
+ if '/System/Library' in f or '/usr/lib' in f:
+ continue
+ need_relinked = set(otool(f))
+ new_path = dir_to_app + '/Contents/MacOS/' + f.split('/')[-1]
+ if not os.path.exists(new_path):
+ shutil.copyfile(f, new_path)
+ for dylib in need_relinked:
+ if '/System/Library' in dylib or '/usr/lib' in dylib or 'servo' in dylib:
+ continue
+ install_name_tool(dylib, dylib.split('/')[-1], new_path)
+ need_checked.update(need_relinked)
+ checked.update(checking)
+ need_checked.difference_update(checked)
print("Writing run-servo")
bhtml_path = path.join('${0%/*}/../Resources', browserhtml_path.split('/')[-1], 'out', 'index.html')