mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-10 22:13:27 +00:00
Update bootstrap tests to support book dependencies
Since TRPL now depends on a `trpl` crate, the test needs to be able to build that crate to run mdbook against it, and also to invoke mdbook with `--library-path` in that case. Use the support for that flag added to `rustbook` in the previous change to invoke it with the path to the dependencies it will need to run `rustdoc` tests which reference `trpl`. Co-authored-by: Onur Özkan <onurozkan.dev@outlook.com>
This commit is contained in:
parent
f7409e8afb
commit
d34d426b8f
@ -3,12 +3,14 @@
|
||||
//! `./x.py test` (aka [`Kind::Test`]) is currently allowed to reach build steps in other modules.
|
||||
//! However, this contains ~all test parts we expect people to be able to build and run locally.
|
||||
|
||||
use std::collections::HashSet;
|
||||
use std::ffi::{OsStr, OsString};
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::{env, fs, iter};
|
||||
|
||||
use clap_complete::shells;
|
||||
|
||||
use crate::core::build_steps::compile::run_cargo;
|
||||
use crate::core::build_steps::doc::DocumentationFormat;
|
||||
use crate::core::build_steps::synthetic_targets::MirOptPanicAbortSyntheticTarget;
|
||||
use crate::core::build_steps::tool::{self, SourceType, Tool};
|
||||
@ -2185,6 +2187,7 @@ struct BookTest {
|
||||
path: PathBuf,
|
||||
name: &'static str,
|
||||
is_ext_doc: bool,
|
||||
dependencies: Vec<&'static str>,
|
||||
}
|
||||
|
||||
impl Step for BookTest {
|
||||
@ -2237,6 +2240,57 @@ impl BookTest {
|
||||
// Books often have feature-gated example text.
|
||||
rustbook_cmd.env("RUSTC_BOOTSTRAP", "1");
|
||||
rustbook_cmd.env("PATH", new_path).arg("test").arg(path);
|
||||
|
||||
// Books may also need to build dependencies. For example, `TheBook` has
|
||||
// code samples which use the `trpl` crate. For the `rustdoc` invocation
|
||||
// to find them them successfully, they need to be built first and their
|
||||
// paths used to generate the
|
||||
let libs = if !self.dependencies.is_empty() {
|
||||
let mut lib_paths = vec![];
|
||||
for dep in self.dependencies {
|
||||
let mode = Mode::ToolRustc;
|
||||
let target = builder.config.build;
|
||||
let cargo = tool::prepare_tool_cargo(
|
||||
builder,
|
||||
compiler,
|
||||
mode,
|
||||
target,
|
||||
Kind::Build,
|
||||
dep,
|
||||
SourceType::Submodule,
|
||||
&[],
|
||||
);
|
||||
|
||||
let stamp = builder
|
||||
.cargo_out(compiler, mode, target)
|
||||
.join(PathBuf::from(dep).file_name().unwrap())
|
||||
.with_extension("stamp");
|
||||
|
||||
let output_paths = run_cargo(builder, cargo, vec![], &stamp, vec![], false, false);
|
||||
let directories = output_paths
|
||||
.into_iter()
|
||||
.filter_map(|p| p.parent().map(ToOwned::to_owned))
|
||||
.fold(HashSet::new(), |mut set, dir| {
|
||||
set.insert(dir);
|
||||
set
|
||||
});
|
||||
|
||||
lib_paths.extend(directories);
|
||||
}
|
||||
lib_paths
|
||||
} else {
|
||||
vec![]
|
||||
};
|
||||
|
||||
if !libs.is_empty() {
|
||||
let paths = libs
|
||||
.into_iter()
|
||||
.map(|path| path.into_os_string())
|
||||
.collect::<Vec<OsString>>()
|
||||
.join(OsStr::new(","));
|
||||
rustbook_cmd.args([OsString::from("--library-path"), paths]);
|
||||
}
|
||||
|
||||
builder.add_rust_test_threads(&mut rustbook_cmd);
|
||||
let _guard = builder.msg(
|
||||
Kind::Test,
|
||||
@ -2295,6 +2349,7 @@ macro_rules! test_book {
|
||||
$name:ident, $path:expr, $book_name:expr,
|
||||
default=$default:expr
|
||||
$(,submodules = $submodules:expr)?
|
||||
$(,dependencies=$dependencies:expr)?
|
||||
;
|
||||
)+) => {
|
||||
$(
|
||||
@ -2324,11 +2379,21 @@ macro_rules! test_book {
|
||||
builder.require_submodule(submodule, None);
|
||||
}
|
||||
)*
|
||||
|
||||
let dependencies = vec![];
|
||||
$(
|
||||
let mut dependencies = dependencies;
|
||||
for dep in $dependencies {
|
||||
dependencies.push(dep);
|
||||
}
|
||||
)?
|
||||
|
||||
builder.ensure(BookTest {
|
||||
compiler: self.compiler,
|
||||
path: PathBuf::from($path),
|
||||
name: $book_name,
|
||||
is_ext_doc: !$default,
|
||||
dependencies,
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -2343,7 +2408,7 @@ test_book!(
|
||||
RustcBook, "src/doc/rustc", "rustc", default=true;
|
||||
RustByExample, "src/doc/rust-by-example", "rust-by-example", default=false, submodules=["src/doc/rust-by-example"];
|
||||
EmbeddedBook, "src/doc/embedded-book", "embedded-book", default=false, submodules=["src/doc/embedded-book"];
|
||||
TheBook, "src/doc/book", "book", default=false, submodules=["src/doc/book"];
|
||||
TheBook, "src/doc/book", "book", default=false, submodules=["src/doc/book"], dependencies=["src/doc/book/packages/trpl"];
|
||||
UnstableBook, "src/doc/unstable-book", "unstable-book", default=true;
|
||||
EditionGuide, "src/doc/edition-guide", "edition-guide", default=false, submodules=["src/doc/edition-guide"];
|
||||
);
|
||||
|
Loading…
Reference in New Issue
Block a user