Skip to content

Commit

Permalink
Merge pull request rust-lang#3257 from o01eg/remove-sysroot
Browse files Browse the repository at this point in the history
Don't try to determine sysroot. rustc_driver will use default value.
  • Loading branch information
phansch authored Dec 6, 2018
2 parents 1df5766 + 278b94e commit 041c49c
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 39 deletions.
44 changes: 6 additions & 38 deletions src/driver.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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"));
Expand All @@ -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()]);
Expand Down
29 changes: 28 additions & 1 deletion tests/compile-test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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") {
Expand All @@ -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();

Expand All @@ -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() {
Expand Down
27 changes: 27 additions & 0 deletions tests/dogfood.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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")
Expand Down Expand Up @@ -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"])
Expand Down

0 comments on commit 041c49c

Please sign in to comment.