diff --git a/dependencies.py b/dependencies.py index 51735261e..b4f59ee6f 100644 --- a/dependencies.py +++ b/dependencies.py @@ -141,7 +141,7 @@ class PkgConfigDependency(Dependency): self.libs = [] for lib in out.decode().split(): if lib.endswith(".la"): - shared_libname = self.__extract_libtool_shlib(lib) + shared_libname = self.extract_libtool_shlib(lib) shared_lib = os.path.join(os.path.dirname(lib), shared_libname) if not os.path.exists(shared_lib): shared_lib = os.path.join(os.path.dirname(lib), ".libs", shared_libname) @@ -195,33 +195,36 @@ class PkgConfigDependency(Dependency): def found(self): return self.is_found - def __extract_dlname_field(self, la_file): - f = open(la_file) - data = f.read() - f.close() - m = self.__libtool_pat.search(data) - if m: - return m.groups()[0] - else: - return None + def extract_field(self, la_file, fieldname): + for line in open(la_file): + arr = line.strip().split('=') + if arr[0] == fieldname: + return arr[1][1:-1] + return None + + def extract_dlname_field(self, la_file): + return self.extract_field(la_file, 'dlname') - def __extract_libtool_shlib(self, la_file): + def extract_libdir_field(self, la_file): + return self.extract_field(la_file, 'libdir') + + def extract_libtool_shlib(self, la_file): ''' Returns the path to the shared library corresponding to this .la file ''' - dlname = self.__extract_dlname_field(la_file) + dlname = self.extract_dlname_field(la_file) 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': + if mesonlib.is_osx(): dlbasename = os.path.basename(dlname) - libdir = self._extract_libdir_field(la_file) + libdir = self.extract_libdir_field(la_file) if libdir is None: return dlbasename - return libdir + '/' + dlbasename + return os.path.join(libdir, dlbasename) # From the comments in extract_libtool(), older libtools had # a path rather than the raw dlname return os.path.basename(dlname)