Skip to content

Commit 3194dc6

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 3fd7190 commit 3194dc6

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
@@ -160,7 +160,7 @@ def _fetch_package_from_subproject(self, package_name: str, meson_depname: str)
160160
self._add_dependency(pkg, depname)
161161
return pkg, False
162162

163-
def _dep_package(self, dep: Dependency) -> PackageState:
163+
def _dep_package(self, pkg: PackageState, dep: Dependency) -> PackageState:
164164
if dep.git:
165165
_, _, directory = _parse_git_url(dep.git, dep.branch)
166166
dep_pkg, _ = self._fetch_package_from_subproject(dep.package, directory)
@@ -203,7 +203,7 @@ def _add_dependency(self, pkg: PackageState, depname: str) -> None:
203203
# It could be build/dev/target dependency. Just ignore it.
204204
return
205205
pkg.required_deps.add(depname)
206-
dep_pkg = self._dep_package(dep)
206+
dep_pkg = self._dep_package(pkg, dep)
207207
if dep.default_features:
208208
self._enable_feature(dep_pkg, 'default')
209209
for f in dep.features:
@@ -227,7 +227,7 @@ def _enable_feature(self, pkg: PackageState, feature: str) -> None:
227227
depname = depname[:-1]
228228
if depname in pkg.required_deps:
229229
dep = pkg.manifest.dependencies[depname]
230-
dep_pkg = self._dep_package(dep)
230+
dep_pkg = self._dep_package(pkg, dep)
231231
self._enable_feature(dep_pkg, dep_f)
232232
else:
233233
# This feature will be enabled only if that dependency
@@ -237,7 +237,7 @@ def _enable_feature(self, pkg: PackageState, feature: str) -> None:
237237
self._add_dependency(pkg, depname)
238238
dep = pkg.manifest.dependencies.get(depname)
239239
if dep:
240-
dep_pkg = self._dep_package(dep)
240+
dep_pkg = self._dep_package(pkg, dep)
241241
self._enable_feature(dep_pkg, dep_f)
242242
elif f.startswith('dep:'):
243243
self._add_dependency(pkg, f[4:])
@@ -302,7 +302,8 @@ def _create_dependencies(self, pkg: PackageState, build: builder.Builder) -> T.L
302302
ast: T.List[mparser.BaseNode] = []
303303
for depname in pkg.required_deps:
304304
dep = pkg.manifest.dependencies[depname]
305-
ast += self._create_dependency(dep, build)
305+
dep_pkg = self._dep_package(pkg, dep)
306+
ast += self._create_dependency(dep_pkg, dep, build)
306307
ast.append(build.assign(build.array([]), 'system_deps_args'))
307308
for name, sys_dep in pkg.manifest.system_dependencies.items():
308309
if sys_dep.enabled(pkg.features):
@@ -336,10 +337,11 @@ def _create_system_dependency(self, name: str, dep: SystemDependency, build: bui
336337
),
337338
]
338339

339-
def _create_dependency(self, dep: Dependency, build: builder.Builder) -> T.List[mparser.BaseNode]:
340-
pkg = self._dep_package(dep)
340+
def _create_dependency(self, pkg: PackageState, dep: Dependency, build: builder.Builder) -> T.List[mparser.BaseNode]:
341+
version_ = dep.meson_version or [pkg.manifest.package.version]
342+
api = dep.api or pkg.manifest.package.api
341343
kw = {
342-
'version': build.array([build.string(s) for s in dep.meson_version]),
344+
'version': build.array([build.string(s) for s in version_]),
343345
}
344346
# Lookup for this dependency with the features we want in default_options kwarg.
345347
#
@@ -357,7 +359,7 @@ def _create_dependency(self, dep: Dependency, build: builder.Builder) -> T.List[
357359
build.assign(
358360
build.function(
359361
'dependency',
360-
[build.string(_dependency_name(dep.package, dep.api))],
362+
[build.string(_dependency_name(dep.package, api))],
361363
kw,
362364
),
363365
_dependency_varname(dep.package),
@@ -387,7 +389,7 @@ def _create_dependency(self, dep: Dependency, build: builder.Builder) -> T.List[
387389
build.if_(build.not_in(build.identifier('f'), build.identifier('actual_features')), build.block([
388390
build.function('error', [
389391
build.string('Dependency'),
390-
build.string(_dependency_name(dep.package, dep.api)),
392+
build.string(_dependency_name(dep.package, api)),
391393
build.string('previously configured with features'),
392394
build.identifier('actual_features'),
393395
build.string('but need'),
@@ -422,7 +424,7 @@ def _create_lib(self, pkg: PackageState, build: builder.Builder, crate_type: raw
422424
dep = pkg.manifest.dependencies[name]
423425
dependencies.append(build.identifier(_dependency_varname(dep.package)))
424426
if name != dep.package:
425-
dep_pkg = self._dep_package(dep)
427+
dep_pkg = self._dep_package(pkg, dep)
426428
dep_lib_name = dep_pkg.manifest.lib.name
427429
dependency_map[build.string(fixup_meson_varname(dep_lib_name))] = build.string(name)
428430
for name, sys_dep in pkg.manifest.system_dependencies.items():

0 commit comments

Comments
 (0)