aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThibault Saunier <thibault.saunier@osg.samsung.com>2016-10-04 09:45:41 -0300
committerThibault Saunier <thibault.saunier@osg.samsung.com>2016-10-14 11:25:15 +0200
commit7e2390f3558d05b3168dc57f2c2fe923b8ed12af (patch)
tree25acfbcc33da8afa60654b433c1fd04d13fcbec7
parentb6b8d561b84eb950d1503e682ca2eab3b656efa9 (diff)
downloadmeson-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.py40
-rw-r--r--mesonbuild/interpreter.py24
-rw-r--r--test cases/linuxlike/5 dependency versions/meson.build2
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',