From dc00b192fb92d169716d44cf248bd139beafb540 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Sun, 8 Sep 2024 14:15:38 -0500 Subject: [PATCH] don't add duplicate rpath --- fix-rpaths.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/fix-rpaths.py b/fix-rpaths.py index 584cc2a..ee2f356 100644 --- a/fix-rpaths.py +++ b/fix-rpaths.py @@ -25,9 +25,22 @@ for binary, dependencies in dependency_map.items(): is_framework = '.framework' in binary if binary == app_binary: - print('\tAdding rpath: @loader_path/../Frameworks') - if not dry_run: - print('\t' + subprocess.check_output(['install_name_tool', '-add_rpath', '@loader_path/../Frameworks', binary], text=True)) + # check if a new rpath is needed + new_rpath = '@loader_path/../Frameworks' + + has_rpath = False + lines = reversed(subprocess.check_output(["otool", "-l", binary], text=True).splitlines()) + for line in lines: + if line.strip().startswith('path '): + existing_rpath = line.strip()[len('path '):line.strip().find('(') - 1] + if existing_rpath == new_rpath: + has_rpath = True + else: + break + if not has_rpath: + print('\tAdding rpath: ' + new_rpath) + if not dry_run: + print('\t' + subprocess.check_output(['install_name_tool', '-add_rpath', new_rpath, binary], text=True)) for dependency in dependencies: end_index = dependency.index('(') dep = dependency[0:end_index].strip()