aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/interpreter.py
diff options
context:
space:
mode:
authorSaunier Thibault <saunierthibault@gmail.com>2016-08-29 16:31:10 -0300
committerJussi Pakkanen <jpakkane@gmail.com>2016-08-29 22:31:10 +0300
commite411c0b9306601d1471eb98d431eedcb1fa37189 (patch)
tree57ace763bea77a84f857158ed622cac85daa0bf9 /mesonbuild/interpreter.py
parent6475bdbe20e966e060d984823adaa12dbd6f1011 (diff)
downloadmeson-e411c0b9306601d1471eb98d431eedcb1fa37189.zip
meson-e411c0b9306601d1471eb98d431eedcb1fa37189.tar.gz
meson-e411c0b9306601d1471eb98d431eedcb1fa37189.tar.bz2
Honor dependency `fallback` argument even if the dependency is not required (#735)
You can potentially have a fallback subproject and if that subproject fails, you can continue without that dependency
Diffstat (limited to 'mesonbuild/interpreter.py')
-rw-r--r--mesonbuild/interpreter.py28
1 files changed, 20 insertions, 8 deletions
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index c9a81fb..5e31a87 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -1717,14 +1717,23 @@ class Interpreter():
dep = cached_dep
else:
# We need to actually search for this dep
+ exception = None
+ dep = None
try:
dep = dependencies.find_external_dependency(name, self.environment, kwargs)
- except dependencies.DependencyException:
+ except dependencies.DependencyException as e:
+ exception = e
+ pass
+
+ if not dep or not dep.found():
if 'fallback' in kwargs:
- dep = self.dependency_fallback(name, kwargs)
- self.coredata.deps[identifier] = dep.held_object
- return dep
- raise
+ fallback_dep = self.dependency_fallback(name, kwargs)
+ if fallback_dep:
+ return fallback_dep
+
+ if not dep:
+ raise exception
+
self.coredata.deps[identifier] = dep
return DependencyHolder(dep)
@@ -1738,9 +1747,12 @@ class Interpreter():
self.do_subproject(dirname, {})
except:
mlog.log('Also couldn\'t find a fallback subproject in',
- mlog.bold(os.path.join(self.subproject_dir, dirname)),
- 'for the dependency', mlog.bold(name))
- raise
+ mlog.bold(os.path.join(self.subproject_dir, dirname)),
+ 'for the dependency', mlog.bold(name))
+ if kwargs.get('required', True):
+ raise
+ else:
+ return None
dep = self.subprojects[dirname].get_variable_method([varname], {})
if not isinstance(dep, (DependencyHolder, InternalDependencyHolder)):
raise InterpreterException('Fallback variable is not a dependency object.')