diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index 51c40c900..72eebe7c8 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -1683,20 +1683,26 @@ class Interpreter(): dep = dependencies.find_external_dependency(name, self.environment, kwargs) except dependencies.DependencyException: if 'fallback' in kwargs: - dep = self.dependency_fallback(kwargs) + dep = self.dependency_fallback(name, kwargs) self.coredata.deps[identifier] = dep.held_object return dep raise self.coredata.deps[identifier] = dep return DependencyHolder(dep) - def dependency_fallback(self, kwargs): + def dependency_fallback(self, name, kwargs): fbinfo = kwargs['fallback'] check_stringlist(fbinfo) if len(fbinfo) != 2: raise InterpreterException('Fallback info must have exactly two items.') dirname, varname = fbinfo - self.do_subproject(dirname, {}) + try: + 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 dep = self.subprojects[dirname].get_variable_method([varname], {}) # Check if the version of the declared dependency matches what we want if 'version' in kwargs: @@ -1705,6 +1711,9 @@ class Interpreter(): if found == 'undefined' or not mesonlib.version_compare(found, wanted): m = 'Subproject "{0}" dependency "{1}" version is "{2}" but "{3}" is required.' raise InterpreterException(m.format(dirname, varname, found, wanted)) + mlog.log('Found a', mlog.green('fallback'), 'subproject', + mlog.bold(os.path.join(self.subproject_dir, dirname)), 'for', + mlog.bold(name)) return dep def func_executable(self, node, args, kwargs):