1diff --git a/giscanner/shlibs.py b/giscanner/shlibs.py
2index c93d20c..4d4915d 100644
3--- a/giscanner/shlibs.py
4+++ b/giscanner/shlibs.py
5@@ -43,6 +43,22 @@ def _resolve_libtool(options, binary, libraries):
6
7 return shlibs
8
9+def _sanitize_install_name(install_name):
10+ '''
11+ On macOS, the dylib can be built with install_name as @rpath/libfoo.so
12+ instead of the absolute path to the library, so handle that. The name
13+ can also be @loader_path or @executable_path.
14+ '''
15+ if not install_name.startswith('@'):
16+ return install_name
17+ if install_name.startswith('@rpath/'):
18+ return install_name[7:]
19+ if install_name.startswith('@loader_path/'):
20+ return install_name[13:]
21+ if install_name.startswith('@executable_path/'):
22+ return install_name[17:]
23+ raise RuntimeError('Unknown install_name {!r}'.format(install_name))
24+
25
26 # Assume ldd output is something vaguely like
27 #
28@@ -136,7 +152,7 @@ def resolve_from_ldd_output(libraries, output, basename=False):
29 m = pattern.match(word)
30 if m:
31 del patterns[library]
32- shlibs.append(m.group())
33+ shlibs.append(_sanitize_install_name(m.group()))
34 break
35
36 if len(patterns) > 0: