about summary refs log tree commit diff
diff options
context:
space:
mode:
authorO01eg <o01eg@yandex.ru>2018-11-22 15:40:29 +0300
committerO01eg <o01eg@yandex.ru>2018-12-06 12:23:47 +0300
commit571d4cc7bf4c073dcb90298902188fef1721ef9b (patch)
tree391e6e5bf093587fc8d0c6c2055ea58f627cf164
parent69813d6faf2c9caaf2e8131e6218bd056366da53 (diff)
downloadrust-571d4cc7bf4c073dcb90298902188fef1721ef9b.tar.gz
rust-571d4cc7bf4c073dcb90298902188fef1721ef9b.zip
Add sysroot getting code to tests.
-rw-r--r--tests/compile-test.rs25
1 files changed, 24 insertions, 1 deletions
diff --git a/tests/compile-test.rs b/tests/compile-test.rs
index 5cb37b6b6fd..115b40c21b3 100644
--- a/tests/compile-test.rs
+++ b/tests/compile-test.rs
@@ -17,6 +17,7 @@ use std::ffi::OsStr;
 use std::fs;
 use std::io;
 use std::path::{Path, PathBuf};
+use std::process::Command;
 
 fn clippy_driver_path() -> PathBuf {
     if let Some(path) = option_env!("CLIPPY_DRIVER_PATH") {
@@ -42,6 +43,28 @@ fn rustc_lib_path() -> PathBuf {
     option_env!("RUSTC_LIB_PATH").unwrap().into()
 }
 
+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()
+}
+
 fn config(mode: &str, dir: PathBuf) -> compiletest::Config {
     let mut config = compiletest::Config::default();
 
@@ -55,7 +78,7 @@ fn config(mode: &str, dir: PathBuf) -> compiletest::Config {
         config.run_lib_path = rustc_lib_path();
         config.compile_lib_path = rustc_lib_path();
     }
-    config.target_rustcflags = Some(format!("-L {0} -L {0}/deps -Dwarnings", host_libs().display()));
+    config.target_rustcflags = Some(format!("-L {0} -L {0}/deps -Dwarnings --sysroot {1}", host_libs().display(), rustc_sysroot_path().display()));
 
     config.mode = cfg_mode;
     config.build_base = if rustc_test_suite().is_some() {