Can query version strings of dependencies.

This commit is contained in:
Jussi Pakkanen 2016-05-29 03:15:16 +03:00
parent b5013a573a
commit cff4e7d299
5 changed files with 30 additions and 5 deletions

View File

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

View File

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

View File

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

View File

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

View File

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