support frameworks

This commit is contained in:
2024-09-08 13:52:50 -05:00
parent 4a10150e39
commit b6605efab5

View File

@@ -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