Skip to content

Commit f5db351

Browse files
committed
Get {RUSTUP,MULTIRUST}_{HOME,TOOLCHAIN} from runtime environment
Keep the fallback to compile-time environment
1 parent ff8336b commit f5db351

File tree

1 file changed

+29
-10
lines changed

1 file changed

+29
-10
lines changed

src/driver.rs

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,17 @@ fn report_clippy_ice(info: &panic::PanicInfo<'_>, bug_report_url: &str) {
281281
}
282282
}
283283

284+
fn toolchain_path(home: Option<String>, toolchain: Option<String>) -> Option<PathBuf> {
285+
home.and_then(|home| {
286+
toolchain.map(|toolchain| {
287+
let mut path = PathBuf::from(home);
288+
path.push("toolchains");
289+
path.push(toolchain);
290+
path
291+
})
292+
})
293+
}
294+
284295
pub fn main() {
285296
rustc_driver::init_rustc_env_logger();
286297
lazy_static::initialize(&ICE_HOOK);
@@ -301,22 +312,21 @@ pub fn main() {
301312
// - RUSTUP_HOME, MULTIRUST_HOME, RUSTUP_TOOLCHAIN, MULTIRUST_TOOLCHAIN
302313
// - sysroot from rustc in the path
303314
// - compile-time environment
315+
// - SYSROOT
316+
// - RUSTUP_HOME, MULTIRUST_HOME, RUSTUP_TOOLCHAIN, MULTIRUST_TOOLCHAIN
304317
let sys_root_arg = arg_value(&orig_args, "--sysroot", |_| true);
305318
let have_sys_root_arg = sys_root_arg.is_some();
306319
let sys_root = sys_root_arg
307320
.map(PathBuf::from)
308321
.or_else(|| std::env::var("SYSROOT").ok().map(PathBuf::from))
309322
.or_else(|| {
310-
let home = option_env!("RUSTUP_HOME").or(option_env!("MULTIRUST_HOME"));
311-
let toolchain = option_env!("RUSTUP_TOOLCHAIN").or(option_env!("MULTIRUST_TOOLCHAIN"));
312-
home.and_then(|home| {
313-
toolchain.map(|toolchain| {
314-
let mut path = PathBuf::from(home);
315-
path.push("toolchains");
316-
path.push(toolchain);
317-
path
318-
})
319-
})
323+
let home = std::env::var("RUSTUP_HOME")
324+
.or_else(|_| std::env::var("MULTIRUST_HOME"))
325+
.ok();
326+
let toolchain = std::env::var("RUSTUP_TOOLCHAIN")
327+
.or_else(|_| std::env::var("MULTIRUST_TOOLCHAIN"))
328+
.ok();
329+
toolchain_path(home, toolchain)
320330
})
321331
.or_else(|| {
322332
Command::new("rustc")
@@ -328,6 +338,15 @@ pub fn main() {
328338
.map(|s| PathBuf::from(s.trim()))
329339
})
330340
.or_else(|| option_env!("SYSROOT").map(PathBuf::from))
341+
.or_else(|| {
342+
let home = option_env!("RUSTUP_HOME")
343+
.or(option_env!("MULTIRUST_HOME"))
344+
.map(ToString::to_string);
345+
let toolchain = option_env!("RUSTUP_TOOLCHAIN")
346+
.or(option_env!("MULTIRUST_TOOLCHAIN"))
347+
.map(ToString::to_string);
348+
toolchain_path(home, toolchain)
349+
})
331350
.map(|pb| pb.to_string_lossy().to_string())
332351
.expect("need to specify SYSROOT env var during clippy compilation, or use rustup or multirust");
333352

0 commit comments

Comments
 (0)