Skip to content

Commit e5e66db

Browse files
committed
cargo: pick version from Cargo.toml if not specified in a dependency
Extracted from a patch by Xavier Claessens <xclaessens@netflix.com>
1 parent a015977 commit e5e66db

File tree

1 file changed

+13
-11
lines changed

1 file changed

+13
-11
lines changed

mesonbuild/cargo/interpreter.py

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ def _fetch_package_from_subproject(self, package_name: str, meson_depname: str)
149149
self._add_dependency(pkg, depname)
150150
return pkg, False
151151

152-
def _dep_package(self, dep: Dependency) -> PackageState:
152+
def _dep_package(self, pkg: PackageState, dep: Dependency) -> PackageState:
153153
if dep.git:
154154
_, _, directory = _parse_git_url(dep.git, dep.branch)
155155
dep_pkg, _ = self._fetch_package_from_subproject(dep.package, directory)
@@ -192,7 +192,7 @@ def _add_dependency(self, pkg: PackageState, depname: str) -> None:
192192
# It could be build/dev/target dependency. Just ignore it.
193193
return
194194
pkg.required_deps.add(depname)
195-
dep_pkg = self._dep_package(dep)
195+
dep_pkg = self._dep_package(pkg, dep)
196196
if dep.default_features:
197197
self._enable_feature(dep_pkg, 'default')
198198
for f in dep.features:
@@ -216,7 +216,7 @@ def _enable_feature(self, pkg: PackageState, feature: str) -> None:
216216
depname = depname[:-1]
217217
if depname in pkg.required_deps:
218218
dep = pkg.manifest.dependencies[depname]
219-
dep_pkg = self._dep_package(dep)
219+
dep_pkg = self._dep_package(pkg, dep)
220220
self._enable_feature(dep_pkg, dep_f)
221221
else:
222222
# This feature will be enabled only if that dependency
@@ -226,7 +226,7 @@ def _enable_feature(self, pkg: PackageState, feature: str) -> None:
226226
self._add_dependency(pkg, depname)
227227
dep = pkg.manifest.dependencies.get(depname)
228228
if dep:
229-
dep_pkg = self._dep_package(dep)
229+
dep_pkg = self._dep_package(pkg, dep)
230230
self._enable_feature(dep_pkg, dep_f)
231231
elif f.startswith('dep:'):
232232
self._add_dependency(pkg, f[4:])
@@ -291,7 +291,8 @@ def _create_dependencies(self, pkg: PackageState, build: builder.Builder) -> T.L
291291
ast: T.List[mparser.BaseNode] = []
292292
for depname in pkg.required_deps:
293293
dep = pkg.manifest.dependencies[depname]
294-
ast += self._create_dependency(dep, build)
294+
dep_pkg = self._dep_package(pkg, dep)
295+
ast += self._create_dependency(dep_pkg, dep, build)
295296
ast.append(build.assign(build.array([]), 'system_deps_args'))
296297
for name, sys_dep in pkg.manifest.system_dependencies.items():
297298
if sys_dep.enabled(pkg.features):
@@ -325,10 +326,11 @@ def _create_system_dependency(self, name: str, dep: SystemDependency, build: bui
325326
),
326327
]
327328

328-
def _create_dependency(self, dep: Dependency, build: builder.Builder) -> T.List[mparser.BaseNode]:
329-
pkg = self._dep_package(dep)
329+
def _create_dependency(self, pkg: PackageState, dep: Dependency, build: builder.Builder) -> T.List[mparser.BaseNode]:
330+
version_ = dep.meson_version or [pkg.manifest.package.version]
331+
api = dep.api or pkg.manifest.package.api
330332
kw = {
331-
'version': build.array([build.string(s) for s in dep.meson_version]),
333+
'version': build.array([build.string(s) for s in version_]),
332334
}
333335
# Lookup for this dependency with the features we want in default_options kwarg.
334336
#
@@ -346,7 +348,7 @@ def _create_dependency(self, dep: Dependency, build: builder.Builder) -> T.List[
346348
build.assign(
347349
build.function(
348350
'dependency',
349-
[build.string(_dependency_name(dep.package, dep.api))],
351+
[build.string(_dependency_name(dep.package, api))],
350352
kw,
351353
),
352354
_dependency_varname(dep.package),
@@ -376,7 +378,7 @@ def _create_dependency(self, dep: Dependency, build: builder.Builder) -> T.List[
376378
build.if_(build.not_in(build.identifier('f'), build.identifier('actual_features')), build.block([
377379
build.function('error', [
378380
build.string('Dependency'),
379-
build.string(_dependency_name(dep.package, dep.api)),
381+
build.string(_dependency_name(dep.package, api)),
380382
build.string('previously configured with features'),
381383
build.identifier('actual_features'),
382384
build.string('but need'),
@@ -411,7 +413,7 @@ def _create_lib(self, pkg: PackageState, build: builder.Builder, crate_type: raw
411413
dep = pkg.manifest.dependencies[name]
412414
dependencies.append(build.identifier(_dependency_varname(dep.package)))
413415
if name != dep.package:
414-
dep_pkg = self._dep_package(dep)
416+
dep_pkg = self._dep_package(pkg, dep)
415417
dep_lib_name = dep_pkg.manifest.lib.name
416418
dependency_map[build.string(fixup_meson_varname(dep_lib_name))] = build.string(name)
417419
for name, sys_dep in pkg.manifest.system_dependencies.items():

0 commit comments

Comments
 (0)