diff --git a/mesonbuild/cargo/interpreter.py b/mesonbuild/cargo/interpreter.py index 0528c4c9008b..1b39aebf0dde 100644 --- a/mesonbuild/cargo/interpreter.py +++ b/mesonbuild/cargo/interpreter.py @@ -543,11 +543,19 @@ def _load_manifest(self, subdir: str) -> Manifest: raise MesonException(f'{subdir}/Cargo.toml does not have [package] section') return manifest_ - def _add_dependency(self, pkg: PackageState, depname: str) -> None: + def _add_dependency(self, pkg: PackageState, depname: str) -> T.Optional[PackageState]: if depname in pkg.required_deps: return + dep = pkg.manifest.dependencies.get(depname) + if dep is None: + if depname in pkg.manifest.dev_dependencies: + # FIXME: Not supported yet + return None + if depname in pkg.manifest.build_dependencies: + # FIXME: Not supported yet + return None + raise MesonException(f'Dependency {depname} not defined in {pkg.manifest.package.name} manifest') pkg.required_deps.add(depname) - dep = pkg.manifest.dependencies[depname] dep_pkg, _ = self._fetch_package(dep.package, dep.api) if dep.default_features: self._enable_feature(dep_pkg, 'default') @@ -555,6 +563,7 @@ def _add_dependency(self, pkg: PackageState, depname: str) -> None: self._enable_feature(dep_pkg, f) for f in pkg.optional_deps_features[depname]: self._enable_feature(dep_pkg, f) + return dep_pkg def _enable_feature(self, pkg: PackageState, feature: str) -> None: if feature in pkg.features: @@ -579,10 +588,9 @@ def _enable_feature(self, pkg: PackageState, feature: str) -> None: # is later added. pkg.optional_deps_features[depname].add(dep_f) else: - self._add_dependency(pkg, depname) - dep = pkg.manifest.dependencies[depname] - dep_pkg = self._dep_package(dep) - self._enable_feature(dep_pkg, dep_f) + dep_pkg = self._add_dependency(pkg, depname) + if dep_pkg is not None: + self._enable_feature(dep_pkg, dep_f) elif f.startswith('dep:'): self._add_dependency(pkg, f[4:]) else: