diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2015-10-28 00:29:06 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2015-10-28 00:29:06 +0200 |
commit | 096290912046f65008c16bc14b13c6c9b700749b (patch) | |
tree | c1aaea4ae14234abe235807ac2ddfaa05ce8d4db | |
parent | 2984d421b718d3422e2f302643f6016eae5a60ff (diff) | |
download | meson-096290912046f65008c16bc14b13c6c9b700749b.zip meson-096290912046f65008c16bc14b13c6c9b700749b.tar.gz meson-096290912046f65008c16bc14b13c6c9b700749b.tar.bz2 |
Can specify a subproject fallback for dependencies.
-rw-r--r-- | interpreter.py | 19 | ||||
-rw-r--r-- | test cases/common/95 dep fallback/meson.build | 6 | ||||
-rw-r--r-- | test cases/common/95 dep fallback/subprojects/boblib/bob.c | 5 | ||||
-rw-r--r-- | test cases/common/95 dep fallback/subprojects/boblib/bob.h | 3 | ||||
-rw-r--r-- | test cases/common/95 dep fallback/subprojects/boblib/meson.build | 7 | ||||
-rw-r--r-- | test cases/common/95 dep fallback/tester.c | 13 |
6 files changed, 52 insertions, 1 deletions
diff --git a/interpreter.py b/interpreter.py index 55168b8..c78e83d 100644 --- a/interpreter.py +++ b/interpreter.py @@ -1262,6 +1262,9 @@ class Interpreter(): if len(args) != 1: raise InterpreterException('Subproject takes exactly one argument') dirname = args[0] + return self.do_subproject(dirname, kwargs) + + def do_subproject(self, dirname, kwargs): if self.subdir != '': segs = os.path.split(self.subdir) if len(segs) != 2 or segs[0] != self.subproject_dir: @@ -1537,10 +1540,24 @@ class Interpreter(): else: dep = dependencies.Dependency() # Returns always false for dep.found() if not dep.found(): - dep = dependencies.find_external_dependency(name, self.environment, kwargs) + try: + dep = dependencies.find_external_dependency(name, self.environment, kwargs) + except dependencies.DependencyException: + if 'fallback' in kwargs: + return self.dependency_fallback(kwargs) + raise self.coredata.deps[identifier] = dep return DependencyHolder(dep) + def dependency_fallback(self, kwargs): + fbinfo = kwargs['fallback'] + check_stringlist(fbinfo) + if len(fbinfo) != 2: + raise InterpreterException('Fallback info must have exactly two items.') + dirname, varname = fbinfo + self.do_subproject(dirname, kwargs) + return self.subprojects[dirname].get_variable_method([varname], {}) + def func_executable(self, node, args, kwargs): return self.build_target(node, args, kwargs, ExecutableHolder) diff --git a/test cases/common/95 dep fallback/meson.build b/test cases/common/95 dep fallback/meson.build new file mode 100644 index 0000000..86fb6b2 --- /dev/null +++ b/test cases/common/95 dep fallback/meson.build @@ -0,0 +1,6 @@ +project('dep fallback', 'c') + +bob = dependency('boblib', fallback : ['boblib', 'bob_dep']) + +exe = executable('bobtester', 'tester.c', dependencies : bob) +test('bobtester', exe) diff --git a/test cases/common/95 dep fallback/subprojects/boblib/bob.c b/test cases/common/95 dep fallback/subprojects/boblib/bob.c new file mode 100644 index 0000000..b483a55 --- /dev/null +++ b/test cases/common/95 dep fallback/subprojects/boblib/bob.c @@ -0,0 +1,5 @@ +#include"bob.h" + +const char* get_bob() { + return "bob"; +} diff --git a/test cases/common/95 dep fallback/subprojects/boblib/bob.h b/test cases/common/95 dep fallback/subprojects/boblib/bob.h new file mode 100644 index 0000000..bc170ef --- /dev/null +++ b/test cases/common/95 dep fallback/subprojects/boblib/bob.h @@ -0,0 +1,3 @@ +#pragma once + +const char* get_bob(); diff --git a/test cases/common/95 dep fallback/subprojects/boblib/meson.build b/test cases/common/95 dep fallback/subprojects/boblib/meson.build new file mode 100644 index 0000000..8dc1f3a --- /dev/null +++ b/test cases/common/95 dep fallback/subprojects/boblib/meson.build @@ -0,0 +1,7 @@ +project('bob', 'c') + +boblib = static_library('bob', 'bob.c') +bobinc = include_directories('.') + +bob_dep = declare_dependency(link_with : boblib, + include_directories : bobinc) diff --git a/test cases/common/95 dep fallback/tester.c b/test cases/common/95 dep fallback/tester.c new file mode 100644 index 0000000..59e1635 --- /dev/null +++ b/test cases/common/95 dep fallback/tester.c @@ -0,0 +1,13 @@ +#include"bob.h" +#include<string.h> +#include<stdio.h> + +int main(int argc, char **argv) { + if(strcmp("bob", get_bob()) == 0) { + printf("Bob is indeed bob.\n"); + } else { + printf("ERROR: bob is not bob.\n"); + return 1; + } + return 0; +} |