summaryrefslogtreecommitdiff
path: root/test cases
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2025-10-17 14:45:07 +0200
committerPaolo Bonzini <pbonzini@redhat.com>2025-12-22 11:58:30 +0100
commit646593856800c55f44fe2b15991570737709a36e (patch)
treefca53f863fa98c9e3053d2285681f3e7dc5b7adc /test cases
parentd1ea846b6bbb5cbf09d8e9707707c40af3cf7c92 (diff)
downloadmeson-646593856800c55f44fe2b15991570737709a36e.tar.gz
rust: add rust.workspace() skeleton implementation
rust.workspace() is the entry point for global feature resolution. It loads a Cargo.toml file and ensures that all dependencies will be built with the correct set of features. Fixes: #13404 Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'test cases')
-rw-r--r--test cases/rust/31 rust.workspace package/Cargo.lock19
-rw-r--r--test cases/rust/31 rust.workspace package/Cargo.toml11
-rw-r--r--test cases/rust/31 rust.workspace package/meson.build12
-rw-r--r--test cases/rust/31 rust.workspace package/src/main.rs6
-rw-r--r--test cases/rust/31 rust.workspace package/subprojects/answer-2-rs.wrap2
-rw-r--r--test cases/rust/31 rust.workspace package/subprojects/answer-2.1/Cargo.toml10
-rw-r--r--test cases/rust/31 rust.workspace package/subprojects/answer-2.1/meson.build7
-rw-r--r--test cases/rust/31 rust.workspace package/subprojects/answer-2.1/src/lib.rs10
-rw-r--r--test cases/rust/31 rust.workspace package/subprojects/hello-1-rs.wrap3
-rw-r--r--test cases/rust/31 rust.workspace package/subprojects/hello-1.0/Cargo.toml7
-rw-r--r--test cases/rust/31 rust.workspace package/subprojects/hello-1.0/src/lib.rs4
-rw-r--r--test cases/rust/32 rust.workspace workspace/Cargo.lock19
-rw-r--r--test cases/rust/32 rust.workspace workspace/Cargo.toml14
-rw-r--r--test cases/rust/32 rust.workspace workspace/meson.build12
-rw-r--r--test cases/rust/32 rust.workspace workspace/src/main.rs6
-rw-r--r--test cases/rust/32 rust.workspace workspace/subprojects/answer-2-rs.wrap2
-rw-r--r--test cases/rust/32 rust.workspace workspace/subprojects/answer-2.1/Cargo.toml10
-rw-r--r--test cases/rust/32 rust.workspace workspace/subprojects/answer-2.1/meson.build7
-rw-r--r--test cases/rust/32 rust.workspace workspace/subprojects/answer-2.1/src/lib.rs10
-rw-r--r--test cases/rust/32 rust.workspace workspace/subprojects/hello-1-rs.wrap3
-rw-r--r--test cases/rust/32 rust.workspace workspace/subprojects/hello-1.0/Cargo.toml7
-rw-r--r--test cases/rust/32 rust.workspace workspace/subprojects/hello-1.0/src/lib.rs4
22 files changed, 185 insertions, 0 deletions
diff --git a/test cases/rust/31 rust.workspace package/Cargo.lock b/test cases/rust/31 rust.workspace package/Cargo.lock
new file mode 100644
index 000000000..989f6ff5b
--- /dev/null
+++ b/test cases/rust/31 rust.workspace package/Cargo.lock
@@ -0,0 +1,19 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 4
+
+[[package]]
+name = "answer"
+version = "2.1.0"
+
+[[package]]
+name = "hello"
+version = "1.0.0"
+
+[[package]]
+name = "package_test"
+version = "0.1.0"
+dependencies = [
+ "answer",
+ "hello",
+]
diff --git a/test cases/rust/31 rust.workspace package/Cargo.toml b/test cases/rust/31 rust.workspace package/Cargo.toml
new file mode 100644
index 000000000..53bc49528
--- /dev/null
+++ b/test cases/rust/31 rust.workspace package/Cargo.toml
@@ -0,0 +1,11 @@
+[package]
+name = "package_test"
+version = "0.1.0"
+edition = "2021"
+
+[features]
+default = ["dep:answer"]
+
+[dependencies]
+hello = { version = "1.0", path = "subprojects/hello-1.0" }
+answer = { version = "2.1", path = "subprojects/answer-2.1", optional = true }
diff --git a/test cases/rust/31 rust.workspace package/meson.build b/test cases/rust/31 rust.workspace package/meson.build
new file mode 100644
index 000000000..483b9ae52
--- /dev/null
+++ b/test cases/rust/31 rust.workspace package/meson.build
@@ -0,0 +1,12 @@
+project('package test', 'rust', default_options: ['rust_std=2021'])
+
+rust = import('rust')
+cargo_ws = rust.workspace()
+
+hello_dep = dependency('hello-1-rs')
+answer_dep = dependency('answer-2-rs')
+
+e = executable('package-test', 'src/main.rs',
+ dependencies: [hello_dep, answer_dep],
+)
+test('package-test', e)
diff --git a/test cases/rust/31 rust.workspace package/src/main.rs b/test cases/rust/31 rust.workspace package/src/main.rs
new file mode 100644
index 000000000..39b324801
--- /dev/null
+++ b/test cases/rust/31 rust.workspace package/src/main.rs
@@ -0,0 +1,6 @@
+use hello::greet;
+
+fn main() {
+ println!("{}", greet());
+ println!("{}", answer::answer());
+}
diff --git a/test cases/rust/31 rust.workspace package/subprojects/answer-2-rs.wrap b/test cases/rust/31 rust.workspace package/subprojects/answer-2-rs.wrap
new file mode 100644
index 000000000..d16d1f7a8
--- /dev/null
+++ b/test cases/rust/31 rust.workspace package/subprojects/answer-2-rs.wrap
@@ -0,0 +1,2 @@
+[wrap-file]
+directory = answer-2.1
diff --git a/test cases/rust/31 rust.workspace package/subprojects/answer-2.1/Cargo.toml b/test cases/rust/31 rust.workspace package/subprojects/answer-2.1/Cargo.toml
new file mode 100644
index 000000000..b87782264
--- /dev/null
+++ b/test cases/rust/31 rust.workspace package/subprojects/answer-2.1/Cargo.toml
@@ -0,0 +1,10 @@
+[package]
+name = "answer"
+version = "2.1.0"
+edition = "2021"
+
+[lib]
+crate-type = ["lib"]
+
+[features]
+large = []
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
new file mode 100644
index 000000000..dc7df4bba
--- /dev/null
+++ b/test cases/rust/31 rust.workspace package/subprojects/answer-2.1/meson.build
@@ -0,0 +1,7 @@
+project('answer', 'rust', default_options: ['rust_std=2021'])
+
+rust = import('rust')
+
+l = static_library('answer', 'src/lib.rs')
+dep = declare_dependency(link_with: l)
+meson.override_dependency('answer-2-rs', dep)
diff --git a/test cases/rust/31 rust.workspace package/subprojects/answer-2.1/src/lib.rs b/test cases/rust/31 rust.workspace package/subprojects/answer-2.1/src/lib.rs
new file mode 100644
index 000000000..b7a721b05
--- /dev/null
+++ b/test cases/rust/31 rust.workspace package/subprojects/answer-2.1/src/lib.rs
@@ -0,0 +1,10 @@
+pub fn answer() -> u8
+{
+ 42
+}
+
+#[cfg(feature = "large")]
+pub fn large_answer() -> u64
+{
+ 42
+}
diff --git a/test cases/rust/31 rust.workspace package/subprojects/hello-1-rs.wrap b/test cases/rust/31 rust.workspace package/subprojects/hello-1-rs.wrap
new file mode 100644
index 000000000..25e7751d0
--- /dev/null
+++ b/test cases/rust/31 rust.workspace package/subprojects/hello-1-rs.wrap
@@ -0,0 +1,3 @@
+[wrap-file]
+directory = hello-1.0
+method = cargo
diff --git a/test cases/rust/31 rust.workspace package/subprojects/hello-1.0/Cargo.toml b/test cases/rust/31 rust.workspace package/subprojects/hello-1.0/Cargo.toml
new file mode 100644
index 000000000..ad0ae458c
--- /dev/null
+++ b/test cases/rust/31 rust.workspace package/subprojects/hello-1.0/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "hello"
+version = "1.0.0"
+edition = "2021"
+
+[lib]
+crate-type = ["lib"] \ No newline at end of file
diff --git a/test cases/rust/31 rust.workspace package/subprojects/hello-1.0/src/lib.rs b/test cases/rust/31 rust.workspace package/subprojects/hello-1.0/src/lib.rs
new file mode 100644
index 000000000..0631292f3
--- /dev/null
+++ b/test cases/rust/31 rust.workspace package/subprojects/hello-1.0/src/lib.rs
@@ -0,0 +1,4 @@
+pub fn greet() -> &'static str
+{
+ "hello world"
+}
diff --git a/test cases/rust/32 rust.workspace workspace/Cargo.lock b/test cases/rust/32 rust.workspace workspace/Cargo.lock
new file mode 100644
index 000000000..0434b6028
--- /dev/null
+++ b/test cases/rust/32 rust.workspace workspace/Cargo.lock
@@ -0,0 +1,19 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 4
+
+[[package]]
+name = "answer"
+version = "2.1.0"
+
+[[package]]
+name = "hello"
+version = "1.0.0"
+
+[[package]]
+name = "workspace_test"
+version = "0.1.0"
+dependencies = [
+ "answer",
+ "hello",
+]
diff --git a/test cases/rust/32 rust.workspace workspace/Cargo.toml b/test cases/rust/32 rust.workspace workspace/Cargo.toml
new file mode 100644
index 000000000..ac3a340bd
--- /dev/null
+++ b/test cases/rust/32 rust.workspace workspace/Cargo.toml
@@ -0,0 +1,14 @@
+[workspace]
+members = ["."]
+
+[package]
+name = "workspace_test"
+version = "0.1.0"
+edition = "2021"
+
+[features]
+default = ["dep:answer"]
+
+[dependencies]
+hello = { version = "1.0", path = "subprojects/hello-1.0" }
+answer = { version = "2.1", path = "subprojects/answer-2.1", optional = true }
diff --git a/test cases/rust/32 rust.workspace workspace/meson.build b/test cases/rust/32 rust.workspace workspace/meson.build
new file mode 100644
index 000000000..35e1c8482
--- /dev/null
+++ b/test cases/rust/32 rust.workspace workspace/meson.build
@@ -0,0 +1,12 @@
+project('workspace test', 'rust', default_options: ['rust_std=2021'])
+
+rust = import('rust')
+cargo_ws = rust.workspace()
+
+hello_dep = dependency('hello-1-rs')
+answer_dep = dependency('answer-2-rs')
+
+e = executable('workspace-test', 'src/main.rs',
+ dependencies: [hello_dep, answer_dep],
+)
+test('workspace-test', e)
diff --git a/test cases/rust/32 rust.workspace workspace/src/main.rs b/test cases/rust/32 rust.workspace workspace/src/main.rs
new file mode 100644
index 000000000..39b324801
--- /dev/null
+++ b/test cases/rust/32 rust.workspace workspace/src/main.rs
@@ -0,0 +1,6 @@
+use hello::greet;
+
+fn main() {
+ println!("{}", greet());
+ println!("{}", answer::answer());
+}
diff --git a/test cases/rust/32 rust.workspace workspace/subprojects/answer-2-rs.wrap b/test cases/rust/32 rust.workspace workspace/subprojects/answer-2-rs.wrap
new file mode 100644
index 000000000..d16d1f7a8
--- /dev/null
+++ b/test cases/rust/32 rust.workspace workspace/subprojects/answer-2-rs.wrap
@@ -0,0 +1,2 @@
+[wrap-file]
+directory = answer-2.1
diff --git a/test cases/rust/32 rust.workspace workspace/subprojects/answer-2.1/Cargo.toml b/test cases/rust/32 rust.workspace workspace/subprojects/answer-2.1/Cargo.toml
new file mode 100644
index 000000000..b87782264
--- /dev/null
+++ b/test cases/rust/32 rust.workspace workspace/subprojects/answer-2.1/Cargo.toml
@@ -0,0 +1,10 @@
+[package]
+name = "answer"
+version = "2.1.0"
+edition = "2021"
+
+[lib]
+crate-type = ["lib"]
+
+[features]
+large = []
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
new file mode 100644
index 000000000..dc7df4bba
--- /dev/null
+++ b/test cases/rust/32 rust.workspace workspace/subprojects/answer-2.1/meson.build
@@ -0,0 +1,7 @@
+project('answer', 'rust', default_options: ['rust_std=2021'])
+
+rust = import('rust')
+
+l = static_library('answer', 'src/lib.rs')
+dep = declare_dependency(link_with: l)
+meson.override_dependency('answer-2-rs', dep)
diff --git a/test cases/rust/32 rust.workspace workspace/subprojects/answer-2.1/src/lib.rs b/test cases/rust/32 rust.workspace workspace/subprojects/answer-2.1/src/lib.rs
new file mode 100644
index 000000000..b7a721b05
--- /dev/null
+++ b/test cases/rust/32 rust.workspace workspace/subprojects/answer-2.1/src/lib.rs
@@ -0,0 +1,10 @@
+pub fn answer() -> u8
+{
+ 42
+}
+
+#[cfg(feature = "large")]
+pub fn large_answer() -> u64
+{
+ 42
+}
diff --git a/test cases/rust/32 rust.workspace workspace/subprojects/hello-1-rs.wrap b/test cases/rust/32 rust.workspace workspace/subprojects/hello-1-rs.wrap
new file mode 100644
index 000000000..25e7751d0
--- /dev/null
+++ b/test cases/rust/32 rust.workspace workspace/subprojects/hello-1-rs.wrap
@@ -0,0 +1,3 @@
+[wrap-file]
+directory = hello-1.0
+method = cargo
diff --git a/test cases/rust/32 rust.workspace workspace/subprojects/hello-1.0/Cargo.toml b/test cases/rust/32 rust.workspace workspace/subprojects/hello-1.0/Cargo.toml
new file mode 100644
index 000000000..ad0ae458c
--- /dev/null
+++ b/test cases/rust/32 rust.workspace workspace/subprojects/hello-1.0/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "hello"
+version = "1.0.0"
+edition = "2021"
+
+[lib]
+crate-type = ["lib"] \ No newline at end of file
diff --git a/test cases/rust/32 rust.workspace workspace/subprojects/hello-1.0/src/lib.rs b/test cases/rust/32 rust.workspace workspace/subprojects/hello-1.0/src/lib.rs
new file mode 100644
index 000000000..0631292f3
--- /dev/null
+++ b/test cases/rust/32 rust.workspace workspace/subprojects/hello-1.0/src/lib.rs
@@ -0,0 +1,4 @@
+pub fn greet() -> &'static str
+{
+ "hello world"
+}