Skip to content

Commit 041c49c

Browse files
authored
Merge pull request rust-lang#3257 from o01eg/remove-sysroot
Don't try to determine sysroot. rustc_driver will use default value.
2 parents 1df5766 + 278b94e commit 041c49c

File tree

3 files changed

+61
-39
lines changed

3 files changed

+61
-39
lines changed

src/driver.rs

+6-38
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ use self::rustc_driver::{driver::CompileController, Compilation};
2323

2424
use std::convert::TryInto;
2525
use std::path::Path;
26-
use std::process::{exit, Command};
26+
use std::process::exit;
2727

2828
fn show_version() {
2929
println!(env!("CARGO_PKG_VERSION"));
@@ -40,54 +40,22 @@ pub fn main() {
4040
exit(0);
4141
}
4242

43-
let sys_root = option_env!("SYSROOT")
44-
.map(String::from)
45-
.or_else(|| std::env::var("SYSROOT").ok())
46-
.or_else(|| {
47-
let home = option_env!("RUSTUP_HOME").or(option_env!("MULTIRUST_HOME"));
48-
let toolchain = option_env!("RUSTUP_TOOLCHAIN").or(option_env!("MULTIRUST_TOOLCHAIN"));
49-
home.and_then(|home| toolchain.map(|toolchain| format!("{}/toolchains/{}", home, toolchain)))
50-
})
51-
.or_else(|| {
52-
Command::new("rustc")
53-
.arg("--print")
54-
.arg("sysroot")
55-
.output()
56-
.ok()
57-
.and_then(|out| String::from_utf8(out.stdout).ok())
58-
.map(|s| s.trim().to_owned())
59-
})
60-
.expect("need to specify SYSROOT env var during clippy compilation, or use rustup or multirust");
61-
6243
// Setting RUSTC_WRAPPER causes Cargo to pass 'rustc' as the first argument.
6344
// We're invoking the compiler programmatically, so we ignore this/
64-
let mut orig_args: Vec<String> = env::args().collect();
65-
if orig_args.len() <= 1 {
45+
let mut args: Vec<String> = env::args().collect();
46+
if args.len() <= 1 {
6647
std::process::exit(1);
6748
}
68-
if Path::new(&orig_args[1]).file_stem() == Some("rustc".as_ref()) {
49+
if Path::new(&args[1]).file_stem() == Some("rustc".as_ref()) {
6950
// we still want to be able to invoke it normally though
70-
orig_args.remove(1);
51+
args.remove(1);
7152
}
72-
// this conditional check for the --sysroot flag is there so users can call
73-
// `clippy_driver` directly
74-
// without having to pass --sysroot or anything
75-
let mut args: Vec<String> = if orig_args.iter().any(|s| s == "--sysroot") {
76-
orig_args.clone()
77-
} else {
78-
orig_args
79-
.clone()
80-
.into_iter()
81-
.chain(Some("--sysroot".to_owned()))
82-
.chain(Some(sys_root))
83-
.collect()
84-
};
8553

8654
// this check ensures that dependencies are built but not linted and the final
8755
// crate is
8856
// linted but not built
8957
let clippy_enabled = env::var("CLIPPY_TESTS").ok().map_or(false, |val| val == "true")
90-
|| orig_args.iter().any(|s| s == "--emit=dep-info,metadata");
58+
|| args.iter().any(|s| s == "--emit=dep-info,metadata");
9159

9260
if clippy_enabled {
9361
args.extend_from_slice(&["--cfg".to_owned(), r#"feature="cargo-clippy""#.to_owned()]);

tests/compile-test.rs

+28-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ use std::ffi::OsStr;
1717
use std::fs;
1818
use std::io;
1919
use std::path::{Path, PathBuf};
20+
use std::process::Command;
2021

2122
fn clippy_driver_path() -> PathBuf {
2223
if let Some(path) = option_env!("CLIPPY_DRIVER_PATH") {
@@ -42,6 +43,28 @@ fn rustc_lib_path() -> PathBuf {
4243
option_env!("RUSTC_LIB_PATH").unwrap().into()
4344
}
4445

46+
fn rustc_sysroot_path() -> PathBuf {
47+
option_env!("SYSROOT")
48+
.map(String::from)
49+
.or_else(|| std::env::var("SYSROOT").ok())
50+
.or_else(|| {
51+
let home = option_env!("RUSTUP_HOME").or(option_env!("MULTIRUST_HOME"));
52+
let toolchain = option_env!("RUSTUP_TOOLCHAIN").or(option_env!("MULTIRUST_TOOLCHAIN"));
53+
home.and_then(|home| toolchain.map(|toolchain| format!("{}/toolchains/{}", home, toolchain)))
54+
})
55+
.or_else(|| {
56+
Command::new("rustc")
57+
.arg("--print")
58+
.arg("sysroot")
59+
.output()
60+
.ok()
61+
.and_then(|out| String::from_utf8(out.stdout).ok())
62+
.map(|s| s.trim().to_owned())
63+
})
64+
.expect("need to specify SYSROOT env var during clippy compilation, or use rustup or multirust")
65+
.into()
66+
}
67+
4568
fn config(mode: &str, dir: PathBuf) -> compiletest::Config {
4669
let mut config = compiletest::Config::default();
4770

@@ -55,7 +78,11 @@ fn config(mode: &str, dir: PathBuf) -> compiletest::Config {
5578
config.run_lib_path = rustc_lib_path();
5679
config.compile_lib_path = rustc_lib_path();
5780
}
58-
config.target_rustcflags = Some(format!("-L {0} -L {0}/deps -Dwarnings", host_libs().display()));
81+
config.target_rustcflags = Some(format!(
82+
"-L {0} -L {0}/deps -Dwarnings --sysroot {1}",
83+
host_libs().display(),
84+
rustc_sysroot_path().display()
85+
));
5986

6087
config.mode = cfg_mode;
6188
config.build_base = if rustc_test_suite().is_some() {

tests/dogfood.rs

+27
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,31 @@
77
// option. This file may not be copied, modified, or distributed
88
// except according to those terms.
99

10+
use std::path::PathBuf;
11+
use std::process::Command;
12+
13+
fn rustc_sysroot_path() -> PathBuf {
14+
option_env!("SYSROOT")
15+
.map(String::from)
16+
.or_else(|| std::env::var("SYSROOT").ok())
17+
.or_else(|| {
18+
let home = option_env!("RUSTUP_HOME").or(option_env!("MULTIRUST_HOME"));
19+
let toolchain = option_env!("RUSTUP_TOOLCHAIN").or(option_env!("MULTIRUST_TOOLCHAIN"));
20+
home.and_then(|home| toolchain.map(|toolchain| format!("{}/toolchains/{}", home, toolchain)))
21+
})
22+
.or_else(|| {
23+
Command::new("rustc")
24+
.arg("--print")
25+
.arg("sysroot")
26+
.output()
27+
.ok()
28+
.and_then(|out| String::from_utf8(out.stdout).ok())
29+
.map(|s| s.trim().to_owned())
30+
})
31+
.expect("need to specify SYSROOT env var during clippy compilation, or use rustup or multirust")
32+
.into()
33+
}
34+
1035
#[test]
1136
fn dogfood() {
1237
if option_env!("RUSTC_TEST_SUITE").is_some() || cfg!(windows) {
@@ -21,6 +46,7 @@ fn dogfood() {
2146
let output = std::process::Command::new(clippy_cmd)
2247
.current_dir(root_dir)
2348
.env("CLIPPY_DOGFOOD", "1")
49+
.env("RUSTFLAGS", format!("--sysroot {}", rustc_sysroot_path().display()))
2450
.arg("clippy")
2551
.arg("--all-targets")
2652
.arg("--all-features")
@@ -59,6 +85,7 @@ fn dogfood_tests() {
5985
let output = std::process::Command::new(&clippy_cmd)
6086
.current_dir(root_dir.join(d))
6187
.env("CLIPPY_DOGFOOD", "1")
88+
.env("RUSTFLAGS", format!("--sysroot {}", rustc_sysroot_path().display()))
6289
.arg("clippy")
6390
.arg("--")
6491
.args(&["-D", "clippy::all"])

0 commit comments

Comments
 (0)