Can query version strings of dependencies.
This commit is contained in:
parent
b5013a573a
commit
cff4e7d299
|
@ -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…
Reference in New Issue