Only the compatibility items from the embedded book PR
PR: https://github.com/rust-lang/rust/pull/56291
This commit is contained in:
parent
43b4c4a36b
commit
7389f97cde
|
@ -23,7 +23,7 @@ use crate::cache::{INTERNER, Interned};
|
||||||
use crate::config::Config;
|
use crate::config::Config;
|
||||||
|
|
||||||
macro_rules! book {
|
macro_rules! book {
|
||||||
($($name:ident, $path:expr, $book_name:expr;)+) => {
|
($($name:ident, $path:expr, $book_name:expr, $book_ver:expr;)+) => {
|
||||||
$(
|
$(
|
||||||
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
|
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
|
||||||
pub struct $name {
|
pub struct $name {
|
||||||
|
@ -49,6 +49,7 @@ macro_rules! book {
|
||||||
builder.ensure(Rustbook {
|
builder.ensure(Rustbook {
|
||||||
target: self.target,
|
target: self.target,
|
||||||
name: INTERNER.intern_str($book_name),
|
name: INTERNER.intern_str($book_name),
|
||||||
|
version: $book_ver,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -56,19 +57,28 @@ macro_rules! book {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NOTE: When adding a book here, make sure to ALSO build the book by
|
||||||
|
// adding a build step in `src/bootstrap/builder.rs`!
|
||||||
book!(
|
book!(
|
||||||
Nomicon, "src/doc/nomicon", "nomicon";
|
EditionGuide, "src/doc/edition-guide", "edition-guide", RustbookVersion::MdBook1;
|
||||||
Reference, "src/doc/reference", "reference";
|
Nomicon, "src/doc/nomicon", "nomicon", RustbookVersion::MdBook1;
|
||||||
EditionGuide, "src/doc/edition-guide", "edition-guide";
|
Reference, "src/doc/reference", "reference", RustbookVersion::MdBook1;
|
||||||
RustdocBook, "src/doc/rustdoc", "rustdoc";
|
RustByExample, "src/doc/rust-by-example", "rust-by-example", RustbookVersion::MdBook1;
|
||||||
RustcBook, "src/doc/rustc", "rustc";
|
RustcBook, "src/doc/rustc", "rustc", RustbookVersion::MdBook1;
|
||||||
RustByExample, "src/doc/rust-by-example", "rust-by-example";
|
RustdocBook, "src/doc/rustdoc", "rustdoc", RustbookVersion::MdBook1;
|
||||||
);
|
);
|
||||||
|
|
||||||
|
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
|
||||||
|
enum RustbookVersion {
|
||||||
|
MdBook1,
|
||||||
|
MdBook2,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
|
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
|
||||||
struct Rustbook {
|
struct Rustbook {
|
||||||
target: Interned<String>,
|
target: Interned<String>,
|
||||||
name: Interned<String>,
|
name: Interned<String>,
|
||||||
|
version: RustbookVersion,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Step for Rustbook {
|
impl Step for Rustbook {
|
||||||
|
@ -90,6 +100,7 @@ impl Step for Rustbook {
|
||||||
target: self.target,
|
target: self.target,
|
||||||
name: self.name,
|
name: self.name,
|
||||||
src: INTERNER.intern_path(src),
|
src: INTERNER.intern_path(src),
|
||||||
|
version: self.version,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -122,6 +133,7 @@ impl Step for UnstableBook {
|
||||||
target: self.target,
|
target: self.target,
|
||||||
name: INTERNER.intern_str("unstable-book"),
|
name: INTERNER.intern_str("unstable-book"),
|
||||||
src: builder.md_doc_out(self.target),
|
src: builder.md_doc_out(self.target),
|
||||||
|
version: RustbookVersion::MdBook1,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -175,6 +187,7 @@ struct RustbookSrc {
|
||||||
target: Interned<String>,
|
target: Interned<String>,
|
||||||
name: Interned<String>,
|
name: Interned<String>,
|
||||||
src: Interned<PathBuf>,
|
src: Interned<PathBuf>,
|
||||||
|
version: RustbookVersion,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Step for RustbookSrc {
|
impl Step for RustbookSrc {
|
||||||
|
@ -205,11 +218,19 @@ impl Step for RustbookSrc {
|
||||||
}
|
}
|
||||||
builder.info(&format!("Rustbook ({}) - {}", target, name));
|
builder.info(&format!("Rustbook ({}) - {}", target, name));
|
||||||
let _ = fs::remove_dir_all(&out);
|
let _ = fs::remove_dir_all(&out);
|
||||||
|
|
||||||
|
let vers = match self.version {
|
||||||
|
RustbookVersion::MdBook1 => "1",
|
||||||
|
RustbookVersion::MdBook2 => "2",
|
||||||
|
};
|
||||||
|
|
||||||
builder.run(rustbook_cmd
|
builder.run(rustbook_cmd
|
||||||
.arg("build")
|
.arg("build")
|
||||||
.arg(&src)
|
.arg(&src)
|
||||||
.arg("-d")
|
.arg("-d")
|
||||||
.arg(out));
|
.arg(out)
|
||||||
|
.arg("-m")
|
||||||
|
.arg(vers));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -255,6 +276,7 @@ impl Step for TheBook {
|
||||||
builder.ensure(Rustbook {
|
builder.ensure(Rustbook {
|
||||||
target,
|
target,
|
||||||
name: INTERNER.intern_string(name.to_string()),
|
name: INTERNER.intern_string(name.to_string()),
|
||||||
|
version: RustbookVersion::MdBook1,
|
||||||
});
|
});
|
||||||
|
|
||||||
// building older edition redirects
|
// building older edition redirects
|
||||||
|
@ -263,18 +285,21 @@ impl Step for TheBook {
|
||||||
builder.ensure(Rustbook {
|
builder.ensure(Rustbook {
|
||||||
target,
|
target,
|
||||||
name: INTERNER.intern_string(source_name),
|
name: INTERNER.intern_string(source_name),
|
||||||
|
version: RustbookVersion::MdBook1,
|
||||||
});
|
});
|
||||||
|
|
||||||
let source_name = format!("{}/second-edition", name);
|
let source_name = format!("{}/second-edition", name);
|
||||||
builder.ensure(Rustbook {
|
builder.ensure(Rustbook {
|
||||||
target,
|
target,
|
||||||
name: INTERNER.intern_string(source_name),
|
name: INTERNER.intern_string(source_name),
|
||||||
|
version: RustbookVersion::MdBook1,
|
||||||
});
|
});
|
||||||
|
|
||||||
let source_name = format!("{}/2018-edition", name);
|
let source_name = format!("{}/2018-edition", name);
|
||||||
builder.ensure(Rustbook {
|
builder.ensure(Rustbook {
|
||||||
target,
|
target,
|
||||||
name: INTERNER.intern_string(source_name),
|
name: INTERNER.intern_string(source_name),
|
||||||
|
version: RustbookVersion::MdBook1,
|
||||||
});
|
});
|
||||||
|
|
||||||
// build the version info page and CSS
|
// build the version info page and CSS
|
||||||
|
|
|
@ -1,13 +1,23 @@
|
||||||
|
cargo-features = ["rename-dependency"]
|
||||||
|
|
||||||
[package]
|
[package]
|
||||||
authors = ["The Rust Project Developers"]
|
authors = ["The Rust Project Developers"]
|
||||||
name = "rustbook"
|
name = "rustbook"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
license = "MIT/Apache-2.0"
|
license = "MIT/Apache-2.0"
|
||||||
|
edition = "2018"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
clap = "2.25.0"
|
clap = "2.25.0"
|
||||||
|
|
||||||
[dependencies.mdbook]
|
[dependencies.mdbook_2]
|
||||||
|
package = "mdbook"
|
||||||
|
version = "0.2.2"
|
||||||
|
default-features = false
|
||||||
|
features = ["search"]
|
||||||
|
|
||||||
|
[dependencies.mdbook_1]
|
||||||
|
package = "mdbook"
|
||||||
version = "0.1.7"
|
version = "0.1.7"
|
||||||
default-features = false
|
default-features = false
|
||||||
features = ["search"]
|
features = ["search"]
|
||||||
|
|
|
@ -1,21 +1,24 @@
|
||||||
//
|
//
|
||||||
extern crate mdbook;
|
use clap::{crate_version};
|
||||||
#[macro_use]
|
|
||||||
extern crate clap;
|
|
||||||
|
|
||||||
use std::env;
|
use std::env;
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
|
|
||||||
use clap::{App, ArgMatches, SubCommand, AppSettings};
|
use clap::{App, ArgMatches, SubCommand, AppSettings};
|
||||||
|
|
||||||
use mdbook::MDBook;
|
use mdbook_1::{MDBook as MDBook1};
|
||||||
use mdbook::errors::Result;
|
use mdbook_1::errors::{Result as Result1};
|
||||||
|
|
||||||
|
use mdbook_2::{MDBook as MDBook2};
|
||||||
|
use mdbook_2::errors::{Result as Result2};
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let d_message = "-d, --dest-dir=[dest-dir]
|
let d_message = "-d, --dest-dir=[dest-dir]
|
||||||
'The output directory for your book{n}(Defaults to ./book when omitted)'";
|
'The output directory for your book{n}(Defaults to ./book when omitted)'";
|
||||||
let dir_message = "[dir]
|
let dir_message = "[dir]
|
||||||
'A directory for your book{n}(Defaults to Current Directory when omitted)'";
|
'A directory for your book{n}(Defaults to Current Directory when omitted)'";
|
||||||
|
let vers_message = "-m, --mdbook-vers=[md-version]
|
||||||
|
'The version of mdbook to use for your book{n}(Defaults to 1 when omitted)'";
|
||||||
|
|
||||||
let matches = App::new("rustbook")
|
let matches = App::new("rustbook")
|
||||||
.about("Build a book with mdBook")
|
.about("Build a book with mdBook")
|
||||||
|
@ -25,29 +28,66 @@ fn main() {
|
||||||
.subcommand(SubCommand::with_name("build")
|
.subcommand(SubCommand::with_name("build")
|
||||||
.about("Build the book from the markdown files")
|
.about("Build the book from the markdown files")
|
||||||
.arg_from_usage(d_message)
|
.arg_from_usage(d_message)
|
||||||
.arg_from_usage(dir_message))
|
.arg_from_usage(dir_message)
|
||||||
|
.arg_from_usage(vers_message))
|
||||||
.get_matches();
|
.get_matches();
|
||||||
|
|
||||||
// Check which subcomamnd the user ran...
|
// Check which subcomamnd the user ran...
|
||||||
let res = match matches.subcommand() {
|
match matches.subcommand() {
|
||||||
("build", Some(sub_matches)) => build(sub_matches),
|
("build", Some(sub_matches)) => {
|
||||||
|
match sub_matches.value_of("mdbook-vers") {
|
||||||
|
None | Some("1") => {
|
||||||
|
if let Err(e) = build_1(sub_matches) {
|
||||||
|
eprintln!("Error: {}", e);
|
||||||
|
|
||||||
|
for cause in e.iter().skip(1) {
|
||||||
|
eprintln!("\tCaused By: {}", cause);
|
||||||
|
}
|
||||||
|
|
||||||
|
::std::process::exit(101);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Some("2") => {
|
||||||
|
if let Err(e) = build_2(sub_matches) {
|
||||||
|
eprintln!("Error: {}", e);
|
||||||
|
|
||||||
|
for cause in e.iter().skip(1) {
|
||||||
|
eprintln!("\tCaused By: {}", cause);
|
||||||
|
}
|
||||||
|
|
||||||
|
::std::process::exit(101);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
panic!("Invalid mdBook version! Select '1' or '2'");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
},
|
||||||
(_, _) => unreachable!(),
|
(_, _) => unreachable!(),
|
||||||
};
|
};
|
||||||
|
|
||||||
if let Err(e) = res {
|
|
||||||
eprintln!("Error: {}", e);
|
|
||||||
|
|
||||||
for cause in e.iter().skip(1) {
|
|
||||||
eprintln!("\tCaused By: {}", cause);
|
|
||||||
}
|
|
||||||
|
|
||||||
::std::process::exit(101);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Build command implementation
|
// Build command implementation
|
||||||
pub fn build(args: &ArgMatches) -> Result<()> {
|
pub fn build_1(args: &ArgMatches) -> Result1<()> {
|
||||||
let book_dir = get_book_dir(args);
|
let book_dir = get_book_dir(args);
|
||||||
let mut book = MDBook::load(&book_dir)?;
|
let mut book = MDBook1::load(&book_dir)?;
|
||||||
|
|
||||||
|
// Set this to allow us to catch bugs in advance.
|
||||||
|
book.config.build.create_missing = false;
|
||||||
|
|
||||||
|
if let Some(dest_dir) = args.value_of("dest-dir") {
|
||||||
|
book.config.build.build_dir = PathBuf::from(dest_dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
book.build()?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
// Build command implementation
|
||||||
|
pub fn build_2(args: &ArgMatches) -> Result2<()> {
|
||||||
|
let book_dir = get_book_dir(args);
|
||||||
|
let mut book = MDBook2::load(&book_dir)?;
|
||||||
|
|
||||||
// Set this to allow us to catch bugs in advance.
|
// Set this to allow us to catch bugs in advance.
|
||||||
book.config.build.create_missing = false;
|
book.config.build.create_missing = false;
|
||||||
|
|
Loading…
Reference in New Issue