diff options
| -rw-r--r-- | tests/dogfood.rs | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/tests/dogfood.rs b/tests/dogfood.rs index c1f02b9fcef..69f4f9901b7 100644 --- a/tests/dogfood.rs +++ b/tests/dogfood.rs @@ -7,6 +7,31 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +use std::path::PathBuf; +use std::process::Command; + +fn rustc_sysroot_path() -> PathBuf { + option_env!("SYSROOT") + .map(String::from) + .or_else(|| std::env::var("SYSROOT").ok()) + .or_else(|| { + let home = option_env!("RUSTUP_HOME").or(option_env!("MULTIRUST_HOME")); + let toolchain = option_env!("RUSTUP_TOOLCHAIN").or(option_env!("MULTIRUST_TOOLCHAIN")); + home.and_then(|home| toolchain.map(|toolchain| format!("{}/toolchains/{}", home, toolchain))) + }) + .or_else(|| { + Command::new("rustc") + .arg("--print") + .arg("sysroot") + .output() + .ok() + .and_then(|out| String::from_utf8(out.stdout).ok()) + .map(|s| s.trim().to_owned()) + }) + .expect("need to specify SYSROOT env var during clippy compilation, or use rustup or multirust") + .into() +} + #[test] fn dogfood() { if option_env!("RUSTC_TEST_SUITE").is_some() || cfg!(windows) { @@ -21,6 +46,7 @@ fn dogfood() { let output = std::process::Command::new(clippy_cmd) .current_dir(root_dir) .env("CLIPPY_DOGFOOD", "1") + .env("RUSTFLAGS", format!("--sysroot {}", rustc_sysroot_path().display())) .arg("clippy") .arg("--all-targets") .arg("--all-features") @@ -59,6 +85,7 @@ fn dogfood_tests() { let output = std::process::Command::new(&clippy_cmd) .current_dir(root_dir.join(d)) .env("CLIPPY_DOGFOOD", "1") + .env("RUSTFLAGS", format!("--sysroot {}", rustc_sysroot_path().display())) .arg("clippy") .arg("--") .args(&["-D", "clippy::all"]) |
