diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2014-12-17 20:06:19 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2014-12-17 20:06:19 +0200 |
commit | db8585e8a35f05b134a5fb13e00820918967ac79 (patch) | |
tree | e87717bf9f460c625f9426e84a3f56f7814a0235 | |
parent | 08ef881c86a6cd0fe1dd4ad0fd8efc0440275f04 (diff) | |
download | meson-db8585e8a35f05b134a5fb13e00820918967ac79.zip meson-db8585e8a35f05b134a5fb13e00820918967ac79.tar.gz meson-db8585e8a35f05b134a5fb13e00820918967ac79.tar.bz2 |
Detect frameworks on OSX as external dependencies.
-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, |