diff --git a/src/cargo/core/compiler/mod.rs b/src/cargo/core/compiler/mod.rs index 277039685d6..19377c787b2 100644 --- a/src/cargo/core/compiler/mod.rs +++ b/src/cargo/core/compiler/mod.rs @@ -1391,17 +1391,22 @@ fn check_cfg_args(unit: &Unit) -> Vec { } arg_feature.push("))"); - // In addition to the package features, we also include the `test` cfg (since - // compiler-team#785, as to be able to someday apply yt conditionaly), as well - // the `docsrs` cfg from the docs.rs service. + // In addition to the package features, we also conditionaly include the `test` cfg + // based on the unit target "test" field (ie `lib.test = false`, `[[bin]] test = false` and + // others). // - // We include `docsrs` here (in Cargo) instead of rustc, since there is a much closer + // We also include `docsrs` here (in Cargo) instead of rustc, since there is a much closer // relationship between Cargo and docs.rs than rustc and docs.rs. In particular, all // users of docs.rs use Cargo, but not all users of rustc (like Rust-for-Linux) use docs.rs. + let arg_extra = if unit.target.tested() { + OsString::from("cfg(docsrs,test)") + } else { + OsString::from("cfg(docsrs)") + }; vec![ OsString::from("--check-cfg"), - OsString::from("cfg(docsrs,test)"), + arg_extra, OsString::from("--check-cfg"), arg_feature, ] diff --git a/tests/testsuite/check_cfg.rs b/tests/testsuite/check_cfg.rs index 69b0101e2a8..36f1641fde8 100644 --- a/tests/testsuite/check_cfg.rs +++ b/tests/testsuite/check_cfg.rs @@ -336,17 +336,18 @@ fn test_false_lib() { .build(); p.cargo("check -v") - .with_stderr_contains(x!("rustc" => "cfg" of "docsrs,test")) + .with_stderr_does_not_contain(x!("rustc" => "cfg" of "docsrs,test")) + .with_stderr_contains(x!("rustc" => "cfg" of "docsrs")) .run(); p.cargo("clean").run(); p.cargo("test -v") - .with_stderr_contains(x!("rustc" => "cfg" of "docsrs,test")) + .with_stderr_contains(x!("rustc" => "cfg" of "docsrs")) .run(); p.cargo("clean").run(); p.cargo("test --lib -v") - .with_stderr_contains(x!("rustc" => "cfg" of "docsrs,test")) + .with_stderr_contains(x!("rustc" => "cfg" of "docsrs")) .run(); } @@ -372,7 +373,8 @@ fn test_false_bins() { .build(); p.cargo("check -v") - .with_stderr_contains(x!("rustc" => "cfg" of "docsrs,test")) // for foo & deamon + .with_stderr_contains(x!("rustc" => "cfg" of "docsrs,test")) // for foo + .with_stderr_contains(x!("rustc" => "cfg" of "docsrs")) // for deamon .run(); } @@ -401,7 +403,8 @@ fn test_false_examples() { .build(); p.cargo("check --examples -v") - .with_stderr_contains(x!("rustc" => "cfg" of "docsrs,test")) + .with_stderr_does_not_contain(x!("rustc" => "cfg" of "docsrs,test")) + .with_stderr_contains(x!("rustc" => "cfg" of "docsrs")) .run(); }