Skip to content

Commit da678a7

Browse files
committed
Add -Zfeatures=all option.
1 parent 899067f commit da678a7

File tree

3 files changed

+89
-0
lines changed

3 files changed

+89
-0
lines changed

src/cargo/core/resolver/features.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,11 @@ impl FeatureOpts {
7272
"build_dep" => opts.decouple_build_deps = true,
7373
"dev_dep" => opts.decouple_dev_deps = true,
7474
"itarget" => opts.ignore_inactive_targets = true,
75+
"all" => {
76+
opts.decouple_build_deps = true;
77+
opts.decouple_dev_deps = true;
78+
opts.ignore_inactive_targets = true;
79+
}
7580
"compare" => opts.compare = true,
7681
"ws" => unimplemented!(),
7782
"host" => unimplemented!(),

src/doc/src/reference/unstable.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -537,5 +537,7 @@ The available options are:
537537
is, dev dependency features will still be unified if you run commands like
538538
`cargo test` or `cargo build --all-targets`.
539539

540+
* `all` — Enable all feature options (`itarget,build_dep,dev_dep`).
541+
540542
* `compare` — This option compares the resolved features to the old resolver,
541543
and will print any differences.

tests/testsuite/features2.rs

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -683,3 +683,85 @@ fn cyclical_dev_dep() {
683683
.masquerade_as_nightly_cargo()
684684
.run();
685685
}
686+
687+
#[cargo_test]
688+
fn all_feature_opts() {
689+
// All feature options at once.
690+
Package::new("common", "1.0.0")
691+
.feature("normal", &[])
692+
.feature("build", &[])
693+
.feature("dev", &[])
694+
.feature("itarget", &[])
695+
.file(
696+
"src/lib.rs",
697+
r#"
698+
pub fn feats() -> u32 {
699+
let mut res = 0;
700+
if cfg!(feature="normal") { res |= 1; }
701+
if cfg!(feature="build") { res |= 2; }
702+
if cfg!(feature="dev") { res |= 4; }
703+
if cfg!(feature="itarget") { res |= 8; }
704+
res
705+
}
706+
"#,
707+
)
708+
.publish();
709+
710+
let p = project()
711+
.file(
712+
"Cargo.toml",
713+
r#"
714+
[package]
715+
name = "foo"
716+
version = "0.1.0"
717+
edition = "2018"
718+
719+
[dependencies]
720+
common = {version = "1.0", features=["normal"]}
721+
722+
[dev-dependencies]
723+
common = {version = "1.0", features=["dev"]}
724+
725+
[build-dependencies]
726+
common = {version = "1.0", features=["build"]}
727+
728+
[target.'cfg(whatever)'.dependencies]
729+
common = {version = "1.0", features=["itarget"]}
730+
"#,
731+
)
732+
.file(
733+
"src/main.rs",
734+
r#"
735+
fn main() {
736+
expect();
737+
}
738+
739+
fn expect() {
740+
let expected: u32 = std::env::var("EXPECTED_FEATS").unwrap().parse().unwrap();
741+
assert_eq!(expected, common::feats());
742+
}
743+
744+
#[test]
745+
fn from_test() {
746+
expect();
747+
}
748+
"#,
749+
)
750+
.build();
751+
752+
p.cargo("run").env("EXPECTED_FEATS", "15").run();
753+
754+
// Only normal feature.
755+
p.cargo("run -Zfeatures=all")
756+
.masquerade_as_nightly_cargo()
757+
.env("EXPECTED_FEATS", "1")
758+
.run();
759+
760+
p.cargo("test").env("EXPECTED_FEATS", "15").run();
761+
762+
// only normal+dev
763+
p.cargo("test -Zfeatures=all")
764+
.masquerade_as_nightly_cargo()
765+
.env("EXPECTED_FEATS", "5")
766+
.run();
767+
}

0 commit comments

Comments
 (0)