about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPhilipp Hansch <dev@phansch.net>2018-12-06 22:11:29 +0100
committerGitHub <noreply@github.com>2018-12-06 22:11:29 +0100
commit041c49c1ed11b016d6ab9379643bb1da2adf5bfe (patch)
tree92766c85ed2a9fa7201146ac004823c889fa08d5
parent1df5766cbb559aab0ad5c2296d8b768182b5186c (diff)
parent278b94e6db8e233536c27259371d22f6ec5ebe50 (diff)
downloadrust-041c49c1ed11b016d6ab9379643bb1da2adf5bfe.tar.gz
rust-041c49c1ed11b016d6ab9379643bb1da2adf5bfe.zip
Merge pull request #3257 from o01eg/remove-sysroot
Don't try to determine sysroot. rustc_driver will use default value.
-rw-r--r--src/driver.rs44
-rw-r--r--tests/compile-test.rs29
-rw-r--r--tests/dogfood.rs27
3 files changed, 61 insertions, 39 deletions
diff --git a/src/driver.rs b/src/driver.rs
index fd9c8693c95..6b327d08207 100644
--- a/src/driver.rs
+++ b/src/driver.rs
@@ -23,7 +23,7 @@ use self::rustc_driver::{driver::CompileController, Compilation};
 
 use std::convert::TryInto;
 use std::path::Path;
-use std::process::{exit, Command};
+use std::process::exit;
 
 fn show_version() {
     println!(env!("CARGO_PKG_VERSION"));
@@ -40,54 +40,22 @@ pub fn main() {
                 exit(0);
             }
 
-            let sys_root = 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");
-
             // Setting RUSTC_WRAPPER causes Cargo to pass 'rustc' as the first argument.
             // We're invoking the compiler programmatically, so we ignore this/
-            let mut orig_args: Vec<String> = env::args().collect();
-            if orig_args.len() <= 1 {
+            let mut args: Vec<String> = env::args().collect();
+            if args.len() <= 1 {
                 std::process::exit(1);
             }
-            if Path::new(&orig_args[1]).file_stem() == Some("rustc".as_ref()) {
+            if Path::new(&args[1]).file_stem() == Some("rustc".as_ref()) {
                 // we still want to be able to invoke it normally though
-                orig_args.remove(1);
+                args.remove(1);
             }
-            // this conditional check for the --sysroot flag is there so users can call
-            // `clippy_driver` directly
-            // without having to pass --sysroot or anything
-            let mut args: Vec<String> = if orig_args.iter().any(|s| s == "--sysroot") {
-                orig_args.clone()
-            } else {
-                orig_args
-                    .clone()
-                    .into_iter()
-                    .chain(Some("--sysroot".to_owned()))
-                    .chain(Some(sys_root))
-                    .collect()
-            };
 
             // this check ensures that dependencies are built but not linted and the final
             // crate is
             // linted but not built
             let clippy_enabled = env::var("CLIPPY_TESTS").ok().map_or(false, |val| val == "true")
-                || orig_args.iter().any(|s| s == "--emit=dep-info,metadata");
+                || args.iter().any(|s| s == "--emit=dep-info,metadata");
 
             if clippy_enabled {
                 args.extend_from_slice(&["--cfg".to_owned(), r#"feature="cargo-clippy""#.to_owned()]);
diff --git a/tests/compile-test.rs b/tests/compile-test.rs
index 5cb37b6b6fd..62fa17d388a 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,11 @@ 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() {
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"])