about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/libraries/gobject-introspection/macos-shared-library.patch
blob: 9941878c427b5632c9b945f5fdb5af9b8297e91f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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
 #
@@ -136,7 +152,7 @@ def resolve_from_ldd_output(libraries, output, basename=False):
                 m = pattern.match(word)
                 if m:
                     del patterns[library]
-                    shlibs.append(m.group())
+                    shlibs.append(_sanitize_install_name(m.group()))
                     break
 
     if len(patterns) > 0: