Get {RUSTUP,MULTIRUST}_{HOME,TOOLCHAIN} from runtime environment

Keep the fallback to compile-time environment
This commit is contained in:
flip1995 2020-01-22 14:56:08 +01:00
parent ff8336b0a0
commit f5db351a1d
No known key found for this signature in database
GPG Key ID: 693086869D506637
1 changed files with 29 additions and 10 deletions

View File

@ -281,6 +281,17 @@ fn report_clippy_ice(info: &panic::PanicInfo<'_>, bug_report_url: &str) {
} }
} }
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
})
})
}
pub fn main() { pub fn main() {
rustc_driver::init_rustc_env_logger(); rustc_driver::init_rustc_env_logger();
lazy_static::initialize(&ICE_HOOK); lazy_static::initialize(&ICE_HOOK);
@ -301,22 +312,21 @@ pub fn main() {
// - RUSTUP_HOME, MULTIRUST_HOME, RUSTUP_TOOLCHAIN, MULTIRUST_TOOLCHAIN // - RUSTUP_HOME, MULTIRUST_HOME, RUSTUP_TOOLCHAIN, MULTIRUST_TOOLCHAIN
// - sysroot from rustc in the path // - sysroot from rustc in the path
// - compile-time environment // - compile-time environment
// - SYSROOT
// - RUSTUP_HOME, MULTIRUST_HOME, RUSTUP_TOOLCHAIN, MULTIRUST_TOOLCHAIN
let sys_root_arg = arg_value(&orig_args, "--sysroot", |_| true); let sys_root_arg = arg_value(&orig_args, "--sysroot", |_| true);
let have_sys_root_arg = sys_root_arg.is_some(); let have_sys_root_arg = sys_root_arg.is_some();
let sys_root = sys_root_arg let sys_root = sys_root_arg
.map(PathBuf::from) .map(PathBuf::from)
.or_else(|| std::env::var("SYSROOT").ok().map(PathBuf::from)) .or_else(|| std::env::var("SYSROOT").ok().map(PathBuf::from))
.or_else(|| { .or_else(|| {
let home = option_env!("RUSTUP_HOME").or(option_env!("MULTIRUST_HOME")); let home = std::env::var("RUSTUP_HOME")
let toolchain = option_env!("RUSTUP_TOOLCHAIN").or(option_env!("MULTIRUST_TOOLCHAIN")); .or_else(|_| std::env::var("MULTIRUST_HOME"))
home.and_then(|home| { .ok();
toolchain.map(|toolchain| { let toolchain = std::env::var("RUSTUP_TOOLCHAIN")
let mut path = PathBuf::from(home); .or_else(|_| std::env::var("MULTIRUST_TOOLCHAIN"))
path.push("toolchains"); .ok();
path.push(toolchain); toolchain_path(home, toolchain)
path
})
})
}) })
.or_else(|| { .or_else(|| {
Command::new("rustc") Command::new("rustc")
@ -328,6 +338,15 @@ pub fn main() {
.map(|s| PathBuf::from(s.trim())) .map(|s| PathBuf::from(s.trim()))
}) })
.or_else(|| option_env!("SYSROOT").map(PathBuf::from)) .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()) .map(|pb| pb.to_string_lossy().to_string())
.expect("need to specify SYSROOT env var during clippy compilation, or use rustup or multirust"); .expect("need to specify SYSROOT env var during clippy compilation, or use rustup or multirust");