From 2fae4ee92ea9a28722673df442112446f7521079 Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Wed, 6 Mar 2024 10:19:34 +0100 Subject: [PATCH] Make sysroot mandatory for rustdoc --- compiler/rustc_interface/src/tests.rs | 2 +- compiler/rustc_session/src/config.rs | 3 +-- compiler/rustc_session/src/search_paths.rs | 15 +++------------ src/librustdoc/config.rs | 9 ++++++++- 4 files changed, 13 insertions(+), 16 deletions(-) diff --git a/compiler/rustc_interface/src/tests.rs b/compiler/rustc_interface/src/tests.rs index 8e43d6974fe72..3b78e6a43ab33 100644 --- a/compiler/rustc_interface/src/tests.rs +++ b/compiler/rustc_interface/src/tests.rs @@ -317,7 +317,7 @@ fn test_search_paths_tracking_hash_different_order() { let push = |opts: &mut Options, search_path| { opts.search_paths.push(SearchPath::from_cli_opt( - None, + "not-a-sysroot".as_ref(), &opts.target_triple, &early_dcx, search_path, diff --git a/compiler/rustc_session/src/config.rs b/compiler/rustc_session/src/config.rs index 7932865922776..8d186f7c749e8 100644 --- a/compiler/rustc_session/src/config.rs +++ b/compiler/rustc_session/src/config.rs @@ -2824,7 +2824,6 @@ pub fn build_session_options(early_dcx: &mut EarlyDiagCtxt, matches: &getopts::M let logical_env = parse_logical_env(early_dcx, matches); let sysroot = filesearch::materialize_sysroot(sysroot_opt); - let real_rust_source_base_dir = { // This is the location used by the `rust-src` `rustup` component. let mut candidate = sysroot.join("lib/rustlib/src/rust"); @@ -2845,7 +2844,7 @@ pub fn build_session_options(early_dcx: &mut EarlyDiagCtxt, matches: &getopts::M let mut search_paths = vec![]; for s in &matches.opt_strs("L") { - search_paths.push(SearchPath::from_cli_opt(Some(&sysroot), &target_triple, early_dcx, s)); + search_paths.push(SearchPath::from_cli_opt(&sysroot, &target_triple, early_dcx, s)); } let working_dir = std::env::current_dir().unwrap_or_else(|e| { diff --git a/compiler/rustc_session/src/search_paths.rs b/compiler/rustc_session/src/search_paths.rs index 58b4a08b5b028..9cabdec34ae50 100644 --- a/compiler/rustc_session/src/search_paths.rs +++ b/compiler/rustc_session/src/search_paths.rs @@ -48,7 +48,7 @@ impl PathKind { impl SearchPath { pub fn from_cli_opt( - sysroot: Option<&Path>, + sysroot: &Path, triple: &TargetTriple, early_dcx: &EarlyDiagCtxt, path: &str, @@ -64,21 +64,12 @@ impl SearchPath { } else if let Some(stripped) = path.strip_prefix("all=") { (PathKind::All, stripped) } else if let Some(stripped) = path.strip_prefix("builtin:") { - let Some(sysroot) = sysroot else { - early_dcx.early_fatal("`-L builtin:` is not supported without a sysroot present"); - }; - let triple = match triple { - TargetTriple::TargetTriple(triple) => triple, - TargetTriple::TargetJson { .. } => { - early_dcx.early_fatal("`-L builtin:` is not supported with custom targets"); - } - }; - if stripped.contains(std::path::is_separator) { early_dcx.early_fatal("`-L builtin:` does not accept paths"); } - let path = make_target_lib_path(sysroot, triple).join("builtin").join(stripped); + let path = + make_target_lib_path(sysroot, triple.triple()).join("builtin").join(stripped); if !path.is_dir() { early_dcx.early_fatal(format!("builtin:{stripped} does not exist")); } diff --git a/src/librustdoc/config.rs b/src/librustdoc/config.rs index fdbbe62c15889..f078ad2fb5376 100644 --- a/src/librustdoc/config.rs +++ b/src/librustdoc/config.rs @@ -625,10 +625,17 @@ impl Options { let target = parse_target_triple(early_dcx, matches); let maybe_sysroot = matches.opt_str("sysroot").map(PathBuf::from); + let sysroot = match &maybe_sysroot { + Some(s) => s.clone(), + None => { + rustc_session::filesearch::get_or_default_sysroot().expect("Failed finding sysroot") + } + }; + let libs = matches .opt_strs("L") .iter() - .map(|s| SearchPath::from_cli_opt(maybe_sysroot.as_deref(), &target, early_dcx, s)) + .map(|s| SearchPath::from_cli_opt(&sysroot, &target, early_dcx, s)) .collect(); let show_coverage = matches.opt_present("show-coverage");