Nomicon, "src/doc/nomicon", "nomicon";
Reference, "src/doc/reference", "reference";
RustByExample, "src/doc/rust-by-example", "rust-by-example";
- RustcBook, "src/doc/rustc", "rustc";
RustdocBook, "src/doc/rustdoc", "rustdoc";
);
.arg("-Z")
.arg("unstable-options")
.arg("--resource-suffix")
- .arg(crate::channel::CFG_RELEASE_NUM)
+ .arg(&builder.version)
.arg("--index-page")
.arg(&builder.src.join("src/doc/index.md"));
let mut index = tool::ErrorIndex::command(builder, self.compiler);
index.arg("html");
index.arg(out.join("error-index.html"));
- index.arg(crate::channel::CFG_RELEASE_NUM);
+ index.arg(&builder.version);
builder.run(&mut index);
}
builder.remove_dir(&out);
let mut cmd = builder.tool_cmd(Tool::UnstableBookGen);
cmd.arg(builder.src.join("library"));
+ cmd.arg(builder.src.join("compiler"));
cmd.arg(builder.src.join("src"));
cmd.arg(out);
symlink_dir(config, src, dst)
}
+
+#[derive(Ord, PartialOrd, Debug, Copy, Clone, Hash, PartialEq, Eq)]
+pub struct RustcBook {
+ pub compiler: Compiler,
+ pub target: TargetSelection,
+}
+
+impl Step for RustcBook {
+ type Output = ();
+ const DEFAULT: bool = true;
+ const ONLY_HOSTS: bool = true;
+
+ fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> {
+ let builder = run.builder;
+ run.path("src/doc/rustc").default_condition(builder.config.docs)
+ }
+
+ fn make_run(run: RunConfig<'_>) {
+ run.builder.ensure(RustcBook {
+ compiler: run.builder.compiler(run.builder.top_stage, run.builder.config.build),
+ target: run.target,
+ });
+ }
+
+ /// Builds the rustc book.
+ ///
+ /// The lints are auto-generated by a tool, and then merged into the book
+ /// in the "md-doc" directory in the build output directory. Then
+ /// "rustbook" is used to convert it to HTML.
+ fn run(self, builder: &Builder<'_>) {
+ let out_base = builder.md_doc_out(self.target).join("rustc");
+ t!(fs::create_dir_all(&out_base));
+ let out_listing = out_base.join("src/lints");
+ builder.cp_r(&builder.src.join("src/doc/rustc"), &out_base);
+ builder.info(&format!("Generating lint docs ({})", self.target));
+
+ let rustc = builder.rustc(self.compiler);
+ // The tool runs `rustc` for extracting output examples, so it needs a
+ // functional sysroot.
+ builder.ensure(compile::Std { compiler: self.compiler, target: self.target });
+ let mut cmd = builder.tool_cmd(Tool::LintDocs);
+ cmd.arg("--src");
+ cmd.arg(builder.src.join("compiler"));
+ cmd.arg("--out");
+ cmd.arg(&out_listing);
+ cmd.arg("--rustc");
+ cmd.arg(&rustc);
+ cmd.arg("--rustc-target").arg(&self.target.rustc_target_arg());
+ if builder.config.verbose() {
+ cmd.arg("--verbose");
+ }
+ // If the lib directories are in an unusual location (changed in
+ // config.toml), then this needs to explicitly update the dylib search
+ // path.
+ builder.add_rustc_lib_path(self.compiler, &mut cmd);
+ builder.run(&mut cmd);
+ // Run rustbook/mdbook to generate the HTML pages.
+ builder.ensure(RustbookSrc {
+ target: self.target,
+ name: INTERNER.intern_str("rustc"),
+ src: INTERNER.intern_path(out_base),
+ });
+ if is_explicit_request(builder, "src/doc/rustc") {
+ let out = builder.doc_out(self.target);
+ let index = out.join("rustc").join("index.html");
+ open(builder, &index);
+ }
+ }
+}