Can query version strings of dependencies.

pull/574/head
Jussi Pakkanen 9 years ago
parent b5013a573a
commit cff4e7d299
  1. 3
      mesonbuild/build.py
  2. 9
      mesonbuild/dependencies.py
  3. 18
      mesonbuild/interpreter.py
  4. 3
      test cases/common/87 declare dep/entity/meson.build
  5. 2
      test cases/linuxlike/1 pkg-config/meson.build

@ -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,
[], [], [])

@ -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

@ -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

@ -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.')

@ -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.

Loading…
Cancel
Save