Skip to content

Commit

Permalink
Revert "Merge pull request rust-lang#3257 from o01eg/remove-sysroot"
Browse files Browse the repository at this point in the history
This reverts commit 041c49c, reversing
changes made to 1df5766.

This broke clippy working when installed from the git repo via cargo install.

Fixes rust-lang#3523
Reopens rust-lang#2874
  • Loading branch information
matthiaskrgr committed Dec 11, 2018
1 parent 2375c31 commit 77efc91
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 61 deletions.
44 changes: 38 additions & 6 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;
use std::process::{exit, Command};

fn show_version() {
println!(env!("CARGO_PKG_VERSION"));
Expand All @@ -40,22 +40,54 @@ 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 args: Vec<String> = env::args().collect();
if args.len() <= 1 {
let mut orig_args: Vec<String> = env::args().collect();
if orig_args.len() <= 1 {
std::process::exit(1);
}
if Path::new(&args[1]).file_stem() == Some("rustc".as_ref()) {
if Path::new(&orig_args[1]).file_stem() == Some("rustc".as_ref()) {
// we still want to be able to invoke it normally though
args.remove(1);
orig_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")
|| args.iter().any(|s| s == "--emit=dep-info,metadata");
|| orig_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: 1 addition & 28 deletions tests/compile-test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ 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 @@ -43,28 +42,6 @@ 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 @@ -78,11 +55,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 --sysroot {1}",
host_libs().display(),
rustc_sysroot_path().display()
));
config.target_rustcflags = Some(format!("-L {0} -L {0}/deps -Dwarnings", host_libs().display()));

config.mode = cfg_mode;
config.build_base = if rustc_test_suite().is_some() {
Expand Down
27 changes: 0 additions & 27 deletions tests/dogfood.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,31 +7,6 @@
// 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 @@ -46,7 +21,6 @@ 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 @@ -85,7 +59,6 @@ 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 77efc91

Please sign in to comment.