diff options
author | Thibault Saunier <thibault.saunier@osg.samsung.com> | 2016-10-04 09:45:41 -0300 |
---|---|---|
committer | Thibault Saunier <thibault.saunier@osg.samsung.com> | 2016-10-14 11:25:15 +0200 |
commit | 7e2390f3558d05b3168dc57f2c2fe923b8ed12af (patch) | |
tree | 25acfbcc33da8afa60654b433c1fd04d13fcbec7 | |
parent | b6b8d561b84eb950d1503e682ca2eab3b656efa9 (diff) | |
download | meson-7e2390f3558d05b3168dc57f2c2fe923b8ed12af.zip meson-7e2390f3558d05b3168dc57f2c2fe923b8ed12af.tar.gz meson-7e2390f3558d05b3168dc57f2c2fe923b8ed12af.tar.bz2 |
interpreter: Add a type_name method to DependencyHolder
And remove the InternalDependencyHolder class.
In some cases we need to know the type of dependency we are
dealing with. For example in GStreamer if the dependency
is not an internal one, then we need to get some env var
from pkg-config to know where to find some plugins necessary
to run some tests.
-rw-r--r-- | mesonbuild/dependencies.py | 40 | ||||
-rw-r--r-- | mesonbuild/interpreter.py | 24 | ||||
-rw-r--r-- | test cases/linuxlike/5 dependency versions/meson.build | 2 |
3 files changed, 34 insertions, 32 deletions
diff --git a/mesonbuild/dependencies.py b/mesonbuild/dependencies.py index 6a4c32c..d0c7663 100644 --- a/mesonbuild/dependencies.py +++ b/mesonbuild/dependencies.py @@ -32,9 +32,10 @@ class DependencyException(MesonException): MesonException.__init__(self, *args, **kwargs) class Dependency(): - def __init__(self): + def __init__(self, type_name='unknown'): self.name = "null" self.is_found = False + self.type_name = type_name def get_compile_args(self): return [] @@ -59,9 +60,12 @@ class Dependency(): def need_threads(self): return False + def type_name(self): + return self.type_name + class InternalDependency(Dependency): def __init__(self, version, incdirs, compile_args, link_args, libraries, sources, ext_deps): - super().__init__() + super().__init__('internal') self.version = version self.include_directories = incdirs self.compile_args = compile_args @@ -83,7 +87,7 @@ class PkgConfigDependency(Dependency): pkgconfig_found = None def __init__(self, name, environment, kwargs): - Dependency.__init__(self) + Dependency.__init__(self, 'pkgconfig') self.is_libtool = False self.required = kwargs.get('required', True) self.static = kwargs.get('static', False) @@ -270,7 +274,7 @@ class WxDependency(Dependency): wx_found = None def __init__(self, environment, kwargs): - Dependency.__init__(self) + Dependency.__init__(self, 'wx') self.is_found = False if WxDependency.wx_found is None: self.check_wxconfig() @@ -445,7 +449,7 @@ class ExternalProgram(): class ExternalLibrary(Dependency): def __init__(self, name, link_args=None, silent=False): - super().__init__() + super().__init__('external') self.name = name # Rename fullpath to link_args once standalone find_library() gets removed. if link_args is not None: @@ -476,7 +480,7 @@ class BoostDependency(Dependency): name2lib = {'test' : 'unit_test_framework'} def __init__(self, environment, kwargs): - Dependency.__init__(self) + Dependency.__init__(self, 'boost') self.name = 'boost' self.environment = environment self.libdir = '' @@ -677,7 +681,7 @@ class BoostDependency(Dependency): class GTestDependency(Dependency): def __init__(self, environment, kwargs): - Dependency.__init__(self) + Dependency.__init__(self, 'gtest') self.main = kwargs.get('main', False) self.name = 'gtest' self.libname = 'libgtest.so' @@ -744,7 +748,7 @@ class GTestDependency(Dependency): class GMockDependency(Dependency): def __init__(self, environment, kwargs): - Dependency.__init__(self) + Dependency.__init__(self, 'gmock') # GMock may be a library or just source. # Work with both. self.name = 'gmock' @@ -798,7 +802,7 @@ class GMockDependency(Dependency): class Qt5Dependency(Dependency): def __init__(self, environment, kwargs): - Dependency.__init__(self) + Dependency.__init__(self, 'qt5') self.name = 'qt5' self.root = '/usr' mods = kwargs.get('modules', []) @@ -909,7 +913,7 @@ class Qt5Dependency(Dependency): class Qt4Dependency(Dependency): def __init__(self, environment, kwargs): - Dependency.__init__(self) + Dependency.__init__(self, 'qt4') self.name = 'qt4' self.root = '/usr' self.modules = [] @@ -947,7 +951,7 @@ class Qt4Dependency(Dependency): class GnuStepDependency(Dependency): def __init__(self, environment, kwargs): - Dependency.__init__(self) + Dependency.__init__(self, 'gnustep') self.modules = kwargs.get('modules', []) self.detect() @@ -1019,7 +1023,7 @@ why. As a hack filter out everything that is not a flag.""" class AppleFrameworks(Dependency): def __init__(self, environment, kwargs): - Dependency.__init__(self) + Dependency.__init__(self, 'appleframeworks') modules = kwargs.get('modules', []) if isinstance(modules, str): modules = [modules] @@ -1039,13 +1043,14 @@ class AppleFrameworks(Dependency): class GLDependency(Dependency): def __init__(self, environment, kwargs): - Dependency.__init__(self) + Dependency.__init__(self, 'gl') self.is_found = False self.cargs = [] self.linkargs = [] try: pcdep = PkgConfigDependency('gl', environment, kwargs) if pcdep.found(): + self.type_name = 'pkgconfig' self.is_found = True self.cargs = pcdep.get_compile_args() self.linkargs = pcdep.get_link_args() @@ -1068,13 +1073,14 @@ class GLDependency(Dependency): # sdl2-config, pkg-config and OSX framework class SDL2Dependency(Dependency): def __init__(self, environment, kwargs): - Dependency.__init__(self) + Dependency.__init__(self, 'sdl2') self.is_found = False self.cargs = [] self.linkargs = [] try: pcdep = PkgConfigDependency('sdl2', environment, kwargs) if pcdep.found(): + self.type_name = 'pkgconfig' self.is_found = True self.cargs = pcdep.get_compile_args() self.linkargs = pcdep.get_link_args() @@ -1124,7 +1130,7 @@ class SDL2Dependency(Dependency): class ExtraFrameworkDependency(Dependency): def __init__(self, name, required, path=None): - Dependency.__init__(self) + Dependency.__init__(self, 'extraframeworks') self.name = None self.detect(name, path) if self.found(): @@ -1165,7 +1171,7 @@ class ExtraFrameworkDependency(Dependency): class ThreadDependency(Dependency): def __init__(self, environment, kwargs): - super().__init__() + super().__init__('threads') self.name = 'threads' self.is_found = True mlog.log('Dependency', mlog.bold(self.name), 'found:', mlog.green('YES')) @@ -1175,7 +1181,7 @@ class ThreadDependency(Dependency): class Python3Dependency(Dependency): def __init__(self, environment, kwargs): - super().__init__() + super().__init__('python3') self.name = 'python3' self.is_found = False self.version = "3.something_maybe" diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index e486ee9..2a7ad6e 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -278,27 +278,21 @@ class DependencyHolder(InterpreterObject): InterpreterObject.__init__(self) self.held_object = dep self.methods.update({'found' : self.found_method, + 'type_name': self.type_name_method, 'version': self.version_method}) + def type_name_method(self, args, kwargs): + return self.held_object.type_name + def found_method(self, args, kwargs): + if self.held_object.type_name == 'internal': + return True + return self.held_object.found() def version_method(self, args, kwargs): return self.held_object.get_version() -class InternalDependencyHolder(InterpreterObject): - def __init__(self, dep): - InterpreterObject.__init__(self) - self.held_object = dep - self.methods.update({'found' : self.found_method, - 'version': self.version_method, - }) - - def found_method(self, args, kwargs): - return True - - def version_method(self, args, kwargs): - return self.held_object.get_version() class ExternalProgramHolder(InterpreterObject): def __init__(self, ep): @@ -1394,7 +1388,7 @@ class Interpreter(): raise InterpreterException('Dependencies must be external deps') final_deps.append(d) dep = dependencies.InternalDependency(version, incs, compile_args, link_args, libs, sources, final_deps) - return InternalDependencyHolder(dep) + return DependencyHolder(dep) @noKwargs def func_assert(self, node, args, kwargs): @@ -1873,7 +1867,7 @@ class Interpreter(): dep = self.subprojects[dirname].get_variable_method([varname], {}) except KeyError: raise InterpreterException('Fallback variable {!r} in the subproject {!r} does not exist'.format(varname, dirname)) - if not isinstance(dep, (DependencyHolder, InternalDependencyHolder)): + if not isinstance(dep, DependencyHolder): raise InterpreterException('Fallback variable {!r} in the subproject {!r} is not a dependency object.'.format(varname, dirname)) # Check if the version of the declared dependency matches what we want if 'version' in kwargs: diff --git a/test cases/linuxlike/5 dependency versions/meson.build b/test cases/linuxlike/5 dependency versions/meson.build index a3ee335..9bc264c 100644 --- a/test cases/linuxlike/5 dependency versions/meson.build +++ b/test cases/linuxlike/5 dependency versions/meson.build @@ -6,6 +6,7 @@ zlib = dependency('zlib') zlibver = dependency('zlib', version : '>1.0') assert(zlib.version() == zlibver.version(), 'zlib versions did not match!') # Find external dependency with conflicting version +assert(zlib.type_name() == 'pkgconfig', 'zlib should be of type "pkgconfig" not ' + zlib.type_name()) zlibver = dependency('zlib', version : '<1.0', required : false) assert(zlibver.found() == false, 'zlib <1.0 should not be found!') @@ -16,6 +17,7 @@ dependency('somebrokenlib', version : '>=1.0', required : false) # Find internal dependency without version somelibver = dependency('somelib', fallback : ['somelibnover', 'some_dep']) +assert(somelibver.type_name() == 'internal', 'somelibver should be of type "internal", not ' + somelibver.type_name()) # Find an internal dependency again with the same name and a specific version somelib = dependency('somelib', version : '== 0.1', |