From 53254a888b424b02b1daaedfae63acb4e3231912 Mon Sep 17 00:00:00 2001 From: Christian Poveda Date: Fri, 28 Sep 2018 00:19:56 -0500 Subject: [PATCH] Add enable-missing-tools option --- src/bootstrap/config.rs | 2 ++ src/bootstrap/configure.py | 1 + src/bootstrap/dist.rs | 18 +++++++++++++----- src/ci/run.sh | 4 ++++ 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs index 3a4bc526d03bf..ba2be29e45932 100644 --- a/src/bootstrap/config.rs +++ b/src/bootstrap/config.rs @@ -134,6 +134,7 @@ pub struct Config { pub test_miri: bool, pub save_toolstates: Option, pub print_step_timings: bool, + pub missing_tools: bool, // Fallback musl-root for all targets pub musl_root: Option, @@ -375,6 +376,7 @@ impl Config { config.rust_codegen_backends = vec![INTERNER.intern_str("llvm")]; config.rust_codegen_backends_dir = "codegen-backends".to_owned(); config.deny_warnings = true; + config.missing_tools = false; // set by bootstrap.py config.build = INTERNER.intern_str(&env::var("BUILD").expect("'BUILD' to be set")); diff --git a/src/bootstrap/configure.py b/src/bootstrap/configure.py index 75831dbe262ae..3b8af5061cb3b 100755 --- a/src/bootstrap/configure.py +++ b/src/bootstrap/configure.py @@ -69,6 +69,7 @@ def v(*args): o("emscripten", None, "compile the emscripten backend as well as LLVM") o("full-tools", None, "enable all tools") o("lldb", "rust.lldb", "build lldb") +o("enable-missing-tools", "build.missing-tools", "allow failures when building tools") # Optimization and debugging options. These may be overridden by the release # channel, etc. diff --git a/src/bootstrap/dist.rs b/src/bootstrap/dist.rs index 2d94704fda7d6..c25f94357f24c 100644 --- a/src/bootstrap/dist.rs +++ b/src/bootstrap/dist.rs @@ -67,6 +67,14 @@ fn rust_installer(builder: &Builder) -> Command { builder.tool_cmd(Tool::RustInstaller) } +fn missing_tool(tool_name: &str, skip: bool) { + if skip { + println!("Unable to build {}, skipping dist", tool_name) + } else { + panic!("Unable to build {}", tool_name) + } +} + #[derive(Debug, PartialOrd, Ord, Copy, Clone, Hash, PartialEq, Eq)] pub struct Docs { pub stage: u32, @@ -1166,7 +1174,7 @@ impl Step for Rls { let rls = builder.ensure(tool::Rls { compiler: builder.compiler(stage, builder.config.build), target, extra_features: Vec::new() - }).or_else(|| { println!("Unable to build RLS, skipping dist"); None })?; + }).or_else(|| { missing_tool("RLS", builder.build.config.missing_tools); None })?; builder.install(&rls, &image.join("bin"), 0o755); let doc = image.join("share/doc/rls"); @@ -1245,11 +1253,11 @@ impl Step for Clippy { let clippy = builder.ensure(tool::Clippy { compiler: builder.compiler(stage, builder.config.build), target, extra_features: Vec::new() - }).or_else(|| { println!("Unable to build clippy, skipping dist"); None })?; + }).or_else(|| { missing_tool("clippy", builder.build.config.missing_tools); None })?; let cargoclippy = builder.ensure(tool::CargoClippy { compiler: builder.compiler(stage, builder.config.build), target, extra_features: Vec::new() - }).or_else(|| { println!("Unable to build cargo clippy, skipping dist"); None })?; + }).or_else(|| { missing_tool("cargo clippy", builder.build.config.missing_tools); None })?; builder.install(&clippy, &image.join("bin"), 0o755); builder.install(&cargoclippy, &image.join("bin"), 0o755); @@ -1324,11 +1332,11 @@ impl Step for Rustfmt { let rustfmt = builder.ensure(tool::Rustfmt { compiler: builder.compiler(stage, builder.config.build), target, extra_features: Vec::new() - }).or_else(|| { println!("Unable to build Rustfmt, skipping dist"); None })?; + }).or_else(|| { missing_tool("Rustfmt", builder.build.config.missing_tools); None })?; let cargofmt = builder.ensure(tool::Cargofmt { compiler: builder.compiler(stage, builder.config.build), target, extra_features: Vec::new() - }).or_else(|| { println!("Unable to build Cargofmt, skipping dist"); None })?; + }).or_else(|| { missing_tool("Cargofmt", builder.build.config.missing_tools); None })?; builder.install(&rustfmt, &image.join("bin"), 0o755); builder.install(&cargofmt, &image.join("bin"), 0o755); diff --git a/src/ci/run.sh b/src/ci/run.sh index 6a571bfad135d..281f4f92a7fab 100755 --- a/src/ci/run.sh +++ b/src/ci/run.sh @@ -76,6 +76,10 @@ else fi fi +if [ "$RUST_RELEASE_CHANNEL" = "nightly" ] or [ "$DIST_REQUIRE_ALL_TOOLS" = "" ]; then + RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --enable-missing-tools" +fi + # We've had problems in the past of shell scripts leaking fds into the sccache # server (#48192) which causes Cargo to erroneously think that a build script # hasn't finished yet. Try to solve that problem by starting a very long-lived