diff --git a/build.py b/build.py index ee9bfdbac..47221c1c2 100644 --- a/build.py +++ b/build.py @@ -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()) diff --git a/dependencies.py b/dependencies.py index d3a82db27..12d8e5ed2 100644 --- a/dependencies.py +++ b/dependencies.py @@ -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 diff --git a/interpreter.py b/interpreter.py index c78e83d18..999c53ab2 100644 --- a/interpreter.py +++ b/interpreter.py @@ -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 diff --git a/test cases/linuxlike/2 external library/meson.build b/test cases/linuxlike/2 external library/meson.build index 8be4daac1..3e2c172d0 100644 --- a/test cases/linuxlike/2 external library/meson.build +++ b/test cases/linuxlike/2 external library/meson.build @@ -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)