aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2015-11-04 23:57:26 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2015-11-04 23:57:26 +0200
commit7b45e6f5f57c577bdb31b9b7b8b9be5190eacfe3 (patch)
tree931dae7d669512e60c21669e639d9833cfc2baf2
parent8a1f2cdbbc96e15a3ec4b67133e04714e6976e22 (diff)
downloadmeson-7b45e6f5f57c577bdb31b9b7b8b9be5190eacfe3.zip
meson-7b45e6f5f57c577bdb31b9b7b8b9be5190eacfe3.tar.gz
meson-7b45e6f5f57c577bdb31b9b7b8b9be5190eacfe3.tar.bz2
Can store ext deps to internal deps. Closes #304.
-rw-r--r--build.py3
-rw-r--r--dependencies.py3
-rw-r--r--interpreter.py14
-rw-r--r--test cases/linuxlike/2 external library/meson.build5
4 files changed, 23 insertions, 2 deletions
diff --git a/build.py b/build.py
index ee9bfdb..47221c1 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 d3a82db..12d8e5e 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 c78e83d..999c53a 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 8be4daa..3e2c172 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)