Rework pkgconfig and add missing method. Fixes #153.

pull/159/head
Jussi Pakkanen 10 years ago
parent c4885ea0a5
commit e72f9b2312
  1. 33
      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)

Loading…
Cancel
Save