diff options
| author | Paolo Bonzini <pbonzini@redhat.com> | 2025-08-13 14:31:12 +0200 |
|---|---|---|
| committer | Dylan Baker <dylan@pnwbakers.com> | 2025-10-14 09:35:56 -0700 |
| commit | 39ebb8598206d92b1f1f49b7589b7e299175683c (patch) | |
| tree | 9c9049f24c06c476f2fc647235536571d5ac23c4 | |
| parent | 20735c3018f5d4d708a21d47c82b34a592c1a225 (diff) | |
| download | meson-39ebb8598206d92b1f1f49b7589b7e299175683c.tar.gz | |
cargo: pick version from Cargo.toml if not specified in a dependency
Extracted from a patch by Xavier Claessens <xclaessens@netflix.com>
| -rw-r--r-- | mesonbuild/cargo/interpreter.py | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/mesonbuild/cargo/interpreter.py b/mesonbuild/cargo/interpreter.py index 85e3e46d9..12b9cc283 100644 --- a/mesonbuild/cargo/interpreter.py +++ b/mesonbuild/cargo/interpreter.py @@ -160,7 +160,7 @@ class Interpreter: self._add_dependency(pkg, depname) return pkg, False - def _dep_package(self, dep: Dependency) -> PackageState: + def _dep_package(self, pkg: PackageState, dep: Dependency) -> PackageState: if dep.git: _, _, directory = _parse_git_url(dep.git, dep.branch) dep_pkg, _ = self._fetch_package_from_subproject(dep.package, directory) @@ -203,7 +203,7 @@ class Interpreter: # It could be build/dev/target dependency. Just ignore it. return pkg.required_deps.add(depname) - dep_pkg = self._dep_package(dep) + dep_pkg = self._dep_package(pkg, dep) if dep.default_features: self._enable_feature(dep_pkg, 'default') for f in dep.features: @@ -227,7 +227,7 @@ class Interpreter: depname = depname[:-1] if depname in pkg.required_deps: dep = pkg.manifest.dependencies[depname] - dep_pkg = self._dep_package(dep) + dep_pkg = self._dep_package(pkg, dep) self._enable_feature(dep_pkg, dep_f) else: # This feature will be enabled only if that dependency @@ -237,7 +237,7 @@ class Interpreter: self._add_dependency(pkg, depname) dep = pkg.manifest.dependencies.get(depname) if dep: - dep_pkg = self._dep_package(dep) + dep_pkg = self._dep_package(pkg, dep) self._enable_feature(dep_pkg, dep_f) elif f.startswith('dep:'): self._add_dependency(pkg, f[4:]) @@ -302,7 +302,8 @@ class Interpreter: ast: T.List[mparser.BaseNode] = [] for depname in pkg.required_deps: dep = pkg.manifest.dependencies[depname] - ast += self._create_dependency(dep, build) + dep_pkg = self._dep_package(pkg, dep) + ast += self._create_dependency(dep_pkg, dep, build) ast.append(build.assign(build.array([]), 'system_deps_args')) for name, sys_dep in pkg.manifest.system_dependencies.items(): if sys_dep.enabled(pkg.features): @@ -336,10 +337,11 @@ class Interpreter: ), ] - def _create_dependency(self, dep: Dependency, build: builder.Builder) -> T.List[mparser.BaseNode]: - pkg = self._dep_package(dep) + def _create_dependency(self, pkg: PackageState, dep: Dependency, build: builder.Builder) -> T.List[mparser.BaseNode]: + version_ = dep.meson_version or [pkg.manifest.package.version] + api = dep.api or pkg.manifest.package.api kw = { - 'version': build.array([build.string(s) for s in dep.meson_version]), + 'version': build.array([build.string(s) for s in version_]), } # Lookup for this dependency with the features we want in default_options kwarg. # @@ -357,7 +359,7 @@ class Interpreter: build.assign( build.function( 'dependency', - [build.string(_dependency_name(dep.package, dep.api))], + [build.string(_dependency_name(dep.package, api))], kw, ), _dependency_varname(dep.package), @@ -387,7 +389,7 @@ class Interpreter: build.if_(build.not_in(build.identifier('f'), build.identifier('actual_features')), build.block([ build.function('error', [ build.string('Dependency'), - build.string(_dependency_name(dep.package, dep.api)), + build.string(_dependency_name(dep.package, api)), build.string('previously configured with features'), build.identifier('actual_features'), build.string('but need'), @@ -422,7 +424,7 @@ class Interpreter: dep = pkg.manifest.dependencies[name] dependencies.append(build.identifier(_dependency_varname(dep.package))) if name != dep.package: - dep_pkg = self._dep_package(dep) + dep_pkg = self._dep_package(pkg, dep) dep_lib_name = dep_pkg.manifest.lib.name dependency_map[build.string(fixup_meson_varname(dep_lib_name))] = build.string(name) for name, sys_dep in pkg.manifest.system_dependencies.items(): |
