diff options
Diffstat (limited to 'dependencies.py')
-rw-r--r-- | dependencies.py | 63 |
1 files changed, 52 insertions, 11 deletions
diff --git a/dependencies.py b/dependencies.py index 5612f39..df3c01d 100644 --- a/dependencies.py +++ b/dependencies.py @@ -199,17 +199,6 @@ class ExternalLibrary(Dependency): return [self.fullpath] return [] -def find_external_dependency(name, kwargs): - required = kwargs.get('required', True) - if not isinstance(required, bool): - raise DependencyException('Keyword "required" must be a boolean.') - if name in packages: - dep = packages[name](kwargs) - if required and not dep.found(): - raise DependencyException('Dependency "%s" not found' % name) - return dep - return PkgConfigDependency(name, required) - class BoostDependency(Dependency): def __init__(self, kwargs): Dependency.__init__(self) @@ -667,6 +656,35 @@ class AppleFrameworks(Dependency): def found(self): return mesonlib.is_osx() +class ExtraFrameworkDependency(Dependency): + def __init__(self, name, required): + Dependency.__init__(self) + self.name = None + self.detect(name) + + def detect(self, name): + lname = name.lower() + paths = ['/Library/Frameworks'] + for p in paths: + for d in os.listdir(p): + fullpath = os.path.join(p, d) + if lname != d.split('.')[0].lower(): + continue + if not stat.S_ISDIR(os.stat(fullpath).st_mode): + continue + self.path = p + self.name = d + return + + def get_compile_args(self): + return ['-I' + os.path.join(self.path, self.name, 'Headers')] + + def get_link_args(self): + return ['-F' + self.path, '-framework', self.name.split('.')[0]] + + def found(self): + return self.name is not None + def get_dep_identifier(name, kwargs): elements = [name] modlist = kwargs.get('modules', []) @@ -676,6 +694,29 @@ def get_dep_identifier(name, kwargs): elements.append(module) return '/'.join(elements) +def find_external_dependency(name, kwargs): + required = kwargs.get('required', True) + if not isinstance(required, bool): + raise DependencyException('Keyword "required" must be a boolean.') + if name in packages: + dep = packages[name](kwargs) + if required and not dep.found(): + raise DependencyException('Dependency "%s" not found' % name) + return dep + pkg_exc = None + pkgdep = None + try: + pgkdep = PkgConfigDependency(name, required) + if pkgdep.found(): + return pkgdep + except Exception as e: + pkg_exc = e + if mesonlib.is_osx(): + return ExtraFrameworkDependency(name, required) + if pkg_exc is not None: + raise pkg_exc + return pkgdep + # This has to be at the end so the classes it references # are defined. packages = {'boost': BoostDependency, |