diff --git a/build.rs b/build.rs index df2e73b..79a2cb0 100644 --- a/build.rs +++ b/build.rs @@ -67,17 +67,37 @@ fn compile_probe() -> Option { let out_dir = env::var_os("OUT_DIR")?; let probefile = Path::new(&out_dir).join("probe.rs"); fs::write(&probefile, PROBE).ok()?; - Command::new(rustc) - .stderr(Stdio::null()) + + // Make sure to pick up Cargo rustc configuration. + let mut cmd = env::var_os("CARGO_RUSTC_WRAPPER").map_or_else( + || Command::new(&rustc), + |wrapper| { + let mut cmd = Command::new(wrapper); + // The wrapper's first argument should always be the path to rustc. + cmd.arg(&rustc); + cmd + }, + ); + + cmd.stderr(Stdio::null()) .arg("--edition=2018") .arg("--crate-name=anyhow_build") .arg("--crate-type=lib") .arg("--emit=metadata") .arg("--out-dir") .arg(out_dir) - .arg(probefile) - .status() - .ok() + .arg(probefile); + + // If Cargo wants to set RUSTFLAGS, use that. + if let Ok(rustflags) = env::var("CARGO_ENCODED_RUSTFLAGS") { + if !rustflags.is_empty() { + for arg in rustflags.split('\x1f') { + cmd.arg(arg); + } + } + } + + cmd.status().ok() } fn rustc_minor_version() -> Option {