summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2025-10-24 09:37:54 +0200
committerPaolo Bonzini <pbonzini@redhat.com>2025-12-22 11:59:07 +0100
commitf87cc4da40693345103264e205463e1689c7a956 (patch)
tree5e37048e2983a770fbb03a5449341ebafc0eec03
parent71e56514f07ab972375bde5f094ad7a39d996ac0 (diff)
downloadmeson-f87cc4da40693345103264e205463e1689c7a956.tar.gz
modules: rust: add workspace methods returning arguments for build targets
Add rustc_args(), env(), and rust_dependency_map() methods to the RustPackage class. They simply delegate to PackageState and PackageConfiguration. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
-rw-r--r--docs/markdown/Rust-module.md30
-rw-r--r--mesonbuild/modules/rust.py21
-rw-r--r--test cases/rust/31 rust.workspace package/meson.build2
-rw-r--r--test cases/rust/31 rust.workspace package/subprojects/answer-2.1/meson.build4
-rw-r--r--test cases/rust/32 rust.workspace workspace/meson.build2
-rw-r--r--test cases/rust/32 rust.workspace workspace/more/meson.build5
-rw-r--r--test cases/rust/32 rust.workspace workspace/subprojects/answer-2.1/meson.build4
7 files changed, 64 insertions, 4 deletions
diff --git a/docs/markdown/Rust-module.md b/docs/markdown/Rust-module.md
index ba500e7ee..b1edb793c 100644
--- a/docs/markdown/Rust-module.md
+++ b/docs/markdown/Rust-module.md
@@ -312,7 +312,35 @@ all_features = pkg.all_features()
Returns all defined features for a specific package or subproject.
-### subproject.dependency()
+### Packages only
+
+#### package.rust_args()
+
+```meson
+args = pkg.rustc_args()
+```
+
+Returns rustc arguments for this package.
+
+#### package.env()
+
+```meson
+env_vars = pkg.env()
+```
+
+Returns environment variables for this package.
+
+#### package.rust_dependency_map()
+
+```meson
+dep_map = pkg.rust_dependency_map()
+```
+
+Returns rust dependency mapping for this package.
+
+### Subprojects only
+
+#### subproject.dependency()
```meson
dep = subproject.dependency(...)
diff --git a/mesonbuild/modules/rust.py b/mesonbuild/modules/rust.py
index 186774413..0ea1c8f7e 100644
--- a/mesonbuild/modules/rust.py
+++ b/mesonbuild/modules/rust.py
@@ -158,6 +158,9 @@ class RustCrate(ModuleObject):
'features': self.features_method,
'name': self.name_method,
'version': self.version_method,
+ 'rust_args': self.rust_args_method,
+ 'env': self.env_method, # type: ignore[dict-item]
+ 'rust_dependency_map': self.rust_dependency_map_method, # type: ignore[dict-item]
})
@noPosargs
@@ -190,6 +193,24 @@ class RustCrate(ModuleObject):
"""Returns chosen features for specific package."""
return sorted(list(self.package.cfg.features))
+ @noPosargs
+ @noKwargs
+ def rust_args_method(self, state: ModuleState, args: T.List, kwargs: TYPE_kwargs) -> T.List[str]:
+ """Returns rustc arguments for this package."""
+ return self.package.get_rustc_args(state.environment, state.subdir, mesonlib.MachineChoice.HOST)
+
+ @noPosargs
+ @noKwargs
+ def env_method(self, state: ModuleState, args: T.List, kwargs: TYPE_kwargs) -> T.Dict[str, str]:
+ """Returns environment variables for this package."""
+ return self.package.get_env_dict(state.environment, state.subdir)
+
+ @noPosargs
+ @noKwargs
+ def rust_dependency_map_method(self, state: ModuleState, args: T.List, kwargs: TYPE_kwargs) -> T.Dict[str, str]:
+ """Returns rust dependency mapping for this package."""
+ return self.package.cfg.get_dependency_map(self.package.manifest)
+
class RustPackage(RustCrate):
"""Represents a Rust package within a workspace."""
diff --git a/test cases/rust/31 rust.workspace package/meson.build b/test cases/rust/31 rust.workspace package/meson.build
index ec37a33d7..5a9b44e41 100644
--- a/test cases/rust/31 rust.workspace package/meson.build
+++ b/test cases/rust/31 rust.workspace package/meson.build
@@ -29,6 +29,8 @@ assert(answer_rs.features() == ['default', 'large'])
e = executable('package-test', 'src/main.rs',
dependencies: [hello_rs.dependency(), answer_rs.dependency()],
+ rust_args: main_pkg.rust_args(),
+ rust_dependency_map: main_pkg.rust_dependency_map(),
)
test('package-test', e)
diff --git a/test cases/rust/31 rust.workspace package/subprojects/answer-2.1/meson.build b/test cases/rust/31 rust.workspace package/subprojects/answer-2.1/meson.build
index ece234f27..d78795602 100644
--- a/test cases/rust/31 rust.workspace package/subprojects/answer-2.1/meson.build
+++ b/test cases/rust/31 rust.workspace package/subprojects/answer-2.1/meson.build
@@ -8,6 +8,8 @@ answer_pkg = cargo_ws.package()
assert(answer_pkg.all_features() == ['default', 'large'])
assert(answer_pkg.features() == ['default', 'large'])
-l = static_library('answer', 'src/lib.rs', rust_args: ['--cfg', 'feature="large"'])
+l = static_library('answer', 'src/lib.rs',
+ rust_args: answer_pkg.rust_args(),
+ rust_dependency_map: answer_pkg.rust_dependency_map())
dep = declare_dependency(link_with: l)
meson.override_dependency('answer-2-rs', dep)
diff --git a/test cases/rust/32 rust.workspace workspace/meson.build b/test cases/rust/32 rust.workspace workspace/meson.build
index 7a7ddd333..f42630b3d 100644
--- a/test cases/rust/32 rust.workspace workspace/meson.build
+++ b/test cases/rust/32 rust.workspace workspace/meson.build
@@ -31,6 +31,8 @@ subdir('more')
e = executable('workspace-test', 'src/main.rs',
dependencies: [hello_rs.dependency(), answer_rs.dependency(), more_dep],
+ rust_args: main_pkg.rust_args(),
+ rust_dependency_map: main_pkg.rust_dependency_map(),
)
test('workspace-test', e)
diff --git a/test cases/rust/32 rust.workspace workspace/more/meson.build b/test cases/rust/32 rust.workspace workspace/more/meson.build
index 1c57b1e5b..d7317a268 100644
--- a/test cases/rust/32 rust.workspace workspace/more/meson.build
+++ b/test cases/rust/32 rust.workspace workspace/more/meson.build
@@ -4,5 +4,8 @@ assert(more_pkg.name() == 'more')
assert(more_pkg.features() == ['default'])
assert(more_pkg.all_features() == ['default'])
-l = static_library('more', 'src/lib.rs')
+l = static_library('more', 'src/lib.rs',
+ rust_args: more_pkg.rust_args(),
+ rust_dependency_map: more_pkg.rust_dependency_map(),
+)
more_dep = declare_dependency(link_with: l)
diff --git a/test cases/rust/32 rust.workspace workspace/subprojects/answer-2.1/meson.build b/test cases/rust/32 rust.workspace workspace/subprojects/answer-2.1/meson.build
index ece234f27..d78795602 100644
--- a/test cases/rust/32 rust.workspace workspace/subprojects/answer-2.1/meson.build
+++ b/test cases/rust/32 rust.workspace workspace/subprojects/answer-2.1/meson.build
@@ -8,6 +8,8 @@ answer_pkg = cargo_ws.package()
assert(answer_pkg.all_features() == ['default', 'large'])
assert(answer_pkg.features() == ['default', 'large'])
-l = static_library('answer', 'src/lib.rs', rust_args: ['--cfg', 'feature="large"'])
+l = static_library('answer', 'src/lib.rs',
+ rust_args: answer_pkg.rust_args(),
+ rust_dependency_map: answer_pkg.rust_dependency_map())
dep = declare_dependency(link_with: l)
meson.override_dependency('answer-2-rs', dep)