diff options
| author | Xavier Claessens <xavier.claessens@collabora.com> | 2024-03-09 18:44:40 -0500 |
|---|---|---|
| committer | Xavier Claessens <xclaesse@gmail.com> | 2024-10-24 11:00:10 -0400 |
| commit | afd89440aaf114c00652d799b8043d3d43fb807a (patch) | |
| tree | 7c700f9d4fa9444c75a76ee874edb9f8f77ac994 /test cases | |
| parent | c02e0b7b1e2499f3ae18d26e443e18043fff3046 (diff) | |
| download | meson-afd89440aaf114c00652d799b8043d3d43fb807a.tar.gz | |
cargo: Fix feature resolution
Introduce a global Cargo interpreter state that keeps track of enabled
features on each crate.
Before generating AST of a Cargo subproject, it downloads every
sub-subproject and resolves the set of features enabled on each of them
recursively. When it later generates AST for one its dependencies, its
set of features and dependencies is already determined.
Diffstat (limited to 'test cases')
8 files changed, 32 insertions, 2 deletions
diff --git a/test cases/rust/22 cargo subproject/subprojects/bar-0.1-rs/Cargo.toml b/test cases/rust/22 cargo subproject/subprojects/bar-0.1-rs/Cargo.toml index d60a5d8f1..c0f7ffd8d 100644 --- a/test cases/rust/22 cargo subproject/subprojects/bar-0.1-rs/Cargo.toml +++ b/test cases/rust/22 cargo subproject/subprojects/bar-0.1-rs/Cargo.toml @@ -8,6 +8,10 @@ version = "0.1" optional = true version = "1.0" +[dependencies.common] +version = "0.0.1" +features = ["f2"] + [features] default = ["f2"] f1 = [] diff --git a/test cases/rust/22 cargo subproject/subprojects/common-0-rs.wrap b/test cases/rust/22 cargo subproject/subprojects/common-0-rs.wrap new file mode 100644 index 000000000..99686e90e --- /dev/null +++ b/test cases/rust/22 cargo subproject/subprojects/common-0-rs.wrap @@ -0,0 +1,2 @@ +[wrap-file] +method = cargo diff --git a/test cases/rust/22 cargo subproject/subprojects/common-0-rs/Cargo.toml b/test cases/rust/22 cargo subproject/subprojects/common-0-rs/Cargo.toml new file mode 100644 index 000000000..b22e1accf --- /dev/null +++ b/test cases/rust/22 cargo subproject/subprojects/common-0-rs/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "common" +version = "0.0.1" +edition = "2021" + +[lib] +crate-type = ["rlib"] +path = "lib.rs" + +[features] +f1 = [] +f2 = [] diff --git a/test cases/rust/22 cargo subproject/subprojects/common-0-rs/lib.rs b/test cases/rust/22 cargo subproject/subprojects/common-0-rs/lib.rs new file mode 100644 index 000000000..a7adf8f62 --- /dev/null +++ b/test cases/rust/22 cargo subproject/subprojects/common-0-rs/lib.rs @@ -0,0 +1,4 @@ +#[cfg(all(feature = "f1", feature = "f2"))] +pub fn common_func() -> i32 { + 0 +} diff --git a/test cases/rust/22 cargo subproject/subprojects/extra-dep-1-rs/Cargo.toml b/test cases/rust/22 cargo subproject/subprojects/extra-dep-1-rs/Cargo.toml new file mode 100644 index 000000000..4b6fa5777 --- /dev/null +++ b/test cases/rust/22 cargo subproject/subprojects/extra-dep-1-rs/Cargo.toml @@ -0,0 +1,3 @@ +[package] +name = "extra-deps" +version = "1.0" diff --git a/test cases/rust/22 cargo subproject/subprojects/extra-dep-1-rs/meson.build b/test cases/rust/22 cargo subproject/subprojects/extra-dep-1-rs/meson.build index 40d109b2d..b5ca43951 100644 --- a/test cases/rust/22 cargo subproject/subprojects/extra-dep-1-rs/meson.build +++ b/test cases/rust/22 cargo subproject/subprojects/extra-dep-1-rs/meson.build @@ -1,7 +1,5 @@ project('extra dep', 'c', version: '1.0') -assert(get_option('feature-default') == true) - l = static_library('extra-dep', 'lib.c') d = declare_dependency(link_with: l, variables: { diff --git a/test cases/rust/22 cargo subproject/subprojects/foo-0-rs/Cargo.toml b/test cases/rust/22 cargo subproject/subprojects/foo-0-rs/Cargo.toml index 0f0225d06..858efa4dd 100644 --- a/test cases/rust/22 cargo subproject/subprojects/foo-0-rs/Cargo.toml +++ b/test cases/rust/22 cargo subproject/subprojects/foo-0-rs/Cargo.toml @@ -20,6 +20,10 @@ version = "1.0" [dependencies] mybar = { version = "0.1", package = "bar", default-features = false } +[dependencies.common] +version = "0.0.1" +features = ["f1"] + [features] default = ["f1"] f1 = ["f2", "f3"] diff --git a/test cases/rust/22 cargo subproject/subprojects/foo-0-rs/lib.rs b/test cases/rust/22 cargo subproject/subprojects/foo-0-rs/lib.rs index 1c8cbc9d3..a1a976a80 100644 --- a/test cases/rust/22 cargo subproject/subprojects/foo-0-rs/lib.rs +++ b/test cases/rust/22 cargo subproject/subprojects/foo-0-rs/lib.rs @@ -1,3 +1,5 @@ +extern crate common; + extern "C" { fn extra_func() -> i32; } @@ -5,6 +7,7 @@ extern "C" { #[cfg(feature = "foo")] #[no_mangle] pub extern "C" fn rust_func() -> i32 { + assert!(common::common_func() == 0); let v: i32; unsafe { v = extra_func(); |
