mirror of
https://github.com/rust-lang/rust-clippy
synced 2025-02-17 14:38:46 +00:00
Rollup merge of #103660 - ozkanonur:master, r=jyn514
improve `filesearch::get_or_default_sysroot` `fn get_or_default_sysroot` is now improved and used in `miri` and `clippy`, and tests are still passing as they should. So we no longer need to implement custom workarounds/hacks to find sysroot in tools like miri/clippy. Resolves https://github.com/rust-lang/rust/issues/98832 re-opened from #103581
This commit is contained in:
commit
40dca3d6a0
1 changed files with 5 additions and 74 deletions
|
@ -23,8 +23,8 @@ use std::borrow::Cow;
|
||||||
use std::env;
|
use std::env;
|
||||||
use std::ops::Deref;
|
use std::ops::Deref;
|
||||||
use std::panic;
|
use std::panic;
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::Path;
|
||||||
use std::process::{exit, Command};
|
use std::process::exit;
|
||||||
use std::sync::LazyLock;
|
use std::sync::LazyLock;
|
||||||
|
|
||||||
/// If a command-line option matches `find_arg`, then apply the predicate `pred` on its value. If
|
/// If a command-line option matches `find_arg`, then apply the predicate `pred` on its value. If
|
||||||
|
@ -210,17 +210,6 @@ fn report_clippy_ice(info: &panic::PanicInfo<'_>, bug_report_url: &str) {
|
||||||
interface::try_print_query_stack(&handler, num_frames);
|
interface::try_print_query_stack(&handler, num_frames);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn toolchain_path(home: Option<String>, toolchain: Option<String>) -> Option<PathBuf> {
|
|
||||||
home.and_then(|home| {
|
|
||||||
toolchain.map(|toolchain| {
|
|
||||||
let mut path = PathBuf::from(home);
|
|
||||||
path.push("toolchains");
|
|
||||||
path.push(toolchain);
|
|
||||||
path
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
#[allow(clippy::too_many_lines)]
|
#[allow(clippy::too_many_lines)]
|
||||||
pub fn main() {
|
pub fn main() {
|
||||||
rustc_driver::init_rustc_env_logger();
|
rustc_driver::init_rustc_env_logger();
|
||||||
|
@ -228,51 +217,6 @@ pub fn main() {
|
||||||
exit(rustc_driver::catch_with_exit_code(move || {
|
exit(rustc_driver::catch_with_exit_code(move || {
|
||||||
let mut orig_args: Vec<String> = env::args().collect();
|
let mut orig_args: Vec<String> = env::args().collect();
|
||||||
|
|
||||||
// Get the sysroot, looking from most specific to this invocation to the least:
|
|
||||||
// - command line
|
|
||||||
// - runtime environment
|
|
||||||
// - SYSROOT
|
|
||||||
// - RUSTUP_HOME, MULTIRUST_HOME, RUSTUP_TOOLCHAIN, MULTIRUST_TOOLCHAIN
|
|
||||||
// - sysroot from rustc in the path
|
|
||||||
// - compile-time environment
|
|
||||||
// - SYSROOT
|
|
||||||
// - RUSTUP_HOME, MULTIRUST_HOME, RUSTUP_TOOLCHAIN, MULTIRUST_TOOLCHAIN
|
|
||||||
let sys_root_arg = arg_value(&orig_args, "--sysroot", |_| true);
|
|
||||||
let have_sys_root_arg = sys_root_arg.is_some();
|
|
||||||
let sys_root = sys_root_arg
|
|
||||||
.map(PathBuf::from)
|
|
||||||
.or_else(|| std::env::var("SYSROOT").ok().map(PathBuf::from))
|
|
||||||
.or_else(|| {
|
|
||||||
let home = std::env::var("RUSTUP_HOME")
|
|
||||||
.or_else(|_| std::env::var("MULTIRUST_HOME"))
|
|
||||||
.ok();
|
|
||||||
let toolchain = std::env::var("RUSTUP_TOOLCHAIN")
|
|
||||||
.or_else(|_| std::env::var("MULTIRUST_TOOLCHAIN"))
|
|
||||||
.ok();
|
|
||||||
toolchain_path(home, toolchain)
|
|
||||||
})
|
|
||||||
.or_else(|| {
|
|
||||||
Command::new("rustc")
|
|
||||||
.arg("--print")
|
|
||||||
.arg("sysroot")
|
|
||||||
.output()
|
|
||||||
.ok()
|
|
||||||
.and_then(|out| String::from_utf8(out.stdout).ok())
|
|
||||||
.map(|s| PathBuf::from(s.trim()))
|
|
||||||
})
|
|
||||||
.or_else(|| option_env!("SYSROOT").map(PathBuf::from))
|
|
||||||
.or_else(|| {
|
|
||||||
let home = option_env!("RUSTUP_HOME")
|
|
||||||
.or(option_env!("MULTIRUST_HOME"))
|
|
||||||
.map(ToString::to_string);
|
|
||||||
let toolchain = option_env!("RUSTUP_TOOLCHAIN")
|
|
||||||
.or(option_env!("MULTIRUST_TOOLCHAIN"))
|
|
||||||
.map(ToString::to_string);
|
|
||||||
toolchain_path(home, toolchain)
|
|
||||||
})
|
|
||||||
.map(|pb| pb.to_string_lossy().to_string())
|
|
||||||
.expect("need to specify SYSROOT env var during clippy compilation, or use rustup or multirust");
|
|
||||||
|
|
||||||
// make "clippy-driver --rustc" work like a subcommand that passes further args to "rustc"
|
// make "clippy-driver --rustc" work like a subcommand that passes further args to "rustc"
|
||||||
// for example `clippy-driver --rustc --version` will print the rustc version that clippy-driver
|
// for example `clippy-driver --rustc --version` will print the rustc version that clippy-driver
|
||||||
// uses
|
// uses
|
||||||
|
@ -280,13 +224,7 @@ pub fn main() {
|
||||||
orig_args.remove(pos);
|
orig_args.remove(pos);
|
||||||
orig_args[0] = "rustc".to_string();
|
orig_args[0] = "rustc".to_string();
|
||||||
|
|
||||||
// if we call "rustc", we need to pass --sysroot here as well
|
return rustc_driver::RunCompiler::new(&orig_args, &mut DefaultCallbacks).run();
|
||||||
let mut args: Vec<String> = orig_args.clone();
|
|
||||||
if !have_sys_root_arg {
|
|
||||||
args.extend(vec!["--sysroot".into(), sys_root]);
|
|
||||||
};
|
|
||||||
|
|
||||||
return rustc_driver::RunCompiler::new(&args, &mut DefaultCallbacks).run();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if orig_args.iter().any(|a| a == "--version" || a == "-V") {
|
if orig_args.iter().any(|a| a == "--version" || a == "-V") {
|
||||||
|
@ -309,14 +247,6 @@ pub fn main() {
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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> = orig_args.clone();
|
|
||||||
if !have_sys_root_arg {
|
|
||||||
args.extend(vec!["--sysroot".into(), sys_root]);
|
|
||||||
};
|
|
||||||
|
|
||||||
let mut no_deps = false;
|
let mut no_deps = false;
|
||||||
let clippy_args_var = env::var("CLIPPY_ARGS").ok();
|
let clippy_args_var = env::var("CLIPPY_ARGS").ok();
|
||||||
let clippy_args = clippy_args_var
|
let clippy_args = clippy_args_var
|
||||||
|
@ -345,10 +275,11 @@ pub fn main() {
|
||||||
|
|
||||||
let clippy_enabled = !cap_lints_allow && (!no_deps || in_primary_package);
|
let clippy_enabled = !cap_lints_allow && (!no_deps || in_primary_package);
|
||||||
if clippy_enabled {
|
if clippy_enabled {
|
||||||
|
let mut args: Vec<String> = orig_args.clone();
|
||||||
args.extend(clippy_args);
|
args.extend(clippy_args);
|
||||||
rustc_driver::RunCompiler::new(&args, &mut ClippyCallbacks { clippy_args_var }).run()
|
rustc_driver::RunCompiler::new(&args, &mut ClippyCallbacks { clippy_args_var }).run()
|
||||||
} else {
|
} else {
|
||||||
rustc_driver::RunCompiler::new(&args, &mut RustcCallbacks { clippy_args_var }).run()
|
rustc_driver::RunCompiler::new(&orig_args, &mut RustcCallbacks { clippy_args_var }).run()
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue