2016-01-22 17:49:33 +00:00
|
|
|
diff --git a/giscanner/shlibs.py b/giscanner/shlibs.py
|
|
|
|
index 838d343..9dbdc0f 100644
|
|
|
|
--- a/giscanner/shlibs.py
|
|
|
|
+++ b/giscanner/shlibs.py
|
|
|
|
@@ -53,10 +53,24 @@ def _resolve_libtool(options, binary, libraries):
|
|
|
|
# Match absolute paths on OS X to conform to how libraries are usually
|
|
|
|
# referenced on OS X systems.
|
|
|
|
def _ldd_library_pattern(library_name):
|
|
|
|
+ nix_store_dir = re.escape('@nixStoreDir@'.rstrip('/'))
|
|
|
|
pattern = "(?<![A-Za-z0-9_-])(lib*%s[^A-Za-z0-9_-][^\s\(\)]*)"
|
|
|
|
- if platform.system() == 'Darwin':
|
|
|
|
- pattern = "([^\s]*lib*%s[^A-Za-z0-9_-][^\s\(\)]*)"
|
|
|
|
- return re.compile(pattern % re.escape(library_name))
|
|
|
|
+ pattern = r'''
|
|
|
|
+ (
|
|
|
|
+ (?:
|
|
|
|
+ # First match Nix store paths because they need to be absolute.
|
|
|
|
+ (?:%s(?:/[^/]*)+)
|
|
|
|
+ # Everything else not a store path remains relative, because we
|
|
|
|
+ # would end up having absolute build paths in the resulting GIR
|
|
|
|
+ # file.
|
|
|
|
+ | (?<=/)
|
|
|
|
+ )
|
|
|
|
+ # And finally the library itself:
|
|
|
|
+ (?:lib%s[^A-Za-z0-9_-][^\s\(\)]*)
|
|
|
|
+ )
|
|
|
|
+ '''
|
|
|
|
+ return re.compile(pattern % (nix_store_dir, re.escape(library_name)),
|
|
|
|
+ re.VERBOSE)
|
|
|
|
|
|
|
|
|
|
|
|
# This is a what we do for non-la files. We assume that we are on an
|
|
|
|
diff --git a/giscanner/utils.py b/giscanner/utils.py
|
|
|
|
index 660081e..c9c767a 100644
|
|
|
|
--- a/giscanner/utils.py
|
|
|
|
+++ b/giscanner/utils.py
|
|
|
|
@@ -109,17 +109,11 @@ def extract_libtool_shlib(la_file):
|
2014-08-14 21:59:24 +01:00
|
|
|
if dlname is None:
|
|
|
|
return None
|
|
|
|
|
|
|
|
- # Darwin uses absolute paths where possible; since the libtool files never
|
|
|
|
- # contain absolute paths, use the libdir field
|
|
|
|
- if platform.system() == 'Darwin':
|
|
|
|
- dlbasename = os.path.basename(dlname)
|
|
|
|
- libdir = _extract_libdir_field(la_file)
|
|
|
|
- if libdir is None:
|
|
|
|
- return dlbasename
|
|
|
|
- return libdir + '/' + dlbasename
|
|
|
|
- # From the comments in extract_libtool(), older libtools had
|
|
|
|
- # a path rather than the raw dlname
|
|
|
|
- return os.path.basename(dlname)
|
|
|
|
+ dlbasename = os.path.basename(dlname)
|
|
|
|
+ libdir = _extract_libdir_field(la_file)
|
|
|
|
+ if libdir is None:
|
|
|
|
+ return dlbasename
|
|
|
|
+ return libdir + '/' + dlbasename
|
|
|
|
|
|
|
|
|
|
|
|
def extract_libtool(la_file):
|