summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/markdown/Rust-module.md8
-rw-r--r--mesonbuild/modules/rust.py8
-rw-r--r--test cases/rust/31 rust.workspace package/meson.build3
-rw-r--r--test cases/rust/31 rust.workspace package/subprojects/answer-2.1/meson.build2
-rw-r--r--test cases/rust/32 rust.workspace workspace/meson.build3
-rw-r--r--test cases/rust/32 rust.workspace workspace/subprojects/answer-2.1/meson.build2
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)