From 2ac5010694ca140b6bfd7e5225794e844a67e93a Mon Sep 17 00:00:00 2001 From: Rust Maintainers Date: Wed, 7 Mar 2018 19:07:27 +0000 Subject: [PATCH] u-rust-pr46592-bootstrap-libdir commit 6cf081c8c54e92702f350fa30d77561540324401 (from 6eff103aa1f93cbc07b1e5684e695635993c9752) Merge: 6eff103aa1f9 472f4e1cc8c3 Author: bors Date: Sat Jan 13 05:02:04 2018 +0000 Auto merge of #46592 - o01eg:fix-45345, r=alexcrichton Fix 45345 There is a fix for https://github.com/rust-lang/rust/issues/45345 It re-introduces `CFG_LIBDIR_RELATIVE` which was broken when migration from `configure` script to `x.py`. Other commits fix errors which happen after rustbuild cleanups. Gbp-Pq: Name u-rust-pr46592-bootstrap-libdir.patch --- src/bootstrap/bin/rustdoc.rs | 13 ++++++++++++- src/bootstrap/builder.rs | 9 ++++++--- src/bootstrap/check.rs | 2 +- src/bootstrap/compile.rs | 13 ++++--------- src/bootstrap/config.rs | 1 - src/bootstrap/doc.rs | 2 +- 6 files changed, 24 insertions(+), 16 deletions(-) diff --git a/src/bootstrap/bin/rustdoc.rs b/src/bootstrap/bin/rustdoc.rs index 620375908..389b504c6 100644 --- a/src/bootstrap/bin/rustdoc.rs +++ b/src/bootstrap/bin/rustdoc.rs @@ -23,10 +23,17 @@ use std::path::PathBuf; fn main() { let args = env::args_os().skip(1).collect::>(); let rustdoc = env::var_os("RUSTDOC_REAL").expect("RUSTDOC_REAL was not set"); - let libdir = env::var_os("RUSTC_LIBDIR").expect("RUSTC_LIBDIR was not set"); + let libdir = env::var_os("RUSTDOC_LIBDIR").expect("RUSTDOC_LIBDIR was not set"); let stage = env::var("RUSTC_STAGE").expect("RUSTC_STAGE was not set"); let sysroot = env::var_os("RUSTC_SYSROOT").expect("RUSTC_SYSROOT was not set"); + use std::str::FromStr; + + let verbose = match env::var("RUSTC_VERBOSE") { + Ok(s) => usize::from_str(&s).expect("RUSTC_VERBOSE should be an integer"), + Err(_) => 0, + }; + let mut dylib_path = bootstrap::util::dylib_path(); dylib_path.insert(0, PathBuf::from(libdir)); @@ -63,6 +70,10 @@ fn main() { cmd.arg("--deny-render-differences"); } + if verbose > 1 { + eprintln!("rustdoc command: {:?}", cmd); + } + std::process::exit(match cmd.status() { Ok(s) => s.code().unwrap_or(1), Err(e) => panic!("\n\nfailed to run {:?}: {}\n\n", cmd, e), diff --git a/src/bootstrap/builder.rs b/src/bootstrap/builder.rs index ce30d1f4c..a660b5cf8 100644 --- a/src/bootstrap/builder.rs +++ b/src/bootstrap/builder.rs @@ -357,8 +357,8 @@ impl<'a> Builder<'a> { fn run(self, builder: &Builder) -> Interned { let compiler = self.compiler; - let lib = if compiler.stage >= 2 && builder.build.config.libdir_relative.is_some() { - builder.build.config.libdir_relative.clone().unwrap() + let lib = if compiler.stage >= 1 && builder.build.config.libdir.is_some() { + builder.build.config.libdir.clone().unwrap() } else { PathBuf::from("lib") }; @@ -416,7 +416,7 @@ impl<'a> Builder<'a> { let compiler = self.compiler(self.top_stage, host); cmd.env("RUSTC_STAGE", compiler.stage.to_string()) .env("RUSTC_SYSROOT", self.sysroot(compiler)) - .env("RUSTC_LIBDIR", self.sysroot_libdir(compiler, self.build.build)) + .env("RUSTDOC_LIBDIR", self.sysroot_libdir(compiler, self.build.build)) .env("CFG_RELEASE_CHANNEL", &self.build.config.channel) .env("RUSTDOC_REAL", self.rustdoc(host)) .env("RUSTDOC_CRATE_VERSION", self.build.rust_version()) @@ -496,6 +496,9 @@ impl<'a> Builder<'a> { if let Some(target_linker) = self.build.linker(target) { cargo.env("RUSTC_TARGET_LINKER", target_linker); } + if cmd != "build" { + cargo.env("RUSTDOC_LIBDIR", self.rustc_libdir(self.compiler(2, self.build.build))); + } if mode != Mode::Tool { // Tools don't get debuginfo right now, e.g. cargo and rls don't diff --git a/src/bootstrap/check.rs b/src/bootstrap/check.rs index e4fbae3ff..ecaf4d0c0 100644 --- a/src/bootstrap/check.rs +++ b/src/bootstrap/check.rs @@ -1171,7 +1171,7 @@ impl Step for Crate { } Mode::Librustc => { builder.ensure(compile::Rustc { compiler, target }); - compile::rustc_cargo(build, &compiler, target, &mut cargo); + compile::rustc_cargo(build, target, &mut cargo); ("librustc", "rustc-main") } _ => panic!("can only test libraries"), diff --git a/src/bootstrap/compile.rs b/src/bootstrap/compile.rs index c8e500a4f..c6adfc7ff 100644 --- a/src/bootstrap/compile.rs +++ b/src/bootstrap/compile.rs @@ -485,7 +485,7 @@ impl Step for Rustc { build.clear_if_dirty(&stage_out, &libtest_stamp(build, compiler, target)); let mut cargo = builder.cargo(compiler, Mode::Librustc, target, "build"); - rustc_cargo(build, &compiler, target, &mut cargo); + rustc_cargo(build, target, &mut cargo); run_cargo(build, &mut cargo, &librustc_stamp(build, compiler, target)); @@ -500,7 +500,6 @@ impl Step for Rustc { /// Same as `std_cargo`, but for libtest pub fn rustc_cargo(build: &Build, - compiler: &Compiler, target: Interned, cargo: &mut Command) { cargo.arg("--features").arg(build.rustc_features()) @@ -514,13 +513,9 @@ pub fn rustc_cargo(build: &Build, .env("CFG_VERSION", build.rust_version()) .env("CFG_PREFIX", build.config.prefix.clone().unwrap_or_default()); - if compiler.stage == 0 { - cargo.env("CFG_LIBDIR_RELATIVE", "lib"); - } else { - let libdir_relative = - build.config.libdir_relative.clone().unwrap_or(PathBuf::from("lib")); - cargo.env("CFG_LIBDIR_RELATIVE", libdir_relative); - } + let libdir_relative = + build.config.libdir.clone().unwrap_or(PathBuf::from("lib")); + cargo.env("CFG_LIBDIR_RELATIVE", libdir_relative); // If we're not building a compiler with debugging information then remove // these two env vars which would be set otherwise. diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs index f3ffe9a27..72e75fddc 100644 --- a/src/bootstrap/config.rs +++ b/src/bootstrap/config.rs @@ -121,7 +121,6 @@ pub struct Config { pub docdir: Option, pub bindir: Option, pub libdir: Option, - pub libdir_relative: Option, pub mandir: Option, pub codegen_tests: bool, pub nodejs: Option, diff --git a/src/bootstrap/doc.rs b/src/bootstrap/doc.rs index 832da24c9..178d60dd7 100644 --- a/src/bootstrap/doc.rs +++ b/src/bootstrap/doc.rs @@ -616,7 +616,7 @@ impl Step for Rustc { t!(symlink_dir_force(&my_out, &out_dir)); let mut cargo = builder.cargo(compiler, Mode::Librustc, target, "doc"); - compile::rustc_cargo(build, &compiler, target, &mut cargo); + compile::rustc_cargo(build, target, &mut cargo); if build.config.compiler_docs { // src/rustc/Cargo.toml contains a bin crate called rustc which