about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDylan DPC <99973273+Dylan-DPC@users.noreply.github.com>2022-04-05 09:33:21 +0200
committerGitHub <noreply@github.com>2022-04-05 09:33:21 +0200
commit73eab351093a16637298fc501ded798d26419d73 (patch)
tree297d6b49a2eb4bf83b7941cee299be8fdef1dc32
parentb7047c2bc2752f0e0f6763b9a771eda53677124a (diff)
parent064a55952eaa0fddb01aa52740707f3e0d4c7e23 (diff)
downloadrust-73eab351093a16637298fc501ded798d26419d73.tar.gz
rust-73eab351093a16637298fc501ded798d26419d73.zip
Rollup merge of #95449 - jyn514:doc-stage-0, r=ehuss
Fix `x doc --stage 0 compiler`

Eric figured out the fix to this almost 2 years ago, I just didn't read his comment carefully enough at the timme.
The issue was that fake rustc and fake rustdoc were inconsistent about when they passed `--sysroot` to the real compiler.
Change them to consistently only pass it when `--target` is present.

cc https://github.com/rust-lang/rust/issues/74976#issuecomment-667265945
Fixes https://github.com/rust-lang/rust/issues/79980

r? ``@ehuss``
-rw-r--r--src/bootstrap/bin/rustdoc.rs20
1 files changed, 16 insertions, 4 deletions
diff --git a/src/bootstrap/bin/rustdoc.rs b/src/bootstrap/bin/rustdoc.rs
index ad3800834b0..4bba2eb4507 100644
--- a/src/bootstrap/bin/rustdoc.rs
+++ b/src/bootstrap/bin/rustdoc.rs
@@ -15,6 +15,10 @@ fn main() {
     let libdir = env::var_os("RUSTDOC_LIBDIR").expect("RUSTDOC_LIBDIR was not set");
     let sysroot = env::var_os("RUSTC_SYSROOT").expect("RUSTC_SYSROOT was not set");
 
+    // Detect whether or not we're a build script depending on whether --target
+    // is passed (a bit janky...)
+    let target = args.windows(2).find(|w| &*w[0] == "--target").and_then(|w| w[1].to_str());
+
     use std::str::FromStr;
 
     let verbose = match env::var("RUSTC_VERBOSE") {
@@ -26,10 +30,18 @@ fn main() {
     dylib_path.insert(0, PathBuf::from(libdir.clone()));
 
     let mut cmd = Command::new(rustdoc);
-    cmd.args(&args)
-        .arg("--sysroot")
-        .arg(&sysroot)
-        .env(dylib_path_var(), env::join_paths(&dylib_path).unwrap());
+
+    if target.is_some() {
+        // The stage0 compiler has a special sysroot distinct from what we
+        // actually downloaded, so we just always pass the `--sysroot` option,
+        // unless one is already set.
+        if !args.iter().any(|arg| arg == "--sysroot") {
+            cmd.arg("--sysroot").arg(&sysroot);
+        }
+    }
+
+    cmd.args(&args);
+    cmd.env(dylib_path_var(), env::join_paths(&dylib_path).unwrap());
 
     // Force all crates compiled by this compiler to (a) be unstable and (b)
     // allow the `rustc_private` feature to link to other unstable crates