diff options
| author | Paolo Bonzini <pbonzini@redhat.com> | 2025-10-01 09:22:32 +0200 |
|---|---|---|
| committer | Paolo Bonzini <pbonzini@redhat.com> | 2025-12-22 11:58:30 +0100 |
| commit | bfb5ea6fdbd85568c4ce20e28d4d727b78994938 (patch) | |
| tree | f591807cb5eb14e702e3af4ecc37f7bd61862c19 | |
| parent | db0165e3ad2f5589ee62a22ca77e79adfb714879 (diff) | |
| download | meson-bfb5ea6fdbd85568c4ce20e28d4d727b78994938.tar.gz | |
modules: rust: implement workspace.packages()
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
6 files changed, 26 insertions, 0 deletions
diff --git a/docs/markdown/Rust-module.md b/docs/markdown/Rust-module.md index 1126723ca..99faeecfe 100644 --- a/docs/markdown/Rust-module.md +++ b/docs/markdown/Rust-module.md @@ -233,6 +233,14 @@ say "require this specific configuration," which may conflict with the parent pr ## Workspace object +### workspace.packages() + +```meson +packages = ws.packages() +``` + +Returns a list of package names in the workspace. + ### workspace.subproject() ```meson diff --git a/mesonbuild/modules/rust.py b/mesonbuild/modules/rust.py index 86e3ce426..4c61b7e31 100644 --- a/mesonbuild/modules/rust.py +++ b/mesonbuild/modules/rust.py @@ -100,9 +100,17 @@ class RustWorkspace(ModuleObject): self.interpreter = interpreter self.ws = ws self.methods.update({ + 'packages': self.packages_method, 'subproject': self.subproject_method, }) + @noPosargs + @noKwargs + def packages_method(self, state: ModuleState, args: T.List, kwargs: TYPE_kwargs) -> T.List[str]: + """Returns list of package names in workspace.""" + package_names = [pkg.manifest.package.name for pkg in self.ws.packages.values()] + return sorted(package_names) + def _do_subproject(self, pkg: cargo.PackageState) -> None: kw: _kwargs.DoSubproject = { 'required': True, diff --git a/test cases/rust/31 rust.workspace package/meson.build b/test cases/rust/31 rust.workspace package/meson.build index a7544d609..5885a4524 100644 --- a/test cases/rust/31 rust.workspace package/meson.build +++ b/test cases/rust/31 rust.workspace package/meson.build @@ -3,6 +3,9 @@ project('package test', 'rust', default_options: ['rust_std=2021']) rust = import('rust') cargo_ws = rust.workspace() +# Test workspace.packages() method +assert(cargo_ws.packages() == ['answer', 'hello', 'package_test']) + hello_rs = cargo_ws.subproject('hello') answer_rs = cargo_ws.subproject('answer', '2') 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 dc7df4bba..7b4e10b23 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 @@ -1,6 +1,8 @@ project('answer', 'rust', default_options: ['rust_std=2021']) rust = import('rust') +cargo_ws = rust.workspace() +assert(cargo_ws.packages() == ['answer']) l = static_library('answer', 'src/lib.rs') dep = declare_dependency(link_with: l) diff --git a/test cases/rust/32 rust.workspace workspace/meson.build b/test cases/rust/32 rust.workspace workspace/meson.build index 49800c524..77d0458a9 100644 --- a/test cases/rust/32 rust.workspace workspace/meson.build +++ b/test cases/rust/32 rust.workspace workspace/meson.build @@ -3,6 +3,9 @@ project('workspace test', 'rust', default_options: ['rust_std=2021']) rust = import('rust') cargo_ws = rust.workspace() +# Test workspace.packages() method +assert(cargo_ws.packages() == ['answer', 'hello', 'workspace_test']) + hello_rs = cargo_ws.subproject('hello') answer_rs = cargo_ws.subproject('answer', '2') 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 dc7df4bba..7b4e10b23 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 @@ -1,6 +1,8 @@ project('answer', 'rust', default_options: ['rust_std=2021']) rust = import('rust') +cargo_ws = rust.workspace() +assert(cargo_ws.packages() == ['answer']) l = static_library('answer', 'src/lib.rs') dep = declare_dependency(link_with: l) |
