about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBen Kimock <kimockb@gmail.com>2024-05-11 15:24:03 -0400
committerBen Kimock <kimockb@gmail.com>2024-05-12 14:31:22 -0400
commitcd7527aa35f3eca2fa00a6d21cdeb9c56de1f480 (patch)
treebe6495eab6e4448a121fde9dc79feca5893a8c35
parent32b22381749163da5a413283561c5c6509c538b4 (diff)
downloadrust-cd7527aa35f3eca2fa00a6d21cdeb9c56de1f480.tar.gz
rust-cd7527aa35f3eca2fa00a6d21cdeb9c56de1f480.zip
Don't print unnecessary sysroot messages
-rw-r--r--src/tools/miri/cargo-miri/Cargo.lock4
-rw-r--r--src/tools/miri/cargo-miri/Cargo.toml2
-rw-r--r--src/tools/miri/cargo-miri/src/setup.rs50
3 files changed, 35 insertions, 21 deletions
diff --git a/src/tools/miri/cargo-miri/Cargo.lock b/src/tools/miri/cargo-miri/Cargo.lock
index b8ead460249..7d965dce07d 100644
--- a/src/tools/miri/cargo-miri/Cargo.lock
+++ b/src/tools/miri/cargo-miri/Cargo.lock
@@ -178,9 +178,9 @@ dependencies = [
 
 [[package]]
 name = "rustc-build-sysroot"
-version = "0.4.7"
+version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ab1dbbd1bdf65fdac44c885f6cca147ba179108ce284b60a08ccc04b1f1dbac0"
+checksum = "de6077473f0c46779b49e4587a81f1b8919e0ec26630409ecfda0ba3259efb43"
 dependencies = [
  "anyhow",
  "rustc_version",
diff --git a/src/tools/miri/cargo-miri/Cargo.toml b/src/tools/miri/cargo-miri/Cargo.toml
index b16068b6d19..a68854de625 100644
--- a/src/tools/miri/cargo-miri/Cargo.toml
+++ b/src/tools/miri/cargo-miri/Cargo.toml
@@ -18,7 +18,7 @@ directories = "5"
 rustc_version = "0.4"
 serde_json = "1.0.40"
 cargo_metadata = "0.18.0"
-rustc-build-sysroot = "0.4.6"
+rustc-build-sysroot = "0.5.0"
 
 # Enable some feature flags that dev-dependencies need but dependencies
 # do not.  This makes `./miri install` after `./miri build` faster.
diff --git a/src/tools/miri/cargo-miri/src/setup.rs b/src/tools/miri/cargo-miri/src/setup.rs
index 9a58e6fa018..508d3045365 100644
--- a/src/tools/miri/cargo-miri/src/setup.rs
+++ b/src/tools/miri/cargo-miri/src/setup.rs
@@ -6,7 +6,7 @@ use std::fmt::Write;
 use std::path::PathBuf;
 use std::process::{self, Command};
 
-use rustc_build_sysroot::{BuildMode, SysrootBuilder, SysrootConfig};
+use rustc_build_sysroot::{BuildMode, SysrootBuilder, SysrootConfig, SysrootStatus};
 use rustc_version::VersionMeta;
 
 use crate::util::*;
@@ -137,32 +137,52 @@ pub fn setup(
     // not apply `RUSTFLAGS` to the sysroot either.
     let rustflags = &["-Cdebug-assertions=off", "-Coverflow-checks=on"];
 
-    // Do the build.
-    if print_sysroot || quiet {
-        // Be silent.
-    } else {
+    let notify = || {
         let mut msg = String::new();
         write!(msg, "Preparing a sysroot for Miri (target: {target})").unwrap();
         if verbose > 0 {
             write!(msg, " in {}", sysroot_dir.display()).unwrap();
         }
         write!(msg, "...").unwrap();
-        if only_setup {
+
+        if print_sysroot || quiet {
+            // Be silent.
+        } else if only_setup {
             // We want to be explicit.
             eprintln!("{msg}");
         } else {
             // We want to be quiet, but still let the user know that something is happening.
             eprint!("{msg} ");
         }
-    }
-    SysrootBuilder::new(&sysroot_dir, target)
+    };
+
+    // Do the build.
+    let status = SysrootBuilder::new(&sysroot_dir, target)
         .build_mode(BuildMode::Check)
         .rustc_version(rustc_version.clone())
         .sysroot_config(sysroot_config)
         .rustflags(rustflags)
         .cargo(cargo_cmd)
-        .build_from_source(&rust_src)
-        .unwrap_or_else(|err| {
+        .when_build_required(notify)
+        .build_from_source(&rust_src);
+    match status {
+        Ok(SysrootStatus::AlreadyCached) =>
+            if only_setup && !(print_sysroot || quiet) {
+                eprintln!(
+                    "A sysroot for Miri is already available in `{}`.",
+                    sysroot_dir.display()
+                );
+            },
+        Ok(SysrootStatus::SysrootBuilt) => {
+            if print_sysroot || quiet {
+                // Be silent.
+            } else if only_setup {
+                eprintln!("A sysroot for Miri is now available in `{}`.", sysroot_dir.display());
+            } else {
+                eprintln!("done");
+            }
+        }
+        Err(err) =>
             if print_sysroot {
                 show_error!("failed to build sysroot")
             } else if only_setup {
@@ -171,15 +191,9 @@ pub fn setup(
                 show_error!(
                     "failed to build sysroot; run `cargo miri setup` to see the error details"
                 )
-            }
-        });
-    if print_sysroot || quiet {
-        // Be silent.
-    } else if only_setup {
-        eprintln!("A sysroot for Miri is now available in `{}`.", sysroot_dir.display());
-    } else {
-        eprintln!("done");
+            },
     }
+
     if print_sysroot {
         // Print just the sysroot and nothing else to stdout; this way we do not need any escaping.
         println!("{}", sysroot_dir.display());