From cff4e7d29904250ff95feda85d8baa9da93652de Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Sun, 29 May 2016 03:15:16 +0300 Subject: [PATCH] Can query version strings of dependencies. --- mesonbuild/build.py | 3 ++- mesonbuild/dependencies.py | 9 ++++++++- mesonbuild/interpreter.py | 18 +++++++++++++++--- .../common/87 declare dep/entity/meson.build | 3 +++ test cases/linuxlike/1 pkg-config/meson.build | 2 ++ 5 files changed, 30 insertions(+), 5 deletions(-) diff --git a/mesonbuild/build.py b/mesonbuild/build.py index fcf1ac6f6..105230331 100644 --- a/mesonbuild/build.py +++ b/mesonbuild/build.py @@ -497,7 +497,8 @@ class BuildTarget(): for l in dep.libraries: self.link(l) # Those parts that are external. - extpart = dependencies.InternalDependency([], + extpart = dependencies.InternalDependency('undefined', + [], dep.compile_args, dep.link_args, [], [], []) diff --git a/mesonbuild/dependencies.py b/mesonbuild/dependencies.py index d8081b0ef..7462bd8c0 100644 --- a/mesonbuild/dependencies.py +++ b/mesonbuild/dependencies.py @@ -59,8 +59,9 @@ class Dependency(): return False class InternalDependency(Dependency): - def __init__(self, incdirs, compile_args, link_args, libraries, sources, ext_deps): + def __init__(self, version, incdirs, compile_args, link_args, libraries, sources, ext_deps): super().__init__() + self.version = version self.include_directories = incdirs self.compile_args = compile_args self.link_args = link_args @@ -74,6 +75,9 @@ class InternalDependency(Dependency): def get_link_args(self): return self.link_args + def get_version(self): + return self.version + class PkgConfigDependency(Dependency): pkgconfig_found = None @@ -188,6 +192,9 @@ class PkgConfigDependency(Dependency): def get_modversion(self): return self.modversion + def get_version(self): + return self.get_modversion() + def get_compile_args(self): return self.cargs diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index aac021ac5..3b9226a0d 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -225,20 +225,29 @@ class DependencyHolder(InterpreterObject): def __init__(self, dep): InterpreterObject.__init__(self) self.held_object = dep - self.methods.update({'found' : self.found_method}) + self.methods.update({'found' : self.found_method, + 'version': self.version_method}) def found_method(self, args, kwargs): 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}) + 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): InterpreterObject.__init__(self) @@ -1175,6 +1184,9 @@ class Interpreter(): @noPosargs def func_declare_dependency(self, node, args, kwargs): + version = kwargs.get('version', 'undefined') + if not isinstance(version, str): + raise InterpreterException('Version must be a string.') incs = kwargs.get('include_directories', []) if not isinstance(incs, list): incs = [incs] @@ -1199,7 +1211,7 @@ class Interpreter(): if not isinstance(d, (dependencies.Dependency, dependencies.ExternalLibrary, dependencies.InternalDependency)): raise InterpreterException('Dependencies must be external deps') final_deps.append(d) - dep = dependencies.InternalDependency(incs, compile_args, link_args, libs, sources, final_deps) + dep = dependencies.InternalDependency(version, incs, compile_args, link_args, libs, sources, final_deps) return InternalDependencyHolder(dep) @noKwargs diff --git a/test cases/common/87 declare dep/entity/meson.build b/test cases/common/87 declare dep/entity/meson.build index 12050b5a2..80bbf36fa 100644 --- a/test cases/common/87 declare dep/entity/meson.build +++ b/test cases/common/87 declare dep/entity/meson.build @@ -4,4 +4,7 @@ entity_dep = declare_dependency(link_with : entity_lib, include_directories : include_directories('.'), sources : 'entity2.c', compile_args : ['-DUSING_ENT=1'], + version : '1.2.3', link_args : []) # No simple way of testing linker flags :(. + +assert(entity_dep.version().version_compare('==1.2.3'), 'Declare_dep has incorrect version string.') diff --git a/test cases/linuxlike/1 pkg-config/meson.build b/test cases/linuxlike/1 pkg-config/meson.build index b7f40db9c..a18acc5ce 100644 --- a/test cases/linuxlike/1 pkg-config/meson.build +++ b/test cases/linuxlike/1 pkg-config/meson.build @@ -5,6 +5,8 @@ project('external dependency', 'c') dep = dependency('zlib', version : '>=1.2.8') exe = executable('zlibprog', 'prog.c', dependencies : dep) +assert(dep.version().version_compare('>=1.2.8'), 'Pkg-config version numbers exposed incorrectly.') + test('zlibtest', exe) # Test that dependencies of dependencies work.