about summary refs log tree commit diff
path: root/src/bootstrap
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2017-06-22 12:48:54 +0000
committerbors <bors@rust-lang.org>2017-06-22 12:48:54 +0000
commit74fa27928aceda1362a2266d9b9bf129999bc00a (patch)
treef6885a656b791f657e5ea561d732c91414a9621a /src/bootstrap
parent6f01c84fc8ae1b07d8165ceccb2e432f45a2ff1a (diff)
parent7f693e2cb9455fcfbe4de69236abc6a0ef98624b (diff)
downloadrust-74fa27928aceda1362a2266d9b9bf129999bc00a.tar.gz
rust-74fa27928aceda1362a2266d9b9bf129999bc00a.zip
Auto merge of #42824 - Mark-Simulacrum:rollup, r=Mark-Simulacrum
Rollup of 4 pull requests

- Successful merges: #42799, #42804, #42805, #42806
- Failed merges:
Diffstat (limited to 'src/bootstrap')
-rw-r--r--src/bootstrap/bin/rustc.rs9
-rw-r--r--src/bootstrap/bin/rustdoc.rs10
-rw-r--r--src/bootstrap/bootstrap.py1
-rw-r--r--src/bootstrap/compile.rs32
-rw-r--r--src/bootstrap/sanity.rs7
5 files changed, 54 insertions, 5 deletions
diff --git a/src/bootstrap/bin/rustc.rs b/src/bootstrap/bin/rustc.rs
index 12152fc4399..8c6eaee24f2 100644
--- a/src/bootstrap/bin/rustc.rs
+++ b/src/bootstrap/bin/rustc.rs
@@ -236,6 +236,15 @@ fn main() {
         }
     }
 
+    let color = match env::var("RUSTC_COLOR") {
+        Ok(s) => usize::from_str(&s).expect("RUSTC_COLOR should be an integer"),
+        Err(_) => 0,
+    };
+
+    if color != 0 {
+        cmd.arg("--color=always");
+    }
+
     if verbose > 1 {
         writeln!(&mut io::stderr(), "rustc command: {:?}", cmd).unwrap();
     }
diff --git a/src/bootstrap/bin/rustdoc.rs b/src/bootstrap/bin/rustdoc.rs
index 3a1a9c3e40d..d7d72d5dd56 100644
--- a/src/bootstrap/bin/rustdoc.rs
+++ b/src/bootstrap/bin/rustdoc.rs
@@ -41,11 +41,11 @@ fn main() {
         .env(bootstrap::util::dylib_path_var(),
              env::join_paths(&dylib_path).unwrap());
 
-    // Pass the `rustbuild` feature flag to crates which rustbuild is
-    // building. See the comment in bootstrap/lib.rs where this env var is
-    // set for more details.
-    if env::var_os("RUSTBUILD_UNSTABLE").is_some() {
-        cmd.arg("--cfg").arg("rustbuild");
+    // Force all crates compiled by this compiler to (a) be unstable and (b)
+    // allow the `rustc_private` feature to link to other unstable crates
+    // also in the sysroot.
+    if env::var_os("RUSTC_FORCE_UNSTABLE").is_some() {
+        cmd.arg("-Z").arg("force-unstable-if-unmarked");
     }
 
     std::process::exit(match cmd.status() {
diff --git a/src/bootstrap/bootstrap.py b/src/bootstrap/bootstrap.py
index 1d3b77916d6..8dc2875ec42 100644
--- a/src/bootstrap/bootstrap.py
+++ b/src/bootstrap/bootstrap.py
@@ -668,6 +668,7 @@ def bootstrap():
     env["BUILD"] = rb.build
     env["SRC"] = rb.rust_root
     env["BOOTSTRAP_PARENT_ID"] = str(os.getpid())
+    env["BOOTSTRAP_PYTHON"] = sys.executable
     run(args, env=env, verbose=rb.verbose)
 
 
diff --git a/src/bootstrap/compile.rs b/src/bootstrap/compile.rs
index 9a07e8a8b10..f92a199fa3f 100644
--- a/src/bootstrap/compile.rs
+++ b/src/bootstrap/compile.rs
@@ -477,11 +477,43 @@ pub fn tool(build: &Build, stage: u32, target: &str, tool: &str) {
     build.run(&mut cargo);
 }
 
+
+// Avoiding a dependency on winapi to keep compile times down
+#[cfg(unix)]
+fn stderr_isatty() -> bool {
+    use libc;
+    unsafe { libc::isatty(libc::STDERR_FILENO) != 0 }
+}
+#[cfg(windows)]
+fn stderr_isatty() -> bool {
+    type DWORD = u32;
+    type BOOL = i32;
+    type HANDLE = *mut u8;
+    const STD_ERROR_HANDLE: DWORD = -12i32 as DWORD;
+    extern "system" {
+        fn GetStdHandle(which: DWORD) -> HANDLE;
+        fn GetConsoleMode(hConsoleHandle: HANDLE, lpMode: *mut DWORD) -> BOOL;
+    }
+    unsafe {
+        let handle = GetStdHandle(STD_ERROR_HANDLE);
+        let mut out = 0;
+        GetConsoleMode(handle, &mut out) != 0
+    }
+}
+
 fn run_cargo(build: &Build, cargo: &mut Command, stamp: &Path) {
     // Instruct Cargo to give us json messages on stdout, critically leaving
     // stderr as piped so we can get those pretty colors.
     cargo.arg("--message-format").arg("json")
          .stdout(Stdio::piped());
+
+    if stderr_isatty() {
+        // since we pass message-format=json to cargo, we need to tell the rustc
+        // wrapper to give us colored output if necessary. This is because we
+        // only want Cargo's JSON output, not rustcs.
+        cargo.env("RUSTC_COLOR", "1");
+    }
+
     build.verbose(&format!("running: {:?}", cargo));
     let mut child = match cargo.spawn() {
         Ok(child) => child,
diff --git a/src/bootstrap/sanity.rs b/src/bootstrap/sanity.rs
index df6378a970b..5ccd131b77a 100644
--- a/src/bootstrap/sanity.rs
+++ b/src/bootstrap/sanity.rs
@@ -23,6 +23,7 @@ use std::env;
 use std::ffi::{OsStr, OsString};
 use std::fs;
 use std::process::Command;
+use std::path::PathBuf;
 
 use build_helper::output;
 
@@ -87,6 +88,12 @@ pub fn check(build: &mut Build) {
     }
 
     if build.config.python.is_none() {
+        // set by bootstrap.py
+        if let Some(v) = env::var_os("BOOTSTRAP_PYTHON") {
+            build.config.python = Some(PathBuf::from(v));
+        }
+    }
+    if build.config.python.is_none() {
         build.config.python = have_cmd("python2.7".as_ref());
     }
     if build.config.python.is_none() {