diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2016-03-08 13:42:32 -0800 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2016-03-08 13:44:14 -0800 |
| commit | 3e6fed3a7a3f783bf967f6c73455743848f31167 (patch) | |
| tree | 6baf0a53c21e5e239f64138adce104c422a1da5e | |
| parent | e9cb96a56ab6dc883703928825ec7587db74dc1e (diff) | |
| download | rust-3e6fed3a7a3f783bf967f6c73455743848f31167.tar.gz rust-3e6fed3a7a3f783bf967f6c73455743848f31167.zip | |
rustbuild: Add the error-index-generator
This adds a step and a rule for building the error index as part of rustbuild.
| -rw-r--r-- | mk/crates.mk | 2 | ||||
| -rw-r--r-- | src/bootstrap/build/doc.rs | 13 | ||||
| -rw-r--r-- | src/bootstrap/build/mod.rs | 7 | ||||
| -rw-r--r-- | src/bootstrap/build/step.rs | 9 | ||||
| -rw-r--r-- | src/tools/error_index_generator/Cargo.lock | 4 | ||||
| -rw-r--r-- | src/tools/error_index_generator/Cargo.toml | 8 | ||||
| -rw-r--r-- | src/tools/error_index_generator/main.rs (renamed from src/error_index_generator/main.rs) | 35 |
7 files changed, 61 insertions, 17 deletions
diff --git a/mk/crates.mk b/mk/crates.mk index f7fd74e8c9f..4099da59893 100644 --- a/mk/crates.mk +++ b/mk/crates.mk @@ -126,7 +126,7 @@ TOOL_SOURCE_compiletest := $(S)src/compiletest/compiletest.rs TOOL_SOURCE_rustdoc := $(S)src/driver/driver.rs TOOL_SOURCE_rustc := $(S)src/driver/driver.rs TOOL_SOURCE_rustbook := $(S)src/tools/rustbook/main.rs -TOOL_SOURCE_error_index_generator := $(S)src/error_index_generator/main.rs +TOOL_SOURCE_error_index_generator := $(S)src/tools/error_index_generator/main.rs ONLY_RLIB_core := 1 ONLY_RLIB_libc := 1 diff --git a/src/bootstrap/build/doc.rs b/src/bootstrap/build/doc.rs index ce79a605259..51bf752e06d 100644 --- a/src/bootstrap/build/doc.rs +++ b/src/bootstrap/build/doc.rs @@ -139,3 +139,16 @@ pub fn rustc(build: &Build, stage: u32, host: &str, out: &Path) { build.run(&mut cargo); cp_r(&out_dir, out) } + +pub fn error_index(build: &Build, stage: u32, host: &str, out: &Path) { + println!("Documenting stage{} error index ({})", stage, host); + let compiler = Compiler::new(stage, host); + let mut index = Command::new(build.tool(&compiler, "error_index_generator")); + index.arg("html"); + index.arg(out.join("error-index.html")); + + // FIXME: shouldn't have to pass this env var + index.env("CFG_BUILD", &build.config.build); + + build.run(&mut index); +} diff --git a/src/bootstrap/build/mod.rs b/src/bootstrap/build/mod.rs index b4fb67beaf9..058f27c33f6 100644 --- a/src/bootstrap/build/mod.rs +++ b/src/bootstrap/build/mod.rs @@ -178,6 +178,10 @@ impl Build { ToolRustbook { stage } => { compile::tool(self, stage, target.target, "rustbook"); } + ToolErrorIndex { stage } => { + compile::tool(self, stage, target.target, + "error_index_generator"); + } DocBook { stage } => { doc::rustbook(self, stage, target.target, "book", &doc_out); } @@ -198,6 +202,9 @@ impl Build { DocRustc { stage } => { doc::rustc(self, stage, target.target, &doc_out); } + DocErrorIndex { stage } => { + doc::error_index(self, stage, target.target, &doc_out); + } CheckLinkcheck { stage } => { check::linkcheck(self, stage, target.target); diff --git a/src/bootstrap/build/step.rs b/src/bootstrap/build/step.rs index 7921edcff55..720ba4fd209 100644 --- a/src/bootstrap/build/step.rs +++ b/src/bootstrap/build/step.rs @@ -48,6 +48,7 @@ macro_rules! targets { // Various tools that we can build as part of the build. (tool_linkchecker, ToolLinkchecker { stage: u32 }), (tool_rustbook, ToolRustbook { stage: u32 }), + (tool_error_index, ToolErrorIndex { stage: u32 }), // Steps for long-running native builds. Ideally these wouldn't // actually exist and would be part of build scripts, but for now @@ -68,6 +69,7 @@ macro_rules! targets { (doc_standalone, DocStandalone { stage: u32 }), (doc_std, DocStd { stage: u32 }), (doc_rustc, DocRustc { stage: u32 }), + (doc_error_index, DocErrorIndex { stage: u32 }), // Steps for running tests. The 'check' target is just a pseudo // target to depend on a bunch of others. @@ -265,6 +267,9 @@ impl<'a> Step<'a> { Source::DocStyle { stage } => { vec![self.tool_rustbook(stage)] } + Source::DocErrorIndex { stage } => { + vec![self.tool_error_index(stage)] + } Source::DocStandalone { stage } => { vec![self.rustc(stage)] } @@ -274,7 +279,8 @@ impl<'a> Step<'a> { Source::Doc { stage } => { vec![self.doc_book(stage), self.doc_nomicon(stage), self.doc_style(stage), self.doc_standalone(stage), - self.doc_std(stage)] + self.doc_std(stage), + self.doc_error_index(stage)] } Source::Check { stage, compiler: _ } => { vec![self.check_linkcheck(stage)] @@ -286,6 +292,7 @@ impl<'a> Step<'a> { Source::ToolLinkchecker { stage } => { vec![self.libstd(stage, self.compiler(stage))] } + Source::ToolErrorIndex { stage } | Source::ToolRustbook { stage } => { vec![self.librustc(stage, self.compiler(stage))] } diff --git a/src/tools/error_index_generator/Cargo.lock b/src/tools/error_index_generator/Cargo.lock new file mode 100644 index 00000000000..b7d2cfcaaa1 --- /dev/null +++ b/src/tools/error_index_generator/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "error_index_generator" +version = "0.0.0" + diff --git a/src/tools/error_index_generator/Cargo.toml b/src/tools/error_index_generator/Cargo.toml new file mode 100644 index 00000000000..5c5ca273e9c --- /dev/null +++ b/src/tools/error_index_generator/Cargo.toml @@ -0,0 +1,8 @@ +[package] +authors = ["The Rust Project Developers"] +name = "error_index_generator" +version = "0.0.0" + +[[bin]] +name = "error_index_generator" +path = "main.rs" diff --git a/src/error_index_generator/main.rs b/src/tools/error_index_generator/main.rs index db9dd006f3c..4343aef00a9 100644 --- a/src/error_index_generator/main.rs +++ b/src/tools/error_index_generator/main.rs @@ -15,11 +15,12 @@ extern crate rustdoc; extern crate serialize as rustc_serialize; use std::collections::BTreeMap; +use std::env; +use std::error::Error; use std::fs::{read_dir, File}; use std::io::{Read, Write}; -use std::env; use std::path::Path; -use std::error::Error; +use std::path::PathBuf; use syntax::diagnostics::metadata::{get_metadata_dir, ErrorMetadataMap, ErrorMetadata}; @@ -173,31 +174,35 @@ fn render_error_page<T: Formatter>(err_map: &ErrorMetadataMap, output_path: &Pat formatter.footer(&mut output_file) } -fn main_with_result(format: OutputFormat) -> Result<(), Box<Error>> { +fn main_with_result(format: OutputFormat, dst: &Path) -> Result<(), Box<Error>> { let build_arch = try!(env::var("CFG_BUILD")); let metadata_dir = get_metadata_dir(&build_arch); let err_map = try!(load_all_errors(&metadata_dir)); match format { OutputFormat::Unknown(s) => panic!("Unknown output format: {}", s), - OutputFormat::HTML(h) => try!(render_error_page(&err_map, - Path::new("doc/error-index.html"), - h)), - OutputFormat::Markdown(m) => try!(render_error_page(&err_map, - Path::new("doc/error-index.md"), - m)), + OutputFormat::HTML(h) => try!(render_error_page(&err_map, dst, h)), + OutputFormat::Markdown(m) => try!(render_error_page(&err_map, dst, m)), } Ok(()) } -fn parse_args() -> OutputFormat { - for arg in env::args().skip(1) { - return OutputFormat::from(&arg); - } - OutputFormat::from("html") +fn parse_args() -> (OutputFormat, PathBuf) { + let mut args = env::args().skip(1); + let format = args.next().map(|a| OutputFormat::from(&a)) + .unwrap_or(OutputFormat::from("html")); + let dst = args.next().map(PathBuf::from).unwrap_or_else(|| { + match format { + OutputFormat::HTML(..) => PathBuf::from("doc/error-index.html"), + OutputFormat::Markdown(..) => PathBuf::from("doc/error-index.md"), + OutputFormat::Unknown(..) => PathBuf::from("<nul>"), + } + }); + (format, dst) } fn main() { - if let Err(e) = main_with_result(parse_args()) { + let (format, dst) = parse_args(); + if let Err(e) = main_with_result(format, &dst) { panic!("{}", e.description()); } } |
