diff --git a/0001-rustc-Don-t-use-relative-paths-for-extended-errors.patch b/0001-rustc-Don-t-use-relative-paths-for-extended-errors.patch new file mode 100644 index 0000000..572ba2d --- /dev/null +++ b/0001-rustc-Don-t-use-relative-paths-for-extended-errors.patch @@ -0,0 +1,115 @@ +From b445a52ea322758fb7b60fab5f890ef8c0f8df9c Mon Sep 17 00:00:00 2001 +From: Alex Crichton +Date: Tue, 2 Jan 2018 16:21:35 -0800 +Subject: [PATCH] rustc: Don't use relative paths for extended errors + +These no longer work now that Cargo changes the cwd of rustc while it's running. +Instead use an absolute path that's set by rustbuild. +--- + src/bootstrap/builder.rs | 4 ++-- + src/bootstrap/check.rs | 3 ++- + src/bootstrap/doc.rs | 3 ++- + src/bootstrap/lib.rs | 5 +++++ + src/libsyntax/diagnostics/metadata.rs | 11 ++++++----- + 5 files changed, 17 insertions(+), 9 deletions(-) + +diff --git a/src/bootstrap/builder.rs b/src/bootstrap/builder.rs +index 16de31406f84..ce30d1f4cec4 100644 +--- a/src/bootstrap/builder.rs ++++ b/src/bootstrap/builder.rs +@@ -484,8 +484,8 @@ impl<'a> Builder<'a> { + } else { + PathBuf::from("/path/to/nowhere/rustdoc/not/required") + }) +- .env("TEST_MIRI", self.config.test_miri.to_string()); +- ++ .env("TEST_MIRI", self.config.test_miri.to_string()) ++ .env("RUSTC_ERROR_METADATA_DST", self.extended_error_dir()); + if let Some(n) = self.config.rust_codegen_units { + cargo.env("RUSTC_CODEGEN_UNITS", n.to_string()); + } +diff --git a/src/bootstrap/check.rs b/src/bootstrap/check.rs +index 48b3d356985c..e4fbae3ff0d8 100644 +--- a/src/bootstrap/check.rs ++++ b/src/bootstrap/check.rs +@@ -980,7 +980,8 @@ impl Step for ErrorIndex { + build.run(builder.tool_cmd(Tool::ErrorIndex) + .arg("markdown") + .arg(&output) +- .env("CFG_BUILD", &build.build)); ++ .env("CFG_BUILD", &build.build) ++ .env("RUSTC_ERROR_METADATA_DST", build.extended_error_dir())); + + markdown_test(builder, compiler, &output); + } +diff --git a/src/bootstrap/doc.rs b/src/bootstrap/doc.rs +index 3c12cfc4c7ff..832da24c994d 100644 +--- a/src/bootstrap/doc.rs ++++ b/src/bootstrap/doc.rs +@@ -671,7 +671,8 @@ impl Step for ErrorIndex { + index.arg(out.join("error-index.html")); + + // FIXME: shouldn't have to pass this env var +- index.env("CFG_BUILD", &build.build); ++ index.env("CFG_BUILD", &build.build) ++ .env("RUSTC_ERROR_METADATA_DST", build.extended_error_dir()); + + build.run(&mut index); + } +diff --git a/src/bootstrap/lib.rs b/src/bootstrap/lib.rs +index 63a9c3ab905d..52767b403e4e 100644 +--- a/src/bootstrap/lib.rs ++++ b/src/bootstrap/lib.rs +@@ -721,6 +721,11 @@ impl Build { + self.config.python.as_ref().unwrap() + } + ++ /// Temporary directory that extended error information is emitted to. ++ fn extended_error_dir(&self) -> PathBuf { ++ self.out.join("tmp/extended-error-metadata") ++ } ++ + /// Tests whether the `compiler` compiling for `target` should be forced to + /// use a stage1 compiler instead. + /// +diff --git a/src/libsyntax/diagnostics/metadata.rs b/src/libsyntax/diagnostics/metadata.rs +index 5f06475919fe..dc01a79190b3 100644 +--- a/src/libsyntax/diagnostics/metadata.rs ++++ b/src/libsyntax/diagnostics/metadata.rs +@@ -14,9 +14,10 @@ + //! currently always a crate name. + + use std::collections::BTreeMap; +-use std::path::PathBuf; ++use std::env; + use std::fs::{remove_file, create_dir_all, File}; + use std::io::Write; ++use std::path::PathBuf; + use std::error::Error; + use rustc_serialize::json::as_json; + +@@ -24,9 +25,6 @@ use syntax_pos::{Span, FileName}; + use ext::base::ExtCtxt; + use diagnostics::plugin::{ErrorMap, ErrorInfo}; + +-// Default metadata directory to use for extended error JSON. +-const ERROR_METADATA_PREFIX: &'static str = "tmp/extended-errors"; +- + /// JSON encodable/decodable version of `ErrorInfo`. + #[derive(PartialEq, RustcDecodable, RustcEncodable)] + pub struct ErrorMetadata { +@@ -59,7 +57,10 @@ impl ErrorLocation { + /// + /// See `output_metadata`. + pub fn get_metadata_dir(prefix: &str) -> PathBuf { +- PathBuf::from(ERROR_METADATA_PREFIX).join(prefix) ++ env::var_os("RUSTC_ERROR_METADATA_DST") ++ .map(PathBuf::from) ++ .expect("env var `RUSTC_ERROR_METADATA_DST` isn't set") ++ .join(prefix) + } + + /// Map `name` to a path in the given directory: /.json +-- +2.14.3 + diff --git a/rust.spec b/rust.spec index ed4cca2..272da7a 100644 --- a/rust.spec +++ b/rust.spec @@ -48,7 +48,7 @@ Name: rust Version: 1.24.0 -Release: 2%{?dist} +Release: 3%{?dist} Summary: The Rust Programming Language License: (ASL 2.0 or MIT) and (BSD and ISC and MIT) # ^ written as: (rust itself) and (bundled libraries) @@ -83,6 +83,9 @@ Patch6: 0002-Use-a-range-to-identify-SIGSEGV-in-stack-guards.patch Patch7: rust-pr46592-bootstrap-libdir.patch Patch8: rust-pr48362-libdir-relative.patch +# https://github.com/rust-lang/rust/issues/48308 +Patch9: 0001-rustc-Don-t-use-relative-paths-for-extended-errors.patch + # Get the Rust triple for any arch. %{lua: function rust_triple(arch) local abi = "gnu" @@ -317,6 +320,7 @@ popd %patch6 -p1 -b .out-of-stack %patch7 -p1 -b .bootstrap-libdir %patch8 -p1 -b .bootstrap-libdir-relative +%patch9 -p1 -b .absolute-extended-errors %if "%{python}" == "python3" sed -i.try-py3 -e '/try python2.7/i try python3 "$@"' ./configure @@ -518,6 +522,9 @@ rm -f %{buildroot}%{rustlibdir}/etc/lldb_*.py* %changelog +* Wed Feb 21 2018 Josh Stone - 1.24.0-3 +- Backport a rebuild fix for rust#48308. + * Mon Feb 19 2018 Josh Stone - 1.24.0-2 - rhbz1546541: drop full-bootstrap; cmp libs before symlinking. - Backport pr46592 to fix local_rebuild bootstrapping.