From 0d4970b180918a59f03d2f00e839b3433ce7960f Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Wed, 22 Nov 2017 14:49:10 +0100 Subject: [PATCH] Pass RUSTDOCFLAGS to rustdoc spawned through cargo test (fixes #4738) --- src/cargo/ops/cargo_rustc/compilation.rs | 4 ++++ src/cargo/ops/cargo_rustc/mod.rs | 6 ++++++ src/cargo/ops/cargo_test.rs | 4 ++++ tests/rustdocflags.rs | 19 +++++++++++++++++++ 4 files changed, 33 insertions(+) diff --git a/src/cargo/ops/cargo_rustc/compilation.rs b/src/cargo/ops/cargo_rustc/compilation.rs index b3643b6bf..a40c310a1 100644 --- a/src/cargo/ops/cargo_rustc/compilation.rs +++ b/src/cargo/ops/cargo_rustc/compilation.rs @@ -50,6 +50,9 @@ pub struct Compilation<'cfg> { /// Features per package enabled during this compilation. pub cfgs: HashMap>, + /// Flags to pass to rustdoc when invoked from cargo test, per package. + pub rustdocflags: HashMap>, + pub target: String, config: &'cfg Config, @@ -72,6 +75,7 @@ impl<'cfg> Compilation<'cfg> { extra_env: HashMap::new(), to_doc_test: Vec::new(), cfgs: HashMap::new(), + rustdocflags: HashMap::new(), config: config, target: String::new(), target_runner: LazyCell::new(), diff --git a/src/cargo/ops/cargo_rustc/mod.rs b/src/cargo/ops/cargo_rustc/mod.rs index 8dce388c0..bc0c812ca 100644 --- a/src/cargo/ops/cargo_rustc/mod.rs +++ b/src/cargo/ops/cargo_rustc/mod.rs @@ -229,6 +229,12 @@ pub fn compile_targets<'a, 'cfg: 'a>(ws: &Workspace<'cfg>, cx.compilation.cfgs.entry(unit.pkg.package_id().clone()) .or_insert_with(HashSet::new) .extend(feats.iter().map(|feat| format!("feature=\"{}\"", feat))); + let rustdocflags = cx.rustdocflags_args(&unit)?; + if !rustdocflags.is_empty() { + cx.compilation.rustdocflags.entry(unit.pkg.package_id().clone()) + .or_insert_with(Vec::new) + .extend(rustdocflags); + } output_depinfo(&mut cx, unit)?; } diff --git a/src/cargo/ops/cargo_test.rs b/src/cargo/ops/cargo_test.rs index f808ff5e1..ad9ea32e3 100644 --- a/src/cargo/ops/cargo_test.rs +++ b/src/cargo/ops/cargo_test.rs @@ -199,6 +199,10 @@ fn run_doc_tests(options: &TestOptions, p.arg("--extern").arg(&arg); } + if let Some(flags) = compilation.rustdocflags.get(package.package_id()) { + p.args(flags); + } + config.shell().verbose(|shell| { shell.status("Running", p.to_string()) })?; diff --git a/tests/rustdocflags.rs b/tests/rustdocflags.rs index e1385d3e6..e8bc2fad9 100644 --- a/tests/rustdocflags.rs +++ b/tests/rustdocflags.rs @@ -86,3 +86,22 @@ fn rerun() { [FINISHED] dev [unoptimized + debuginfo] target(s) in [..] ")); } + +#[test] +fn rustdocflags_passed_to_rustdoc_through_cargo_test() { + let p = project("foo") + .file("Cargo.toml", r#" + [package] + name = "foo" + version = "0.0.1" + "#) + .file("src/lib.rs", r#" + //! ``` + //! assert!(cfg!(do_not_choke)); + //! ``` + "#) + .build(); + + assert_that(p.cargo("test").arg("--doc").env("RUSTDOCFLAGS", "--cfg do_not_choke"), + execs().with_status(0)); +} -- 2.30.2