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.
This commit is contained in:
Alex Crichton 2018-01-02 16:21:35 -08:00
parent 53fd0c50d8
commit 8c9bf663d4
17 changed files with 36 additions and 9 deletions

View File

@ -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());
}

View File

@ -975,7 +975,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);
}

View File

@ -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);
}

View File

@ -718,6 +718,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.
///

View File

@ -175,4 +175,5 @@ fn noop() {
// Build the diagnostics array at the end so that the metadata includes error use sites.
#[cfg(not(stage0))] // remove after the next snapshot
__build_diagnostic_array! { librustc, DIAGNOSTICS }

View File

@ -56,4 +56,5 @@ pub fn provide(providers: &mut Providers) {
}
// Build the diagnostics array at the end so that the metadata includes error use sites.
#[cfg(not(stage0))] // remove after the next snapshot
__build_diagnostic_array! { librustc_const_eval, DIAGNOSTICS }

View File

@ -1268,6 +1268,14 @@ fn exit_on_err() -> ! {
panic!();
}
#[cfg(stage0)]
pub fn diagnostics_registry() -> errors::registry::Registry {
use errors::registry::Registry;
Registry::new(&[])
}
#[cfg(not(stage0))]
pub fn diagnostics_registry() -> errors::registry::Registry {
use errors::registry::Registry;

View File

@ -58,4 +58,5 @@ pub mod cstore;
pub mod dynamic_lib;
pub mod locator;
#[cfg(not(stage0))] // remove after the next snapshot
__build_diagnostic_array! { librustc_metadata, DIAGNOSTICS }

View File

@ -79,4 +79,5 @@ pub fn provide(providers: &mut Providers) {
providers.const_eval = interpret::const_eval_provider;
}
#[cfg(not(stage0))] // remove after the next snapshot
__build_diagnostic_array! { librustc_mir, DIAGNOSTICS }

View File

@ -45,6 +45,7 @@ mod mir_stats;
pub mod no_asm;
pub mod static_recursion;
#[cfg(not(stage0))] // remove after the next snapshot
__build_diagnostic_array! { librustc_passes, DIAGNOSTICS }
pub fn provide(providers: &mut Providers) {

View File

@ -82,4 +82,5 @@ pub mod registry;
pub mod load;
pub mod build;
#[cfg(not(stage0))] // remove after the next snapshot
__build_diagnostic_array! { librustc_plugin, DIAGNOSTICS }

View File

@ -1725,4 +1725,5 @@ fn privacy_access_levels<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
Rc::new(visitor.access_levels)
}
#[cfg(not(stage0))] // remove after the next snapshot
__build_diagnostic_array! { librustc_privacy, DIAGNOSTICS }

View File

@ -4089,4 +4089,5 @@ pub enum MakeGlobMap {
No,
}
#[cfg(not(stage0))] // remove after the next snapshot
__build_diagnostic_array! { librustc_resolve, DIAGNOSTICS }

View File

@ -328,4 +328,5 @@ pub struct CrateInfo {
used_crates_dynamic: Vec<(CrateNum, LibSource)>,
}
#[cfg(not(stage0))] // remove after the next snapshot
__build_diagnostic_array! { librustc_trans, DIAGNOSTICS }

View File

@ -380,4 +380,5 @@ pub fn hir_trait_to_predicates<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, hir_trait:
(principal, projections)
}
#[cfg(not(stage0))] // remove after the next snapshot
__build_diagnostic_array! { librustc_typeck, DIAGNOSTICS }

View File

@ -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: <directory>/<name>.json

View File

@ -151,4 +151,5 @@ pub mod ext {
#[cfg(test)]
mod test_snippet;
#[cfg(not(stage0))] // remove after the next snapshot
__build_diagnostic_array! { libsyntax, DIAGNOSTICS }