support frameworks
This commit is contained in:
@@ -9,13 +9,21 @@ dry_run = '--dry' in sys.argv
|
||||
app_binary = join(app_bundle, 'Contents/MacOS', basename(app_bundle).split(".")[0])
|
||||
app_frameworks = join(app_bundle, 'Contents/Frameworks')
|
||||
|
||||
binaries = [app_binary] + [join(app_frameworks, library) for library in os.listdir(app_frameworks)]
|
||||
binaries_unfiltered = [app_binary] + [join(app_frameworks, library) for library in os.listdir(app_frameworks)]
|
||||
binaries = []
|
||||
# Extend .framework paths to the actual binary
|
||||
for binary in binaries_unfiltered:
|
||||
if binary.endswith('.framework'):
|
||||
binaries.append(join(binary, 'Versions/A/' + basename(binary).split(".")[0]))
|
||||
else:
|
||||
binaries.append(binary)
|
||||
|
||||
dependency_map = {binary:subprocess.check_output(["otool", "-L", binary], text=True).splitlines()[1:] for binary in binaries}
|
||||
|
||||
for binary, dependencies in dependency_map.items():
|
||||
print(binary)
|
||||
|
||||
is_framework = '.framework' in binary
|
||||
if binary == app_binary:
|
||||
print('\tAdding rpath: @loader_path/../Frameworks')
|
||||
if not dry_run:
|
||||
@@ -25,6 +33,10 @@ for binary, dependencies in dependency_map.items():
|
||||
dep = dependency[0:end_index].strip()
|
||||
|
||||
dep_short_name = dep[dep.rfind('/')+1:]
|
||||
if '.framework' in dep:
|
||||
index = dep.find('.framework')
|
||||
dep_short_name = dep[dep.rfind('/', 0, index)+1:]
|
||||
|
||||
if dep == binary:
|
||||
continue
|
||||
for key in dependency_map:
|
||||
@@ -34,7 +46,10 @@ for binary, dependencies in dependency_map.items():
|
||||
if not dry_run:
|
||||
print('\t' + subprocess.check_output(['install_name_tool', '-change', dep, f'@rpath/{dep_short_name}', binary], text=True))
|
||||
else:
|
||||
print(f'\t{dep} -> @loader_path/{dep_short_name}')
|
||||
new_path = f'@loader_path/{dep_short_name}'
|
||||
if is_framework:
|
||||
new_path = f'@loader_path/../../../{dep_short_name}'
|
||||
print(f'\t{dep} -> {new_path}')
|
||||
if not dry_run:
|
||||
print('\t' + subprocess.check_output(['install_name_tool', '-change', dep, f'@loader_path/{dep_short_name}', binary], text=True))
|
||||
print('\t' + subprocess.check_output(['install_name_tool', '-change', dep, new_path, binary], text=True))
|
||||
break
|
Reference in New Issue
Block a user