diff --git a/src/cargo/core/compiler/mod.rs b/src/cargo/core/compiler/mod.rs index bed881d50db1..60041a1fb59f 100644 --- a/src/cargo/core/compiler/mod.rs +++ b/src/cargo/core/compiler/mod.rs @@ -1907,7 +1907,7 @@ fn descriptive_pkg_name(name: &str, target: &Target, mode: &CompileMode) -> Stri } /// Applies environment variables from config `[env]` to [`ProcessBuilder`]. -fn apply_env_config(gctx: &crate::GlobalContext, cmd: &mut ProcessBuilder) -> CargoResult<()> { +pub(crate) fn apply_env_config(gctx: &crate::GlobalContext, cmd: &mut ProcessBuilder) -> CargoResult<()> { for (key, value) in gctx.env_config()?.iter() { // never override a value that has already been set by cargo if cmd.get_envs().contains_key(key) { diff --git a/src/cargo/util/rustc.rs b/src/cargo/util/rustc.rs index 8161701ed246..2b80136dc053 100644 --- a/src/cargo/util/rustc.rs +++ b/src/cargo/util/rustc.rs @@ -9,6 +9,7 @@ use cargo_util::{paths, ProcessBuilder, ProcessError}; use serde::{Deserialize, Serialize}; use tracing::{debug, info, warn}; +use crate::core::compiler::apply_env_config; use crate::util::interning::InternedString; use crate::util::{CargoResult, GlobalContext, StableHasher}; @@ -60,6 +61,7 @@ impl Rustc { let mut cmd = ProcessBuilder::new(&path) .wrapped(workspace_wrapper.as_ref()) .wrapped(wrapper.as_deref()); + apply_env_config(gctx, &mut cmd)?; cmd.arg("-vV"); let verbose_version = cache.cached_output(&cmd, 0)?.0; diff --git a/tests/testsuite/cargo_env_config.rs b/tests/testsuite/cargo_env_config.rs index 4edf8a7d7e0e..33d826f3f110 100644 --- a/tests/testsuite/cargo_env_config.rs +++ b/tests/testsuite/cargo_env_config.rs @@ -193,12 +193,10 @@ fn env_applied_to_target_info_discovery_rustc() { r#" fn main() { let mut cmd = std::env::args().skip(1).collect::>(); - if cmd.get(1).map(|s| &**s) == Some("-vV") { - // This is the version query, not the target info query, so skip this. - } else { - let env_test = std::env::var("ENV_TEST").unwrap(); - eprintln!("WRAPPER ENV_TEST:{env_test}"); - } + // This will be invoked twice (with `-vV` and with all the `--print`), + // make sure the environment variable exists each time. + let env_test = std::env::var("ENV_TEST").unwrap(); + eprintln!("WRAPPER ENV_TEST:{env_test}"); let (prog, args) = cmd.split_first().unwrap(); let status = std::process::Command::new(prog) .args(args).status().unwrap();