diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2016-06-28 20:05:12 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-06-28 20:05:12 -0500 |
commit | f6db3518ca9d81ea8fd938586252e690755d7445 (patch) | |
tree | 088e0d14c0113d202c490fa05d09d2209cd8e05d | |
parent | d3a81373e44634c30d31da0457e1c1e86c0911ed (diff) | |
parent | 694b9308911b511b874fd5c4c57d7c6459425ac7 (diff) | |
download | servo-f6db3518ca9d81ea8fd938586252e690755d7445.tar.gz servo-f6db3518ca9d81ea8fd938586252e690755d7445.zip |
Auto merge of #11911 - ConnorGBrewster:app_packaging, r=larsbergstrom
Fix dylib relinking issue
<!-- Please describe your changes on the following line: -->
I had to run `install_name_tool` on some dylibs for their deps and not just on the servo binary itself. I have checked and Servo.app runs on machines without extra things installed (ex. harfbuzz).
---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [X] `./mach build -d` does not report any errors
- [X] `./mach test-tidy` does not report any errors
- [X] These changes fix #11907 (github issue number if applicable).
<!-- Either: -->
- [ ] There are tests for these changes OR
- [X] These changes do not require tests because fixing mac packaging.
<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/11911)
<!-- Reviewable:end -->
-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') |