summaryrefslogtreecommitdiff
path: root/test cases
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2025-06-09 08:41:52 +0200
committerXavier Claessens <xclaesse@gmail.com>2025-10-17 12:48:29 -0400
commitca8b6ebccfd79b11885d5e1e9cc293d941393ff5 (patch)
tree56e4b2c45026656edfd90899934de7007bddf53d /test cases
parent17bc039a379fb07b0a6348734f1c56741fca1178 (diff)
downloadmeson-ca8b6ebccfd79b11885d5e1e9cc293d941393ff5.tar.gz
test cases: add test for cargo workspaces
Extracted from a patch by Xavier Claessens <xclaessens@netflix.com>, adjusted to make it compile with cargo.
Diffstat (limited to 'test cases')
-rw-r--r--test cases/rust/30 cargo workspace/meson.build13
-rw-r--r--test cases/rust/30 cargo workspace/subprojects/foo.wrap5
-rw-r--r--test cases/rust/30 cargo workspace/subprojects/foo/Cargo.toml15
-rw-r--r--test cases/rust/30 cargo workspace/subprojects/foo/src/foo/Cargo.toml10
-rw-r--r--test cases/rust/30 cargo workspace/subprojects/foo/src/foo/src/lib.rs6
-rw-r--r--test cases/rust/30 cargo workspace/subprojects/foo/src/lib.rs3
-rw-r--r--test cases/rust/30 cargo workspace/subprojects/foo/src/member1/Cargo.toml7
-rw-r--r--test cases/rust/30 cargo workspace/subprojects/foo/src/member1/src/lib.rs5
-rw-r--r--test cases/rust/30 cargo workspace/subprojects/foo/src/member2/Cargo.toml9
-rw-r--r--test cases/rust/30 cargo workspace/subprojects/foo/src/member2/src/lib.rs5
-rw-r--r--test cases/rust/30 cargo workspace/test_foo_1.c5
-rw-r--r--test cases/rust/30 cargo workspace/test_foo_1.rs5
12 files changed, 88 insertions, 0 deletions
diff --git a/test cases/rust/30 cargo workspace/meson.build b/test cases/rust/30 cargo workspace/meson.build
new file mode 100644
index 000000000..fab1954c6
--- /dev/null
+++ b/test cases/rust/30 cargo workspace/meson.build
@@ -0,0 +1,13 @@
+project('cargo workspace', 'c', 'rust')
+
+foo_rs = dependency('foo-1-rs')
+e = executable('test-foo-1-rs', 'test_foo_1.rs',
+ dependencies: [foo_rs],
+)
+test('test-foo-1-rs', e)
+
+foo_cdylib = dependency('foo-1-cdylib')
+e = executable('test-foo-1-cdylib', 'test_foo_1.c',
+ dependencies: [foo_cdylib],
+)
+test('test-foo-1-rs', e)
diff --git a/test cases/rust/30 cargo workspace/subprojects/foo.wrap b/test cases/rust/30 cargo workspace/subprojects/foo.wrap
new file mode 100644
index 000000000..3d21ca79a
--- /dev/null
+++ b/test cases/rust/30 cargo workspace/subprojects/foo.wrap
@@ -0,0 +1,5 @@
+[wrap-file]
+method=cargo
+
+[provide]
+dependency_names=foo-1-rs
diff --git a/test cases/rust/30 cargo workspace/subprojects/foo/Cargo.toml b/test cases/rust/30 cargo workspace/subprojects/foo/Cargo.toml
new file mode 100644
index 000000000..54fff4815
--- /dev/null
+++ b/test cases/rust/30 cargo workspace/subprojects/foo/Cargo.toml
@@ -0,0 +1,15 @@
+[workspace]
+resolver = "2"
+members = [
+ "src/foo",
+ "src/member1"
+]
+default-members = ["src/foo"]
+
+[workspace.package]
+edition = "2021"
+version = "1.0.0"
+
+[workspace.dependencies]
+member1 = { path="./src/member1" }
+member2 = { path="src/member2", features = ["f1"] }
diff --git a/test cases/rust/30 cargo workspace/subprojects/foo/src/foo/Cargo.toml b/test cases/rust/30 cargo workspace/subprojects/foo/src/foo/Cargo.toml
new file mode 100644
index 000000000..52b39e9b2
--- /dev/null
+++ b/test cases/rust/30 cargo workspace/subprojects/foo/src/foo/Cargo.toml
@@ -0,0 +1,10 @@
+[package]
+name = "foo"
+edition.workspace = true
+version.workspace = true
+
+[lib]
+crate-type = ["lib", "cdylib"]
+
+[dependencies]
+m1 = { path="../member1", package="member1" }
diff --git a/test cases/rust/30 cargo workspace/subprojects/foo/src/foo/src/lib.rs b/test cases/rust/30 cargo workspace/subprojects/foo/src/foo/src/lib.rs
new file mode 100644
index 000000000..65803daa7
--- /dev/null
+++ b/test cases/rust/30 cargo workspace/subprojects/foo/src/foo/src/lib.rs
@@ -0,0 +1,6 @@
+extern crate m1;
+
+#[no_mangle]
+pub extern "C" fn foo() -> i32 {
+ m1::member1() + 1
+}
diff --git a/test cases/rust/30 cargo workspace/subprojects/foo/src/lib.rs b/test cases/rust/30 cargo workspace/subprojects/foo/src/lib.rs
new file mode 100644
index 000000000..c3773818c
--- /dev/null
+++ b/test cases/rust/30 cargo workspace/subprojects/foo/src/lib.rs
@@ -0,0 +1,3 @@
+pub fn foo() -> i32 {
+ member1::member1() + 1
+}
diff --git a/test cases/rust/30 cargo workspace/subprojects/foo/src/member1/Cargo.toml b/test cases/rust/30 cargo workspace/subprojects/foo/src/member1/Cargo.toml
new file mode 100644
index 000000000..2c521377a
--- /dev/null
+++ b/test cases/rust/30 cargo workspace/subprojects/foo/src/member1/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "member1"
+edition.workspace = true
+version.workspace = true
+
+[dependencies]
+member2 = { workspace = true, features=["f2"] }
diff --git a/test cases/rust/30 cargo workspace/subprojects/foo/src/member1/src/lib.rs b/test cases/rust/30 cargo workspace/subprojects/foo/src/member1/src/lib.rs
new file mode 100644
index 000000000..d4778ce62
--- /dev/null
+++ b/test cases/rust/30 cargo workspace/subprojects/foo/src/member1/src/lib.rs
@@ -0,0 +1,5 @@
+extern crate member2;
+
+pub fn member1() -> i32 {
+ member2::member2() + 1
+}
diff --git a/test cases/rust/30 cargo workspace/subprojects/foo/src/member2/Cargo.toml b/test cases/rust/30 cargo workspace/subprojects/foo/src/member2/Cargo.toml
new file mode 100644
index 000000000..059120a1e
--- /dev/null
+++ b/test cases/rust/30 cargo workspace/subprojects/foo/src/member2/Cargo.toml
@@ -0,0 +1,9 @@
+[package]
+name = "member2"
+edition.workspace = true
+version.workspace = true
+
+[features]
+default = []
+f1 = []
+f2 = []
diff --git a/test cases/rust/30 cargo workspace/subprojects/foo/src/member2/src/lib.rs b/test cases/rust/30 cargo workspace/subprojects/foo/src/member2/src/lib.rs
new file mode 100644
index 000000000..75703a957
--- /dev/null
+++ b/test cases/rust/30 cargo workspace/subprojects/foo/src/member2/src/lib.rs
@@ -0,0 +1,5 @@
+#[cfg(feature = "f1")]
+#[cfg(feature = "f2")]
+pub fn member2() -> i32 {
+ 1
+}
diff --git a/test cases/rust/30 cargo workspace/test_foo_1.c b/test cases/rust/30 cargo workspace/test_foo_1.c
new file mode 100644
index 000000000..d5f12a6ee
--- /dev/null
+++ b/test cases/rust/30 cargo workspace/test_foo_1.c
@@ -0,0 +1,5 @@
+extern int foo(void);
+
+int main(void) {
+ return foo() == 3 ? 0 : 1;
+}
diff --git a/test cases/rust/30 cargo workspace/test_foo_1.rs b/test cases/rust/30 cargo workspace/test_foo_1.rs
new file mode 100644
index 000000000..7d1ebb757
--- /dev/null
+++ b/test cases/rust/30 cargo workspace/test_foo_1.rs
@@ -0,0 +1,5 @@
+extern crate foo;
+
+pub fn main() {
+ assert!(foo::foo() == 3);
+}