From 571d4cc7bf4c073dcb90298902188fef1721ef9b Mon Sep 17 00:00:00 2001 From: O01eg Date: Thu, 22 Nov 2018 15:40:29 +0300 Subject: [PATCH] Add sysroot getting code to tests. --- tests/compile-test.rs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/tests/compile-test.rs b/tests/compile-test.rs index 5cb37b6b6..115b40c21 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() {