Can store ext deps to internal deps. Closes #304.

pull/278/head
Jussi Pakkanen 9 years ago
parent 8a1f2cdbbc
commit 7b45e6f5f5
  1. 3
      build.py
  2. 3
      dependencies.py
  3. 14
      interpreter.py
  4. 5
      test cases/linuxlike/2 external library/meson.build

@ -435,6 +435,8 @@ class BuildTarget():
return self.include_dirs
def add_external_deps(self, deps):
if not isinstance(deps, list):
deps = [deps]
for dep in deps:
if hasattr(dep, 'held_object'):
dep = dep.held_object
@ -443,6 +445,7 @@ class BuildTarget():
self.add_include_dirs(dep.include_directories)
for l in dep.libraries:
self.link(l)
self.add_external_deps(dep.ext_deps)
elif isinstance(dep, dependencies.Dependency):
self.external_deps.append(dep)
self.process_sourcelist(dep.get_sources())

@ -59,11 +59,12 @@ class Dependency():
return False
class InternalDependency():
def __init__(self, incdirs, libraries, sources):
def __init__(self, incdirs, libraries, sources, ext_deps):
super().__init__()
self.include_directories = incdirs
self.libraries = libraries
self.sources = sources
self.ext_deps = ext_deps
class PkgConfigDependency(Dependency):
pkgconfig_found = None

@ -1111,7 +1111,19 @@ class Interpreter():
if not isinstance(sources, list):
sources = [sources]
sources = self.source_strings_to_files(self.flatten(sources))
dep = dependencies.InternalDependency(incs, libs, sources)
deps = kwargs.get('dependencies', [])
if not isinstance(deps, list):
deps = [deps]
final_deps = []
for d in deps:
try:
d = d.held_object
except Exception:
pass
if not isinstance(d, (dependencies.Dependency, dependencies.ExternalLibrary)):
raise InterpreterException('Dependencies must be external deps')
final_deps.append(d)
dep = dependencies.InternalDependency(incs, libs, sources, deps)
return InternalDependencyHolder(dep)
@noKwargs

@ -22,3 +22,8 @@ assert(not cc.links(nolinkcode, name : 'Failing link'), 'Linking succeeded when
e = executable('zprog', 'prog.c', dependencies : zlib)
test('libtest', e)
# Test that ext deps work via an internal dep.
intdep = declare_dependency(dependencies : zlib)
exe2 = executable('zprog2', 'prog.c', dependencies : intdep)
test('libtest2', exe2)

Loading…
Cancel
Save