use std::collections::HashSet;
use std::fs;
use std::io;
-use std::path::{PathBuf, Path};
+use std::path::{Path, PathBuf};
use crate::Mode;
use build_helper::{t, up_to_date};
-use crate::util::symlink_dir;
use crate::builder::{Builder, Compiler, RunConfig, ShouldRun, Step};
-use crate::tool::{self, prepare_tool_cargo, Tool, SourceType};
+use crate::cache::{Interned, INTERNER};
use crate::compile;
-use crate::cache::{INTERNER, Interned};
use crate::config::Config;
+use crate::tool::{self, prepare_tool_cargo, SourceType, Tool};
+use crate::util::symlink_dir;
macro_rules! book {
($($name:ident, $path:expr, $book_name:expr;)+) => {
builder.ensure(RustbookSrc {
target: self.target,
name: INTERNER.intern_str($book_name),
- src: doc_src(builder),
+ src: INTERNER.intern_path(builder.src.join($path)),
})
}
}
// NOTE: When adding a book here, make sure to ALSO build the book by
// adding a build step in `src/bootstrap/builder.rs`!
book!(
+ CargoBook, "src/tools/cargo/src/doc", "cargo";
EditionGuide, "src/doc/edition-guide", "edition-guide";
EmbeddedBook, "src/doc/embedded-book", "embedded-book";
Nomicon, "src/doc/nomicon", "nomicon";
RustdocBook, "src/doc/rustdoc", "rustdoc";
);
-fn doc_src(builder: &Builder<'_>) -> Interned<PathBuf> {
- INTERNER.intern_path(builder.src.join("src/doc"))
-}
-
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
pub struct UnstableBook {
target: Interned<String>,
}
fn make_run(run: RunConfig<'_>) {
- run.builder.ensure(UnstableBook {
- target: run.target,
- });
+ run.builder.ensure(UnstableBook { target: run.target });
}
fn run(self, builder: &Builder<'_>) {
- builder.ensure(UnstableBookGen {
- target: self.target,
- });
+ builder.ensure(UnstableBookGen { target: self.target });
builder.ensure(RustbookSrc {
target: self.target,
name: INTERNER.intern_str("unstable-book"),
- src: builder.md_doc_out(self.target),
+ src: INTERNER.intern_path(builder.md_doc_out(self.target).join("unstable-book")),
})
}
}
-#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CargoBook {
- target: Interned<String>,
- name: Interned<String>,
-}
-
-impl Step for CargoBook {
- type Output = ();
- const DEFAULT: bool = true;
-
- fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> {
- let builder = run.builder;
- run.path("src/tools/cargo/src/doc/book").default_condition(builder.config.docs)
- }
-
- fn make_run(run: RunConfig<'_>) {
- run.builder.ensure(CargoBook {
- target: run.target,
- name: INTERNER.intern_str("cargo"),
- });
- }
-
- fn run(self, builder: &Builder<'_>) {
- let target = self.target;
- let name = self.name;
- let src = builder.src.join("src/tools/cargo/src/doc");
-
- let out = builder.doc_out(target);
- t!(fs::create_dir_all(&out));
-
- let out = out.join(name);
-
- builder.info(&format!("Cargo Book ({}) - {}", target, name));
-
- let _ = fs::remove_dir_all(&out);
-
- builder.run(builder.tool_cmd(Tool::Rustbook)
- .arg("build")
- .arg(&src)
- .arg("-d")
- .arg(out));
- }
-}
-
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
struct RustbookSrc {
target: Interned<String>,
t!(fs::create_dir_all(&out));
let out = out.join(name);
- let src = src.join(name);
let index = out.join("index.html");
let rustbook = builder.tool_exe(Tool::Rustbook);
let mut rustbook_cmd = builder.tool_cmd(Tool::Rustbook);
if up_to_date(&src, &index) && up_to_date(&rustbook, &index) {
- return
+ return;
}
builder.info(&format!("Rustbook ({}) - {}", target, name));
let _ = fs::remove_dir_all(&out);
- builder.run(rustbook_cmd
- .arg("build")
- .arg(&src)
- .arg("-d")
- .arg(out));
+ builder.run(rustbook_cmd.arg("build").arg(&src).arg("-d").arg(out));
}
}
pub struct TheBook {
compiler: Compiler,
target: Interned<String>,
- name: &'static str,
}
impl Step for TheBook {
run.builder.ensure(TheBook {
compiler: run.builder.compiler(run.builder.top_stage, run.builder.config.build),
target: run.target,
- name: "book",
});
}
///
/// We need to build:
///
- /// * Book (first edition)
- /// * Book (second edition)
+ /// * Book
+ /// * Older edition redirects
/// * Version info and CSS
/// * Index page
/// * Redirect pages
fn run(self, builder: &Builder<'_>) {
let compiler = self.compiler;
let target = self.target;
- let name = self.name;
// build book
builder.ensure(RustbookSrc {
target,
- name: INTERNER.intern_string(name.to_string()),
- src: doc_src(builder),
+ name: INTERNER.intern_str("book"),
+ src: INTERNER.intern_path(builder.src.join("src/doc/book")),
});
// building older edition redirects
-
- let source_name = format!("{}/first-edition", name);
- builder.ensure(RustbookSrc {
- target,
- name: INTERNER.intern_string(source_name),
- src: doc_src(builder),
- });
-
- let source_name = format!("{}/second-edition", name);
- builder.ensure(RustbookSrc {
- target,
- name: INTERNER.intern_string(source_name),
- src: doc_src(builder),
- });
-
- let source_name = format!("{}/2018-edition", name);
- builder.ensure(RustbookSrc {
- target,
- name: INTERNER.intern_string(source_name),
- src: doc_src(builder),
- });
+ for edition in &["first-edition", "second-edition", "2018-edition"] {
+ builder.ensure(RustbookSrc {
+ target,
+ name: INTERNER.intern_string(format!("book/{}", edition)),
+ src: INTERNER.intern_path(builder.src.join("src/doc/book").join(edition)),
+ });
+ }
// build the version info page and CSS
- builder.ensure(Standalone {
- compiler,
- target,
- });
+ builder.ensure(Standalone { compiler, target });
// build the redirect pages
builder.info(&format!("Documenting book redirect pages ({})", target));
let out = out.join("book");
- cmd.arg("--html-after-content").arg(&footer)
- .arg("--html-before-content").arg(&version_info)
- .arg("--html-in-header").arg(&header)
+ cmd.arg("--html-after-content")
+ .arg(&footer)
+ .arg("--html-before-content")
+ .arg(&version_info)
+ .arg("--html-in-header")
+ .arg(&header)
.arg("--markdown-no-toc")
- .arg("--markdown-playground-url").arg("https://play.rust-lang.org/")
- .arg("-o").arg(&out).arg(&path)
- .arg("--markdown-css").arg("../rust.css");
+ .arg("--markdown-playground-url")
+ .arg("https://play.rust-lang.org/")
+ .arg("-o")
+ .arg(&out)
+ .arg(&path)
+ .arg("--markdown-css")
+ .arg("../rust.css");
builder.run(&mut cmd);
}
let path = file.path();
let filename = path.file_name().unwrap().to_str().unwrap();
if !filename.ends_with(".md") || filename == "README.md" {
- continue
+ continue;
}
let html = out.join(filename).with_extension("html");
let rustdoc = builder.rustdoc(compiler);
- if up_to_date(&path, &html) &&
- up_to_date(&footer, &html) &&
- up_to_date(&favicon, &html) &&
- up_to_date(&full_toc, &html) &&
- (builder.config.dry_run || up_to_date(&version_info, &html)) &&
- (builder.config.dry_run || up_to_date(&rustdoc, &html)) {
- continue
+ if up_to_date(&path, &html)
+ && up_to_date(&footer, &html)
+ && up_to_date(&favicon, &html)
+ && up_to_date(&full_toc, &html)
+ && (builder.config.dry_run || up_to_date(&version_info, &html))
+ && (builder.config.dry_run || up_to_date(&rustdoc, &html))
+ {
+ continue;
}
let mut cmd = builder.rustdoc_cmd(compiler);
- cmd.arg("--html-after-content").arg(&footer)
- .arg("--html-before-content").arg(&version_info)
- .arg("--html-in-header").arg(&favicon)
- .arg("--markdown-no-toc")
- .arg("--index-page").arg(&builder.src.join("src/doc/index.md"))
- .arg("--markdown-playground-url").arg("https://play.rust-lang.org/")
- .arg("-o").arg(&out)
- .arg(&path);
+ cmd.arg("--html-after-content")
+ .arg(&footer)
+ .arg("--html-before-content")
+ .arg(&version_info)
+ .arg("--html-in-header")
+ .arg(&favicon)
+ .arg("--markdown-no-toc")
+ .arg("--index-page")
+ .arg(&builder.src.join("src/doc/index.md"))
+ .arg("--markdown-playground-url")
+ .arg("https://play.rust-lang.org/")
+ .arg("-o")
+ .arg(&out)
+ .arg(&path);
if filename == "not_found.md" {
- cmd.arg("--markdown-css")
- .arg("https://doc.rust-lang.org/rust.css");
+ cmd.arg("--markdown-css").arg("https://doc.rust-lang.org/rust.css");
} else {
cmd.arg("--markdown-css").arg("rust.css");
}
}
fn make_run(run: RunConfig<'_>) {
- run.builder.ensure(Std {
- stage: run.builder.top_stage,
- target: run.target
- });
+ run.builder.ensure(Std { stage: run.builder.top_stage, target: run.target });
}
/// Compile all standard library documentation.
let compiler = builder.compiler(stage, builder.config.build);
builder.ensure(compile::Std { compiler, target });
- let out_dir = builder.stage_out(compiler, Mode::Std)
- .join(target).join("doc");
+ let out_dir = builder.stage_out(compiler, Mode::Std).join(target).join("doc");
// Here what we're doing is creating a *symlink* (directory junction on
// Windows) to the final output location. This is not done as an
let run_cargo_rustdoc_for = |package: &str| {
let mut cargo = builder.cargo(compiler, Mode::Std, target, "rustdoc");
- compile::std_cargo(builder, &compiler, target, &mut cargo);
+ compile::std_cargo(builder, target, &mut cargo);
// Keep a whitelist so we do not build internal stdlib crates, these will be
// build by the rustc step later if enabled.
- cargo.arg("-Z").arg("unstable-options")
- .arg("-p").arg(package);
+ cargo.arg("-Z").arg("unstable-options").arg("-p").arg(package);
// Create all crate output directories first to make sure rustdoc uses
// relative links.
// FIXME: Cargo should probably do this itself.
t!(fs::create_dir_all(out_dir.join(package)));
- cargo.arg("--")
- .arg("--markdown-css").arg("rust.css")
- .arg("--markdown-no-toc")
- .arg("--generate-redirect-pages")
- .arg("--resource-suffix").arg(crate::channel::CFG_RELEASE_NUM)
- .arg("--index-page").arg(&builder.src.join("src/doc/index.md"));
+ cargo
+ .arg("--")
+ .arg("--markdown-css")
+ .arg("rust.css")
+ .arg("--markdown-no-toc")
+ .arg("--generate-redirect-pages")
+ .arg("--resource-suffix")
+ .arg(crate::channel::CFG_RELEASE_NUM)
+ .arg("--index-page")
+ .arg(&builder.src.join("src/doc/index.md"));
builder.run(&mut cargo.into());
};
}
fn make_run(run: RunConfig<'_>) {
- run.builder.ensure(Rustc {
- stage: run.builder.top_stage,
- target: run.target,
- });
+ run.builder.ensure(Rustc { stage: run.builder.top_stage, target: run.target });
}
/// Generates compiler documentation.
// Build cargo command.
let mut cargo = builder.cargo(compiler, Mode::Rustc, target, "doc");
- cargo.env("RUSTDOCFLAGS", "--document-private-items --passes strip-hidden");
+ cargo.env("RUSTDOCFLAGS", "--document-private-items");
compile::rustc_cargo(builder, &mut cargo, target);
// Only include compiler crates, no dependencies of those, such as `libc`.
fn find_compiler_crates(
builder: &Builder<'_>,
name: &Interned<String>,
- crates: &mut HashSet<Interned<String>>
+ crates: &mut HashSet<Interned<String>>,
) {
// Add current crate.
crates.insert(*name);
}
fn make_run(run: RunConfig<'_>) {
- run.builder.ensure(Rustdoc {
- stage: run.builder.top_stage,
- target: run.target,
- });
+ run.builder.ensure(Rustdoc { stage: run.builder.top_stage, target: run.target });
}
/// Generates compiler documentation.
builder.ensure(tool::Rustdoc { compiler: compiler });
// Symlink compiler docs to the output directory of rustdoc documentation.
- let out_dir = builder.stage_out(compiler, Mode::ToolRustc)
- .join(target)
- .join("doc");
+ let out_dir = builder.stage_out(compiler, Mode::ToolRustc).join(target).join("doc");
t!(fs::create_dir_all(&out_dir));
t!(symlink_dir_force(&builder.config, &out, &out_dir));
"doc",
"src/tools/rustdoc",
SourceType::InTree,
- &[]
+ &[],
);
// Only include compiler crates, no dependencies of those, such as `libc`.
}
fn make_run(run: RunConfig<'_>) {
- run.builder.ensure(ErrorIndex {
- target: run.target,
- });
+ run.builder.ensure(ErrorIndex { target: run.target });
}
/// Generates the HTML rendered error-index by running the
let out = builder.doc_out(target);
t!(fs::create_dir_all(&out));
let compiler = builder.compiler(2, builder.config.build);
- let mut index = tool::ErrorIndex::command(
- builder,
- compiler,
- );
+ let mut index = tool::ErrorIndex::command(builder, compiler);
index.arg("html");
index.arg(out.join("error-index.html"));
index.arg(crate::channel::CFG_RELEASE_NUM);
}
fn make_run(run: RunConfig<'_>) {
- run.builder.ensure(UnstableBookGen {
- target: run.target,
- });
+ run.builder.ensure(UnstableBookGen { target: run.target });
}
fn run(self, builder: &Builder<'_>) {
} else {
// handle directory junctions on windows by falling back to
// `remove_dir`.
- fs::remove_file(dst).or_else(|_| {
- fs::remove_dir(dst)
- })?;
+ fs::remove_file(dst).or_else(|_| fs::remove_dir(dst))?;
}
}