diff options
author | Niklas Claesson <nicke.claesson@gmail.com> | 2017-12-22 00:48:06 +0100 |
---|---|---|
committer | Niklas Claesson <nicke.claesson@gmail.com> | 2017-12-22 00:59:19 +0100 |
commit | ba161d42ee238d4b2ddbb95682dae32a7f2f809e (patch) | |
tree | cdfe6fe2bc523b25e92b2106769a647394357b2f | |
parent | d1d2aa221380d2035de8aa39637e621d7ee9e570 (diff) | |
download | meson-ba161d42ee238d4b2ddbb95682dae32a7f2f809e.zip meson-ba161d42ee238d4b2ddbb95682dae32a7f2f809e.tar.gz meson-ba161d42ee238d4b2ddbb95682dae32a7f2f809e.tar.bz2 |
subproject handling: add fix
-rw-r--r-- | mesonbuild/interpreter.py | 22 |
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 |