Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,8 @@
+ m = pattern.search(line)
if m:
del patterns[library]
- shlibs.append(m.group(1))
+ shlibs.append(os.path.join(options.fallback_libpath, m.group(1)))
- shlibs.append(_sanitize_install_name(m.group(1)))
+ shlibs.append(os.path.join(options.fallback_libpath, _sanitize_install_name(m.group(1))))
break

if len(patterns) > 0:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ stdenv.mkDerivation rec {
setupHook = ./setup-hook.sh;

patches = [
./macos-shared-library.patch
(substituteAll {
src = ./absolute_shlib_path.patch;
inherit nixStoreDir;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
diff --git a/giscanner/shlibs.py b/giscanner/shlibs.py
index c93d20c..4d4915d 100644
--- a/giscanner/shlibs.py
+++ b/giscanner/shlibs.py
@@ -43,6 +43,22 @@ def _resolve_libtool(options, binary, libraries):

return shlibs

+def _sanitize_install_name(install_name):
+ '''
+ On macOS, the dylib can be built with install_name as @rpath/libfoo.so
+ instead of the absolute path to the library, so handle that. The name
+ can also be @loader_path or @executable_path.
+ '''
+ if not install_name.startswith('@'):
+ return install_name
+ if install_name.startswith('@rpath/'):
+ return install_name[7:]
+ if install_name.startswith('@loader_path/'):
+ return install_name[13:]
+ if install_name.startswith('@executable_path/'):
+ return install_name[17:]
+ raise RuntimeError('Unknown install_name {!r}'.format(install_name))
+

# Assume ldd output is something vaguely like
#
@@ -121,7 +137,7 @@ def _resolve_non_libtool(options, binary, libraries):
m = pattern.search(line)
if m:
del patterns[library]
- shlibs.append(m.group(1))
+ shlibs.append(_sanitize_install_name(m.group(1)))
break

if len(patterns) > 0: