diff options
| author | Travis Finkenauer <tmfinken@gmail.com> | 2023-08-19 15:40:24 -0700 |
|---|---|---|
| committer | Travis Finkenauer <tmfinken@gmail.com> | 2024-03-15 01:41:37 -0700 |
| commit | 58dee7d7817f8edcd32d7eb259e22d49a4e1abbe (patch) | |
| tree | e4d32f20075d834f0e52915113628c2dfc914cf0 /src | |
| parent | ee03c286cfdca26fa5b2a4ee40957625d2c826ff (diff) | |
| download | rust-58dee7d7817f8edcd32d7eb259e22d49a4e1abbe.tar.gz rust-58dee7d7817f8edcd32d7eb259e22d49a4e1abbe.zip | |
rustdoc: add `--test-builder-wrapper` argument
Instead of executing the test builder directly, the test builder wrapper will be called with test builder as the first argument and subsequent arguments. This is similar to cargo's RUSTC_WRAPPER argument. The `--test-builder-wrapper` argument can be passed multiple times to allow "nesting" of wrappers.
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustdoc/config.rs | 7 | ||||
| -rw-r--r-- | src/librustdoc/doctest.rs | 14 | ||||
| -rw-r--r-- | src/librustdoc/lib.rs | 8 |
3 files changed, 27 insertions, 2 deletions
diff --git a/src/librustdoc/config.rs b/src/librustdoc/config.rs index 4b1a417b211..be7e319bc79 100644 --- a/src/librustdoc/config.rs +++ b/src/librustdoc/config.rs @@ -130,6 +130,9 @@ pub(crate) struct Options { /// default to loading from `$sysroot/bin/rustc`. pub(crate) test_builder: Option<PathBuf>, + /// Run these wrapper instead of rustc directly + pub(crate) test_builder_wrappers: Vec<PathBuf>, + // Options that affect the documentation process /// Whether to run the `calculate-doc-coverage` pass, which counts the number of public items /// with and without documentation. @@ -204,6 +207,7 @@ impl fmt::Debug for Options { .field("enable-per-target-ignores", &self.enable_per_target_ignores) .field("run_check", &self.run_check) .field("no_run", &self.no_run) + .field("test_builder_wrappers", &self.test_builder_wrappers) .field("nocapture", &self.nocapture) .field("scrape_examples_options", &self.scrape_examples_options) .field("unstable_features", &self.unstable_features) @@ -521,6 +525,8 @@ impl Options { dcx.fatal("the `--test` flag must be passed to enable `--no-run`"); } + let test_builder_wrappers = + matches.opt_strs("test-builder-wrapper").iter().map(PathBuf::from).collect(); let out_dir = matches.opt_str("out-dir").map(|s| PathBuf::from(&s)); let output = matches.opt_str("output").map(|s| PathBuf::from(&s)); let output = match (out_dir, output) { @@ -727,6 +733,7 @@ impl Options { test_builder, run_check, no_run, + test_builder_wrappers, nocapture, crate_name, output_format, diff --git a/src/librustdoc/doctest.rs b/src/librustdoc/doctest.rs index d446b781bf1..96ad83e7867 100644 --- a/src/librustdoc/doctest.rs +++ b/src/librustdoc/doctest.rs @@ -25,7 +25,7 @@ use tempfile::Builder as TempFileBuilder; use std::env; use std::io::{self, Write}; use std::panic; -use std::path::PathBuf; +use std::path::{Path, PathBuf}; use std::process::{self, Command, Stdio}; use std::str; use std::sync::atomic::{AtomicUsize, Ordering}; @@ -306,6 +306,16 @@ fn add_exe_suffix(input: String, target: &TargetTriple) -> String { input + &exe_suffix } +fn wrapped_rustc_command(rustc_wrappers: &[PathBuf], rustc_binary: &Path) -> Command { + let args: Vec<&Path> = + rustc_wrappers.iter().map(PathBuf::as_path).chain([rustc_binary].into_iter()).collect(); + let (exe, args) = args.split_first().expect("unable to create rustc command"); + + let mut command = Command::new(exe); + command.args(args); + command +} + fn run_test( test: &str, crate_name: &str, @@ -334,7 +344,7 @@ fn run_test( .test_builder .as_deref() .unwrap_or_else(|| rustc_interface::util::rustc_path().expect("found rustc")); - let mut compiler = Command::new(&rustc_binary); + let mut compiler = wrapped_rustc_command(&rustdoc_options.test_builder_wrappers, rustc_binary); compiler.arg("--crate-type").arg("bin"); for cfg in &rustdoc_options.cfgs { compiler.arg("--cfg").arg(&cfg); diff --git a/src/librustdoc/lib.rs b/src/librustdoc/lib.rs index 39d27b104cd..9618690575a 100644 --- a/src/librustdoc/lib.rs +++ b/src/librustdoc/lib.rs @@ -530,6 +530,14 @@ fn opts() -> Vec<RustcOptGroup> { unstable("test-builder", |o| { o.optopt("", "test-builder", "The rustc-like binary to use as the test builder", "PATH") }), + unstable("test-builder-wrapper", |o| { + o.optmulti( + "", + "test-builder-wrapper", + "The wrapper program for running rustc", + "WRAPPER", + ) + }), unstable("check", |o| o.optflagmulti("", "check", "Run rustdoc checks")), unstable("generate-redirect-map", |o| { o.optflagmulti( |
