diff options
| author | Philipp Krones <hello@philkrones.com> | 2024-02-08 20:24:42 +0100 |
|---|---|---|
| committer | Philipp Krones <hello@philkrones.com> | 2024-02-08 20:24:42 +0100 |
| commit | f3b3d23416f1da77103bb74788f23b4f9c78ee7e (patch) | |
| tree | 06eefe8d8b7243b2639abd38cf3c35469736a84e /src | |
| parent | 7a827028a59187bbe5558b27bedb9c00b144fa8e (diff) | |
| download | rust-f3b3d23416f1da77103bb74788f23b4f9c78ee7e.tar.gz rust-f3b3d23416f1da77103bb74788f23b4f9c78ee7e.zip | |
Merge commit '60cb29c5e4f9772685c9873752196725c946a849' into clippyup
Diffstat (limited to 'src')
| -rw-r--r-- | src/driver.rs | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/src/driver.rs b/src/driver.rs index b944a299256..f5e52f787ab 100644 --- a/src/driver.rs +++ b/src/driver.rs @@ -22,9 +22,11 @@ use rustc_session::EarlyDiagCtxt; use rustc_span::symbol::Symbol; use std::env; +use std::fs::read_to_string; use std::ops::Deref; use std::path::Path; use std::process::exit; +use std::string::ToString; use anstream::println; @@ -188,12 +190,31 @@ pub fn main() { exit(rustc_driver::catch_with_exit_code(move || { let mut orig_args: Vec<String> = env::args().collect(); - let has_sysroot_arg = arg_value(&orig_args, "--sysroot", |_| true).is_some(); + + let has_sysroot_arg = |args: &mut [String]| -> bool { + if arg_value(args, "--sysroot", |_| true).is_some() { + return true; + } + // https://doc.rust-lang.org/rustc/command-line-arguments.html#path-load-command-line-flags-from-a-path + // Beside checking for existence of `--sysroot` on the command line, we need to + // check for the arg files that are prefixed with @ as well to be consistent with rustc + for arg in args.iter() { + if let Some(arg_file_path) = arg.strip_prefix('@') { + if let Ok(arg_file) = read_to_string(arg_file_path) { + let split_arg_file: Vec<String> = arg_file.lines().map(ToString::to_string).collect(); + if arg_value(&split_arg_file, "--sysroot", |_| true).is_some() { + return true; + } + } + } + } + false + }; let sys_root_env = std::env::var("SYSROOT").ok(); let pass_sysroot_env_if_given = |args: &mut Vec<String>, sys_root_env| { if let Some(sys_root) = sys_root_env { - if !has_sysroot_arg { + if !has_sysroot_arg(args) { args.extend(vec!["--sysroot".into(), sys_root]); } }; |
