Rollup merge of #76717 - ehuss:fix-rustc-book-libdir, r=Mark-Simulacrum
Fix generating rustc docs with non-default lib directory. If `libdir` is set in `config.toml`, then the tool to generate the rustc docs was unable to run `rustc` because it could not find the shared libraries. The solution is to set the dylib search path to include the libdir. I changed the API of `add_rustc_lib_path` to take `Command` instead of `Cargo` to try to share the code in several places. This is how it worked before https://github.com/rust-lang/rust/pull/64316, and I think this still retains the spirit of that change. Fixes #76702
This commit is contained in:
commit
f631293565
@ -683,7 +683,7 @@ impl<'a> Builder<'a> {
|
||||
|
||||
/// Adds the compiler's directory of dynamic libraries to `cmd`'s dynamic
|
||||
/// library lookup path.
|
||||
pub fn add_rustc_lib_path(&self, compiler: Compiler, cmd: &mut Cargo) {
|
||||
pub fn add_rustc_lib_path(&self, compiler: Compiler, cmd: &mut Command) {
|
||||
// Windows doesn't need dylib path munging because the dlls for the
|
||||
// compiler live next to the compiler and the system will find them
|
||||
// automatically.
|
||||
@ -691,7 +691,7 @@ impl<'a> Builder<'a> {
|
||||
return;
|
||||
}
|
||||
|
||||
add_dylib_path(vec![self.rustc_libdir(compiler)], &mut cmd.command);
|
||||
add_dylib_path(vec![self.rustc_libdir(compiler)], cmd);
|
||||
}
|
||||
|
||||
/// Gets a path to the compiler specified.
|
||||
@ -1488,6 +1488,10 @@ impl Cargo {
|
||||
self.command.env(key.as_ref(), value.as_ref());
|
||||
self
|
||||
}
|
||||
|
||||
pub fn add_rustc_lib_path(&mut self, builder: &Builder<'_>, compiler: Compiler) {
|
||||
builder.add_rustc_lib_path(compiler, &mut self.command);
|
||||
}
|
||||
}
|
||||
|
||||
impl From<Cargo> for Command {
|
||||
|
@ -766,6 +766,10 @@ impl Step for RustcBook {
|
||||
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 {
|
||||
|
@ -270,7 +270,7 @@ impl Step for Rls {
|
||||
&[],
|
||||
);
|
||||
|
||||
builder.add_rustc_lib_path(compiler, &mut cargo);
|
||||
cargo.add_rustc_lib_path(builder, compiler);
|
||||
cargo.arg("--").args(builder.config.cmd.test_args());
|
||||
|
||||
if try_run(builder, &mut cargo.into()) {
|
||||
@ -328,7 +328,7 @@ impl Step for Rustfmt {
|
||||
t!(fs::create_dir_all(&dir));
|
||||
cargo.env("RUSTFMT_TEST_DIR", dir);
|
||||
|
||||
builder.add_rustc_lib_path(compiler, &mut cargo);
|
||||
cargo.add_rustc_lib_path(builder, compiler);
|
||||
|
||||
if try_run(builder, &mut cargo.into()) {
|
||||
builder.save_toolstate("rustfmt", ToolState::TestPass);
|
||||
@ -449,7 +449,7 @@ impl Step for Miri {
|
||||
|
||||
cargo.arg("--").args(builder.config.cmd.test_args());
|
||||
|
||||
builder.add_rustc_lib_path(compiler, &mut cargo);
|
||||
cargo.add_rustc_lib_path(builder, compiler);
|
||||
|
||||
if !try_run(builder, &mut cargo.into()) {
|
||||
return;
|
||||
@ -554,7 +554,7 @@ impl Step for Clippy {
|
||||
|
||||
cargo.arg("--").args(builder.config.cmd.test_args());
|
||||
|
||||
builder.add_rustc_lib_path(compiler, &mut cargo);
|
||||
cargo.add_rustc_lib_path(builder, compiler);
|
||||
|
||||
builder.run(&mut cargo.into());
|
||||
}
|
||||
|
@ -402,9 +402,12 @@ fn generate_lint_output(
|
||||
None => {
|
||||
let rendered: Vec<&str> =
|
||||
msgs.iter().filter_map(|msg| msg["rendered"].as_str()).collect();
|
||||
let non_json: Vec<&str> =
|
||||
stderr.lines().filter(|line| !line.starts_with('{')).collect();
|
||||
Err(format!(
|
||||
"did not find lint `{}` in output of example, got:\n{}",
|
||||
"did not find lint `{}` in output of example, got:\n{}\n{}",
|
||||
name,
|
||||
non_json.join("\n"),
|
||||
rendered.join("\n")
|
||||
)
|
||||
.into())
|
||||
|
Loading…
Reference in New Issue
Block a user