summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/cargo/interpreter.py44
1 files changed, 30 insertions, 14 deletions
diff --git a/mesonbuild/cargo/interpreter.py b/mesonbuild/cargo/interpreter.py
index b29548080..30639f526 100644
--- a/mesonbuild/cargo/interpreter.py
+++ b/mesonbuild/cargo/interpreter.py
@@ -378,7 +378,6 @@ class Interpreter:
ast.append(build.function('subdir', [build.string(member)]))
processed_members[member] = pkg
- ast.append(build.assign(build.function('import', [build.string('rust')]), 'rust'))
for member in ws.required_members:
_process_member(member)
ast = self._create_project(name, processed_members.get('.'), build) + ast
@@ -673,7 +672,16 @@ class Interpreter:
elif pkg.manifest.package.license_file:
kwargs['license_files'] = build.string(pkg.manifest.package.license_file)
- return [build.function('project', args, kwargs)]
+ # project(...)
+ # rust = import('rust')
+ # cargo_ws = rust.workspace(dev_dependencies: False)
+ return [
+ build.function('project', args, kwargs),
+ build.assign(build.function('import', [build.string('rust')]),
+ 'rust'),
+ build.assign(build.method('workspace', build.identifier('rust'), []),
+ 'cargo_ws')
+ ]
def _create_dependencies(self, pkg: PackageState, build: builder.Builder) -> T.List[mparser.BaseNode]:
cfg = pkg.cfg
@@ -718,12 +726,24 @@ class Interpreter:
def _create_dependency(self, pkg: PackageState, dep: Dependency, build: builder.Builder) -> T.List[mparser.BaseNode]:
cfg = pkg.cfg
- version_ = dep.meson_version or [pkg.manifest.package.version]
- kw = {
- 'version': build.array([build.string(s) for s in version_]),
- }
- # Lookup for this dependency with the features we want in default_options kwarg.
- #
+ dep_obj: mparser.BaseNode
+ if self.cargolock and self.resolve_package(dep.package, dep.api):
+ dep_obj = build.method(
+ 'dependency',
+ build.method(
+ 'subproject',
+ build.identifier('cargo_ws'),
+ [build.string(dep.package), build.string(dep.api)]))
+ else:
+ version_ = dep.meson_version or [pkg.manifest.package.version]
+ kw = {
+ 'version': build.array([build.string(s) for s in version_]),
+ }
+ dep_obj = build.function(
+ 'dependency',
+ [build.string(_dependency_name(dep.package, dep.api))],
+ kw)
+
# However, this subproject could have been previously configured with a
# different set of features. Cargo collects the set of features globally
# but Meson can only use features enabled by the first call that triggered
@@ -734,13 +754,9 @@ class Interpreter:
# option manually with -Dxxx-rs:feature-yyy=true, or the main project can do
# that in its project(..., default_options: ['xxx-rs:feature-yyy=true']).
return [
- # xxx_dep = dependency('xxx', version : ...)
+ # xxx_dep = cargo_ws.subproject('xxx', 'api').dependency()
build.assign(
- build.function(
- 'dependency',
- [build.string(_dependency_name(dep.package, dep.api))],
- kw,
- ),
+ dep_obj,
_dependency_varname(dep),
),
# actual_features = xxx_dep.get_variable('features', default_value : '').split(',')