From 2889d4dacf9a937156b60511957c687ea16452ed Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Mon, 9 Jun 2025 08:41:52 +0200 Subject: [PATCH] test cases: add test for cargo workspaces Signed-off-by: Paolo Bonzini --- test cases/rust/28 cargo workspace/meson.build | 13 +++++++++++++ .../rust/28 cargo workspace/subprojects/foo.wrap | 5 +++++ .../28 cargo workspace/subprojects/foo/Cargo.toml | 13 +++++++++++++ .../subprojects/foo/src/foo/Cargo.toml | 9 +++++++++ .../subprojects/foo/src/foo/src/lib.rs | 6 ++++++ .../28 cargo workspace/subprojects/foo/src/lib.rs | 3 +++ .../subprojects/foo/src/member1/Cargo.toml | 6 ++++++ .../subprojects/foo/src/member1/src/lib.rs | 5 +++++ .../subprojects/foo/src/member2/Cargo.toml | 3 +++ .../subprojects/foo/src/member2/src/lib.rs | 5 +++++ test cases/rust/28 cargo workspace/test_foo_1.c | 5 +++++ test cases/rust/28 cargo workspace/test_foo_1.rs | 5 +++++ 12 files changed, 78 insertions(+) create mode 100644 test cases/rust/28 cargo workspace/meson.build create mode 100644 test cases/rust/28 cargo workspace/subprojects/foo.wrap create mode 100644 test cases/rust/28 cargo workspace/subprojects/foo/Cargo.toml create mode 100644 test cases/rust/28 cargo workspace/subprojects/foo/src/foo/Cargo.toml create mode 100644 test cases/rust/28 cargo workspace/subprojects/foo/src/foo/src/lib.rs create mode 100644 test cases/rust/28 cargo workspace/subprojects/foo/src/lib.rs create mode 100644 test cases/rust/28 cargo workspace/subprojects/foo/src/member1/Cargo.toml create mode 100644 test cases/rust/28 cargo workspace/subprojects/foo/src/member1/src/lib.rs create mode 100644 test cases/rust/28 cargo workspace/subprojects/foo/src/member2/Cargo.toml create mode 100644 test cases/rust/28 cargo workspace/subprojects/foo/src/member2/src/lib.rs create mode 100644 test cases/rust/28 cargo workspace/test_foo_1.c create mode 100644 test cases/rust/28 cargo workspace/test_foo_1.rs diff --git a/test cases/rust/28 cargo workspace/meson.build b/test cases/rust/28 cargo workspace/meson.build new file mode 100644 index 000000000000..fab1954c6ec3 --- /dev/null +++ b/test cases/rust/28 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/28 cargo workspace/subprojects/foo.wrap b/test cases/rust/28 cargo workspace/subprojects/foo.wrap new file mode 100644 index 000000000000..3d21ca79acf7 --- /dev/null +++ b/test cases/rust/28 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/28 cargo workspace/subprojects/foo/Cargo.toml b/test cases/rust/28 cargo workspace/subprojects/foo/Cargo.toml new file mode 100644 index 000000000000..9008e045494c --- /dev/null +++ b/test cases/rust/28 cargo workspace/subprojects/foo/Cargo.toml @@ -0,0 +1,13 @@ +[workspace] +members = [ + "src/foo", + "src/member1" +] +default-members = ["src/foo"] + +[workspace.package] +version = "1.0" + +[workspace.dependencies] +member1 = { path="./src/member1" } +member2 = { path="src/member2", features = ["f1"] } diff --git a/test cases/rust/28 cargo workspace/subprojects/foo/src/foo/Cargo.toml b/test cases/rust/28 cargo workspace/subprojects/foo/src/foo/Cargo.toml new file mode 100644 index 000000000000..652e77ebfd0c --- /dev/null +++ b/test cases/rust/28 cargo workspace/subprojects/foo/src/foo/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "foo" +version.workspace = true + +[lib] +crate-type = ["lib", "cdylib"] + +[dependencies] +m1 = { path="../member1", package="member1" } diff --git a/test cases/rust/28 cargo workspace/subprojects/foo/src/foo/src/lib.rs b/test cases/rust/28 cargo workspace/subprojects/foo/src/foo/src/lib.rs new file mode 100644 index 000000000000..65803daa7900 --- /dev/null +++ b/test cases/rust/28 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/28 cargo workspace/subprojects/foo/src/lib.rs b/test cases/rust/28 cargo workspace/subprojects/foo/src/lib.rs new file mode 100644 index 000000000000..c3773818ca0d --- /dev/null +++ b/test cases/rust/28 cargo workspace/subprojects/foo/src/lib.rs @@ -0,0 +1,3 @@ +pub fn foo() -> i32 { + member1::member1() + 1 +} diff --git a/test cases/rust/28 cargo workspace/subprojects/foo/src/member1/Cargo.toml b/test cases/rust/28 cargo workspace/subprojects/foo/src/member1/Cargo.toml new file mode 100644 index 000000000000..7d8760aa03a4 --- /dev/null +++ b/test cases/rust/28 cargo workspace/subprojects/foo/src/member1/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "member1" +version.workspace = true + +[dependencies] +member2 = { workspace = true, features=["f2"] } diff --git a/test cases/rust/28 cargo workspace/subprojects/foo/src/member1/src/lib.rs b/test cases/rust/28 cargo workspace/subprojects/foo/src/member1/src/lib.rs new file mode 100644 index 000000000000..d4778ce62081 --- /dev/null +++ b/test cases/rust/28 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/28 cargo workspace/subprojects/foo/src/member2/Cargo.toml b/test cases/rust/28 cargo workspace/subprojects/foo/src/member2/Cargo.toml new file mode 100644 index 000000000000..16513ad8e569 --- /dev/null +++ b/test cases/rust/28 cargo workspace/subprojects/foo/src/member2/Cargo.toml @@ -0,0 +1,3 @@ +[package] +name = "member2" +version.workspace = true diff --git a/test cases/rust/28 cargo workspace/subprojects/foo/src/member2/src/lib.rs b/test cases/rust/28 cargo workspace/subprojects/foo/src/member2/src/lib.rs new file mode 100644 index 000000000000..75703a957d36 --- /dev/null +++ b/test cases/rust/28 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/28 cargo workspace/test_foo_1.c b/test cases/rust/28 cargo workspace/test_foo_1.c new file mode 100644 index 000000000000..d5f12a6eeee2 --- /dev/null +++ b/test cases/rust/28 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/28 cargo workspace/test_foo_1.rs b/test cases/rust/28 cargo workspace/test_foo_1.rs new file mode 100644 index 000000000000..7d1ebb757d6d --- /dev/null +++ b/test cases/rust/28 cargo workspace/test_foo_1.rs @@ -0,0 +1,5 @@ +extern crate foo; + +pub fn main() { + assert!(foo::foo() == 3); +}