aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/interpreter.py
diff options
context:
space:
mode:
authorXavier Claessens <xavier.claessens@collabora.com>2018-10-06 08:11:21 -0400
committerJussi Pakkanen <jpakkane@gmail.com>2018-10-07 19:35:11 +0300
commit091e079354fe6322823048c9debd1a13bdc7e37f (patch)
tree7d68d76a5a19bab2265704dcf93eadcb20fea017 /mesonbuild/interpreter.py
parent047db1c64cd5b7ef070f73e1d580e36236ac9613 (diff)
downloadmeson-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.py30
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: