mirror of
https://github.com/servo/servo.git
synced 2025-08-04 13:10:20 +01:00
fix dylib relinking issue for mac packaging
This commit is contained in:
parent
96b7a19ca0
commit
694b930891
1 changed files with 25 additions and 18 deletions
|
@ -43,7 +43,10 @@ def otool(s):
|
||||||
|
|
||||||
|
|
||||||
def install_name_tool(old, new, binary):
|
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
|
@CommandProvider
|
||||||
|
@ -108,23 +111,27 @@ class PackageCommands(CommandBase):
|
||||||
shutil.copy2(dir_to_resources + 'package-prefs.json', dir_to_resources + 'prefs.json')
|
shutil.copy2(dir_to_resources + 'package-prefs.json', dir_to_resources + 'prefs.json')
|
||||||
delete(dir_to_resources + '/package-prefs.json')
|
delete(dir_to_resources + '/package-prefs.json')
|
||||||
|
|
||||||
print("Finding dylibs to be copied")
|
print("Finding dylibs and relinking")
|
||||||
need = set([dir_to_app + '/Contents/MacOS/servo'])
|
need_checked = set([dir_to_app + '/Contents/MacOS/servo'])
|
||||||
done = set()
|
checked = set()
|
||||||
|
while need_checked:
|
||||||
while need:
|
checking = set(need_checked)
|
||||||
needed = set(need)
|
need_checked = set()
|
||||||
need = set()
|
for f in checking:
|
||||||
for f in needed:
|
# No need to check these for their dylibs
|
||||||
need.update(otool(f))
|
if '/System/Library' in f or '/usr/lib' in f:
|
||||||
done.update(needed)
|
continue
|
||||||
need.difference_update(done)
|
need_relinked = set(otool(f))
|
||||||
|
new_path = dir_to_app + '/Contents/MacOS/' + f.split('/')[-1]
|
||||||
print("Copying dylibs")
|
if not os.path.exists(new_path):
|
||||||
for f in sorted(done):
|
shutil.copyfile(f, new_path)
|
||||||
if '/System/Library' not in f and '/usr/lib' not in f and 'servo' not in f:
|
for dylib in need_relinked:
|
||||||
shutil.copyfile(f, dir_to_app + '/Contents/MacOS/' + f.split('/')[-1])
|
if '/System/Library' in dylib or '/usr/lib' in dylib or 'servo' in dylib:
|
||||||
install_name_tool(f, f.split('/')[-1], dir_to_app + '/Contents/MacOS/servo')
|
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")
|
print("Writing run-servo")
|
||||||
bhtml_path = path.join('${0%/*}/../Resources', browserhtml_path.split('/')[-1], 'out', 'index.html')
|
bhtml_path = path.join('${0%/*}/../Resources', browserhtml_path.split('/')[-1], 'out', 'index.html')
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue