interpreter: Do not get variable on failed subproject
Fixes:
@@ -2792,6 +2792,12 @@ external dependencies (including libraries) must go to "dependencies".''')
self.subprojects[dirname] = sub
return sub
+ def get_subproject(self, dirname):
+ sub = self.subprojects.get(dirname)
+ if sub and sub.found():
+ return sub
+ return None
+
def do_subproject(self, dirname: str, method: str, kwargs):
disabled, required, feature = extract_required_kwarg(kwargs, self.subproject)
if disabled:
@@ -3518,7 +3524,7 @@ external dependencies (including libraries) must go to "dependencies".''')
return DependencyHolder(NotFoundDependency(self.environment), self.subproject)
def verify_fallback_consistency(self, dirname, varname, cached_dep):
- subi = self.subprojects.get(dirname)
+ subi = self.get_subproject(dirname)
if not cached_dep or not varname or not subi or not cached_dep.found():
return
dep = subi.get_variable_method([varname], {})
@@ -3650,7 +3656,7 @@ external dependencies (including libraries) must go to "dependencies".''')
# even if the dependency is not required.
provider = self.environment.wrap_resolver.find_dep_provider(name)
dirname = mesonlib.listify(provider)[0]
- if provider and (required or dirname in self.subprojects):
+ if provider and (required or self.get_subproject(dirname)):
kwargs['fallback'] = provider
has_fallback = True
@@ -3680,8 +3686,7 @@ external dependencies (including libraries) must go to "dependencies".''')
# a higher level project, try to use it first.
if has_fallback:
dirname, varname = self.get_subproject_infos(kwargs)
- sub = self.subprojects.get(dirname)
- if sub and sub.found():
+ if self.get_subproject(dirname):
return self.get_subproject_dep(name, display_name, dirname, varname, kwargs)
wrap_mode = self.coredata.get_builtin_option('wrap_mode')
