diff options
author | Connor Brewster <connor.brewster@eagles.oc.edu> | 2016-06-28 16:18:28 -0600 |
---|---|---|
committer | Connor Brewster <connor.brewster@eagles.oc.edu> | 2016-06-28 16:24:21 -0600 |
commit | 694b9308911b511b874fd5c4c57d7c6459425ac7 (patch) | |
tree | e27a62ec67b1d96b86864f462a0f0e9a75d554fd /python/servo/package_commands.py | |
parent | 96b7a19ca0d6a543aae2f05c23494689c56911a7 (diff) | |
download | servo-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.py | 43 |
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') |