about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--tests/dogfood.rs27
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"])