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 /interpreter.py | |
parent | 2984d421b718d3422e2f302643f6016eae5a60ff (diff) | |
download | meson-096290912046f65008c16bc14b13c6c9b700749b.zip meson-096290912046f65008c16bc14b13c6c9b700749b.tar.gz meson-096290912046f65008c16bc14b13c6c9b700749b.tar.bz2 |
Can specify a subproject fallback for dependencies.
Diffstat (limited to 'interpreter.py')
-rw-r--r-- | interpreter.py | 19 |
1 files changed, 18 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) |