aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiklas Claesson <nicke.claesson@gmail.com>2017-12-22 00:48:06 +0100
committerNiklas Claesson <nicke.claesson@gmail.com>2017-12-22 00:59:19 +0100
commitba161d42ee238d4b2ddbb95682dae32a7f2f809e (patch)
treecdfe6fe2bc523b25e92b2106769a647394357b2f
parentd1d2aa221380d2035de8aa39637e621d7ee9e570 (diff)
downloadmeson-ba161d42ee238d4b2ddbb95682dae32a7f2f809e.zip
meson-ba161d42ee238d4b2ddbb95682dae32a7f2f809e.tar.gz
meson-ba161d42ee238d4b2ddbb95682dae32a7f2f809e.tar.bz2
subproject handling: add fix
-rw-r--r--mesonbuild/interpreter.py22
1 files changed, 16 insertions, 6 deletions
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index 93f4b1a..71552a2 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -2172,13 +2172,23 @@ to directly access options of other subprojects.''')
# a higher level project, try to use it first.
if 'fallback' in kwargs:
dirname, varname = self.get_subproject_infos(kwargs)
+ required = kwargs.get('required', True)
+ wanted = kwargs.get('version', 'undefined')
+ if not isinstance(required, bool):
+ raise DependencyException('Keyword "required" must be a boolean.')
if dirname in self.subprojects:
- subproject = self.subprojects[dirname]
- try:
- # Never add fallback deps to self.coredata.deps
- return subproject.get_variable_method([varname], {})
- except KeyError:
- pass
+ found = self.subprojects[dirname].held_object.project_version
+ valid_version = wanted == 'undefined' or mesonlib.version_compare(found, wanted)
+ if required and not valid_version:
+ m = 'Version {} of {} already loaded, requested incompatible version {}'
+ raise DependencyException(m.format(found, dirname, wanted))
+ elif valid_version:
+ subproject = self.subprojects[dirname]
+ try:
+ # Never add fallback deps to self.coredata.deps
+ return subproject.get_variable_method([varname], {})
+ except KeyError:
+ pass
# We need to actually search for this dep
exception = None