diff options
author | Xavier Claessens <xavier.claessens@collabora.com> | 2018-10-06 08:11:21 -0400 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2018-10-07 19:35:11 +0300 |
commit | 091e079354fe6322823048c9debd1a13bdc7e37f (patch) | |
tree | 7d68d76a5a19bab2265704dcf93eadcb20fea017 /mesonbuild/interpreter.py | |
parent | 047db1c64cd5b7ef070f73e1d580e36236ac9613 (diff) | |
download | meson-091e079354fe6322823048c9debd1a13bdc7e37f.zip meson-091e079354fe6322823048c9debd1a13bdc7e37f.tar.gz meson-091e079354fe6322823048c9debd1a13bdc7e37f.tar.bz2 |
dependency variable from subproject could be not-found
When using a subproject as fallback for a required dependency, we should
check if the dependency object we get from the subproject is found.
Diffstat (limited to 'mesonbuild/interpreter.py')
-rw-r--r-- | mesonbuild/interpreter.py | 30 |
1 files changed, 14 insertions, 16 deletions
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index cf94fe5..e97ac8e 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -2844,35 +2844,33 @@ external dependencies (including libraries) must go to "dependencies".''') return True def get_subproject_dep(self, name, dirname, varname, required): + dep = DependencyHolder(NotFoundDependency(self.environment), self.subproject) try: subproject = self.subprojects[dirname] - if not subproject.found(): - if not required: - return DependencyHolder(NotFoundDependency(self.environment), self.subproject) + if subproject.found(): + dep = self.subprojects[dirname].get_variable_method([varname], {}) + except InvalidArguments as e: + pass - raise DependencyException('Subproject %s was not found.' % (name)) + if not isinstance(dep, DependencyHolder): + raise InvalidCode('Fetched variable {!r} in the subproject {!r} is ' + 'not a dependency object.'.format(varname, dirname)) - dep = self.subprojects[dirname].get_variable_method([varname], {}) - except InvalidArguments as e: + if not dep.found(): if required: - raise DependencyException('Could not find dependency {} in subproject {}; {}' - ''.format(varname, dirname, str(e))) + raise DependencyException('Could not find dependency {} in subproject {}' + ''.format(varname, dirname)) # If the dependency is not required, don't raise an exception subproj_path = os.path.join(self.subproject_dir, dirname) mlog.log('Dependency', mlog.bold(name), 'from subproject', mlog.bold(subproj_path), 'found:', mlog.red('NO')) - return None - if not isinstance(dep, DependencyHolder): - raise InvalidCode('Fetched variable {!r} in the subproject {!r} is ' - 'not a dependency object.'.format(varname, dirname)) + return dep def _find_cached_fallback_dep(self, name, dirname, varname, wanted, required): if dirname not in self.subprojects: return False dep = self.get_subproject_dep(name, dirname, varname, required) - if not dep: - return False if not dep.found(): return dep @@ -3053,8 +3051,8 @@ root and issuing %s. return None required = kwargs.get('required', True) dep = self.get_subproject_dep(name, dirname, varname, required) - if not dep: - return None + if not dep.found(): + return dep subproj_path = os.path.join(self.subproject_dir, dirname) # Check if the version of the declared dependency matches what we want if 'version' in kwargs: |