::FileFormat> {
let page = layout::Page {
title: "Index of crates",
short_title: "Crates",
css_class: "mod sys",
root_path: "./",
- static_root_path: cx.shared.static_root_path.as_deref(),
+ static_root_path: opt.static_root_path.as_deref(),
description: "List of crates",
- resource_suffix: &cx.shared.resource_suffix,
+ resource_suffix: &opt.resource_suffix,
rust_logo: true,
};
- let layout = &cx.shared.layout;
- let style_files = &cx.shared.style_files;
const DELIMITER: &str = "\u{FFFC}"; // users are being naughty if they have this
let content = format_args!(
"\
diff --git a/src/librustdoc/lib.rs b/src/librustdoc/lib.rs
index be830cad6c735..321cafb8f434f 100644
--- a/src/librustdoc/lib.rs
+++ b/src/librustdoc/lib.rs
@@ -77,7 +77,7 @@ use rustc_errors::DiagCtxtHandle;
use rustc_hir::def_id::LOCAL_CRATE;
use rustc_interface::interface;
use rustc_middle::ty::TyCtxt;
-use rustc_session::config::{ErrorOutputType, RustcOptGroup, make_crate_type_option};
+use rustc_session::config::{ErrorOutputType, Input, RustcOptGroup, make_crate_type_option};
use rustc_session::{EarlyDiagCtxt, getopts};
use rustc_span::{BytePos, Span, SyntaxContext};
use tracing::info;
@@ -772,7 +772,10 @@ fn run_renderer<
/// Renders and writes cross-crate info files, like the search index. This function exists so that
/// we can run rustdoc without a crate root in the `--merge=finalize` mode. Cross-crate info files
/// discovered via `--read-doc-meta-dir` are combined and written to the doc root.
-fn run_merge_finalize(opt: config::RenderOptions) -> Result<(), error::Error> {
+fn run_merge_finalize(
+ opt: config::RenderOptions,
+ compiler: &interface::Compiler,
+) -> Result<(), error::Error> {
assert!(
opt.should_merge.write_rendered_cci,
"config.rs only allows us to return InputMode::NoInputMergeFinalize if --merge=finalize"
@@ -783,16 +786,37 @@ fn run_merge_finalize(opt: config::RenderOptions) -> Result<(), error::Error> {
);
let crates = html::render::CrateInfo::read_many(&opt.include_parts_dir)?;
let include_sources = !opt.html_no_source;
- html::render::write_not_crate_specific(
- &crates,
- &opt.output,
- &opt,
- &opt.themes,
- opt.extension_css.as_deref(),
- &opt.resource_suffix,
- include_sources,
- )?;
- Ok(())
+
+ let krate = ast::Crate {
+ attrs: Default::default(),
+ items: Default::default(),
+ spans: Default::default(),
+ id: ast::DUMMY_NODE_ID,
+ is_placeholder: false,
+ };
+ rustc_interface::create_and_enter_global_ctxt(compiler, krate, |tcx| {
+ html::render::write_not_crate_specific(
+ &crates,
+ &opt.output,
+ &opt,
+ &opt.themes,
+ opt.extension_css.as_deref(),
+ &opt.resource_suffix,
+ include_sources,
+ &crate::html::layout::Layout {
+ logo: String::new(),
+ favicon: String::new(),
+ external_html: opt.external_html.clone(),
+ default_settings: opt.default_settings.clone(),
+ krate: String::new(),
+ krate_version: String::new(),
+ css_file_extension: opt.extension_css.clone(),
+ scrape_examples_extension: false,
+ },
+ tcx,
+ )?;
+ Ok(())
+ })
}
fn main_args(early_dcx: &mut EarlyDiagCtxt, at_args: &[String]) {
@@ -834,10 +858,18 @@ fn main_args(early_dcx: &mut EarlyDiagCtxt, at_args: &[String]) {
let input = match input {
config::InputMode::HasFile(input) => input,
config::InputMode::NoInputMergeFinalize => {
+ let config = core::create_config(
+ Input::Str {
+ name: rustc_span::FileName::Custom(String::new()),
+ input: String::new(),
+ },
+ options,
+ &render_options,
+ );
return wrap_return(
dcx,
- rustc_span::create_session_globals_then(options.edition, &[], None, || {
- run_merge_finalize(render_options)
+ interface::run_compiler(config, |compiler| {
+ run_merge_finalize(render_options, compiler)
.map_err(|e| format!("could not write merged cross-crate info: {e}"))
}),
);
diff --git a/tests/rustdoc-html/merge-cross-crate-info/cargo-transitive-read-write/auxiliary/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/quebec.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/cargo-transitive-read-write/auxiliary/quebec.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/quebec.rs
diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/rmake.rs
new file mode 100644
index 0000000000000..bafd625dbc8b2
--- /dev/null
+++ b/tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/rmake.rs
@@ -0,0 +1,59 @@
+//@ needs-target-std
+
+use run_make_support::{cwd, htmldocck, path, rust_lib_name, rustc, rustdoc};
+
+fn main() {
+ let merged_dir = path("merged");
+ let parts_out_dir = path("parts");
+ let lib_dir = path("lib");
+ let out_dir = path("out");
+
+ rustc().input("quebec.rs").crate_name("quebec").crate_type("rlib").run();
+ rustdoc()
+ .input("quebec.rs")
+ .crate_name("quebec")
+ .out_dir(&out_dir)
+ .arg("-Zunstable-options")
+ .arg(format!("--write-doc-meta-dir={}", parts_out_dir.display()))
+ .run();
+ assert!(parts_out_dir.join("quebec.json").exists());
+
+ rustc()
+ .input("tango.rs")
+ .crate_name("tango")
+ .crate_type("rlib")
+ .extern_("quebec", rust_lib_name("quebec"))
+ .run();
+ rustdoc()
+ .input("tango.rs")
+ .crate_name("tango")
+ .extern_("quebec", rust_lib_name("quebec"))
+ .out_dir(&out_dir)
+ .arg("-Zunstable-options")
+ .arg(format!("--write-doc-meta-dir={}", parts_out_dir.display()))
+ .run();
+ assert!(parts_out_dir.join("tango.json").exists());
+
+ rustdoc()
+ .input("sierra.rs")
+ .crate_name("sierra")
+ .extern_("tango", rust_lib_name("tango"))
+ .library_search_path(cwd())
+ .out_dir(&out_dir)
+ .arg("-Zunstable-options")
+ .arg(format!("--write-doc-meta-dir={}", parts_out_dir.display()))
+ .run();
+ assert!(parts_out_dir.join("sierra.json").exists());
+
+ let output = rustdoc()
+ .arg("-Zunstable-options")
+ .out_dir(&out_dir)
+ .arg(format!("--read-doc-meta-dir={}", parts_out_dir.display()))
+ .arg("--enable-index-page")
+ .run();
+ output.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug.");
+
+ htmldocck().arg(&out_dir).arg("tango.rs").run();
+ htmldocck().arg(&out_dir).arg("quebec.rs").run();
+ htmldocck().arg(&out_dir).arg("sierra.rs").run();
+}
diff --git a/tests/rustdoc-html/merge-cross-crate-info/cargo-transitive-read-write/sierra.rs b/tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/sierra.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/cargo-transitive-read-write/sierra.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/sierra.rs
diff --git a/tests/rustdoc-html/merge-cross-crate-info/cargo-transitive-read-write/auxiliary/tango.rs b/tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/tango.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/cargo-transitive-read-write/auxiliary/tango.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-cargo-transitive-read-write/tango.rs
diff --git a/tests/rustdoc-html/merge-cross-crate-info/kitchen-sink-separate-dirs/indigo.rs b/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/indigo.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/kitchen-sink-separate-dirs/indigo.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/indigo.rs
diff --git a/tests/rustdoc-html/merge-cross-crate-info/kitchen-sink-separate-dirs/auxiliary/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/quebec.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/kitchen-sink-separate-dirs/auxiliary/quebec.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/quebec.rs
diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/rmake.rs
new file mode 100644
index 0000000000000..d92ac11b56c58
--- /dev/null
+++ b/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/rmake.rs
@@ -0,0 +1,99 @@
+//@ needs-target-std
+
+use run_make_support::{cwd, htmldocck, path, rust_lib_name, rustc, rustdoc};
+
+fn main() {
+ let merged_dir = path("merged");
+ let parts_out_dir = path("parts");
+ let lib_dir = path("lib");
+ let out_dir = path("out");
+
+ rustc().input("quebec.rs").crate_name("quebec").crate_type("rlib").run();
+ rustdoc()
+ .input("quebec.rs")
+ .crate_name("quebec")
+ .out_dir("quebec-out")
+ .arg("-Zunstable-options")
+ .arg(format!("--write-doc-meta-dir=info/doc.parts/quebec"))
+ .arg("--enable-index-page")
+ .run();
+
+ rustc()
+ .input("tango.rs")
+ .crate_name("tango")
+ .crate_type("rlib")
+ .extern_("quebec", rust_lib_name("quebec"))
+ .run();
+ rustdoc()
+ .input("tango.rs")
+ .crate_name("tango")
+ .extern_("quebec", rust_lib_name("quebec"))
+ .out_dir("tango-out")
+ .arg("-Zunstable-options")
+ .arg(format!("--write-doc-meta-dir=info/doc.parts/tango"))
+ .arg("--enable-index-page")
+ .run();
+
+ rustc()
+ .input("sierra.rs")
+ .crate_name("sierra")
+ .crate_type("rlib")
+ .extern_("tango", rust_lib_name("tango"))
+ .library_search_path(cwd())
+ .run();
+ rustdoc()
+ .input("sierra.rs")
+ .crate_name("sierra")
+ .extern_("tango", rust_lib_name("tango"))
+ .library_search_path(cwd())
+ .out_dir("sierra-out")
+ .arg("-Zunstable-options")
+ .arg(format!("--write-doc-meta-dir=info/doc.parts/sierra"))
+ .arg("--enable-index-page")
+ .run();
+
+ rustc()
+ .input("romeo.rs")
+ .crate_name("romeo")
+ .crate_type("rlib")
+ .extern_("sierra", rust_lib_name("sierra"))
+ .library_search_path(cwd())
+ .run();
+ rustdoc()
+ .input("romeo.rs")
+ .crate_name("romeo")
+ .extern_("sierra", rust_lib_name("sierra"))
+ .library_search_path(cwd())
+ .out_dir("romeo-out")
+ .arg("-Zunstable-options")
+ .arg(format!("--write-doc-meta-dir=info/doc.parts/romeo"))
+ .arg("--enable-index-page")
+ .run();
+
+ rustdoc()
+ .input("indigo.rs")
+ .crate_name("indigo")
+ .out_dir(&out_dir)
+ .arg("-Zunstable-options")
+ .arg(format!("--write-doc-meta-dir=info/doc.parts/indigo"))
+ .arg("--enable-index-page")
+ .run();
+
+ let output = rustdoc()
+ .arg("-Zunstable-options")
+ .out_dir(&out_dir)
+ .arg("--read-doc-meta-dir=info/doc.parts/tango")
+ .arg("--read-doc-meta-dir=info/doc.parts/romeo")
+ .arg("--read-doc-meta-dir=info/doc.parts/quebec")
+ .arg("--read-doc-meta-dir=info/doc.parts/sierra")
+ .arg("--read-doc-meta-dir=info/doc.parts/indigo")
+ .arg("--enable-index-page")
+ .run();
+ output.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug.");
+
+ htmldocck().arg(&out_dir).arg("tango.rs").run();
+ htmldocck().arg(&out_dir).arg("quebec.rs").run();
+ htmldocck().arg(&out_dir).arg("sierra.rs").run();
+ htmldocck().arg(&out_dir).arg("indigo.rs").run();
+ htmldocck().arg(&out_dir).arg("romeo.rs").run();
+}
diff --git a/tests/rustdoc-html/merge-cross-crate-info/kitchen-sink-separate-dirs/auxiliary/romeo.rs b/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/romeo.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/kitchen-sink-separate-dirs/auxiliary/romeo.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/romeo.rs
diff --git a/tests/rustdoc-html/merge-cross-crate-info/kitchen-sink-separate-dirs/auxiliary/sierra.rs b/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/sierra.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/kitchen-sink-separate-dirs/auxiliary/sierra.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/sierra.rs
diff --git a/tests/rustdoc-html/merge-cross-crate-info/kitchen-sink-separate-dirs/auxiliary/tango.rs b/tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/tango.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/kitchen-sink-separate-dirs/auxiliary/tango.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-kitchen-sink-separate-dirs/tango.rs
diff --git a/tests/rustdoc-html/merge-cross-crate-info/no-merge-separate/auxiliary/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/quebec.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/no-merge-separate/auxiliary/quebec.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/quebec.rs
diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/rmake.rs
new file mode 100644
index 0000000000000..d996fecc94160
--- /dev/null
+++ b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/rmake.rs
@@ -0,0 +1,51 @@
+//@ needs-target-std
+
+use run_make_support::{cwd, htmldocck, path, rust_lib_name, rustc, rustdoc};
+
+fn main() {
+ let merged_dir = path("merged");
+ let parts_out_dir = path("parts");
+ let lib_dir = path("lib");
+ let out_dir = path("out");
+
+ rustc().input("quebec.rs").crate_name("quebec").crate_type("rlib").run();
+ rustdoc()
+ .input("quebec.rs")
+ .crate_name("quebec")
+ .out_dir(&out_dir)
+ .arg("-Zunstable-options")
+ .arg(format!("--write-doc-meta-dir={}", parts_out_dir.display()))
+ .run();
+ assert!(parts_out_dir.join("quebec.json").exists());
+
+ rustc()
+ .input("tango.rs")
+ .crate_name("tango")
+ .crate_type("rlib")
+ .extern_("quebec", rust_lib_name("quebec"))
+ .run();
+ rustdoc()
+ .input("tango.rs")
+ .crate_name("tango")
+ .extern_("quebec", rust_lib_name("quebec"))
+ .out_dir(&out_dir)
+ .arg("-Zunstable-options")
+ .arg(format!("--write-doc-meta-dir={}", parts_out_dir.display()))
+ .run();
+ assert!(parts_out_dir.join("tango.json").exists());
+
+ rustdoc()
+ .input("sierra.rs")
+ .crate_name("sierra")
+ .extern_("tango", rust_lib_name("tango"))
+ .library_search_path(cwd())
+ .out_dir(&out_dir)
+ .arg("-Zunstable-options")
+ .arg(format!("--write-doc-meta-dir={}", parts_out_dir.display()))
+ .run();
+ assert!(parts_out_dir.join("sierra.json").exists());
+
+ htmldocck().arg(&out_dir).arg("tango.rs").run();
+ htmldocck().arg(&out_dir).arg("quebec.rs").run();
+ htmldocck().arg(&out_dir).arg("sierra.rs").run();
+}
diff --git a/tests/rustdoc-html/merge-cross-crate-info/no-merge-separate/sierra.rs b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/sierra.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/no-merge-separate/sierra.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/sierra.rs
diff --git a/tests/rustdoc-html/merge-cross-crate-info/no-merge-separate/auxiliary/tango.rs b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/tango.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/no-merge-separate/auxiliary/tango.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-no-merge-separate/tango.rs
diff --git a/tests/rustdoc-html/merge-cross-crate-info/no-merge-write-anyway/auxiliary/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/quebec.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/no-merge-write-anyway/auxiliary/quebec.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/quebec.rs
diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/rmake.rs
new file mode 100644
index 0000000000000..7618e0c711fd5
--- /dev/null
+++ b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/rmake.rs
@@ -0,0 +1,48 @@
+//@ needs-target-std
+
+use run_make_support::{cwd, htmldocck, path, rfs, rust_lib_name, rustc, rustdoc};
+
+fn main() {
+ let merged_dir = path("merged");
+ let parts_out_dir = path("parts");
+ let lib_dir = path("lib");
+ let out_dir = path("out");
+
+ rustc().input("quebec.rs").crate_name("quebec").crate_type("rlib").run();
+ rustdoc()
+ .input("quebec.rs")
+ .crate_name("quebec")
+ .out_dir(&out_dir)
+ .arg("-Zunstable-options")
+ .arg("--write-doc-meta-dir=parts-wrong")
+ .run();
+
+ rustc()
+ .input("tango.rs")
+ .crate_name("tango")
+ .crate_type("rlib")
+ .extern_("quebec", rust_lib_name("quebec"))
+ .run();
+ rustdoc()
+ .input("tango.rs")
+ .crate_name("tango")
+ .extern_("quebec", rust_lib_name("quebec"))
+ .out_dir(&out_dir)
+ .arg("-Zunstable-options")
+ .arg("--write-doc-meta-dir=parts-wrong")
+ .run();
+
+ rustdoc()
+ .input("sierra.rs")
+ .crate_name("sierra")
+ .extern_("tango", rust_lib_name("tango"))
+ .library_search_path(cwd())
+ .out_dir(&out_dir)
+ .arg("-Zunstable-options")
+ .arg("--write-doc-meta-dir=parts-wrong")
+ .run();
+
+ htmldocck().arg(&out_dir).arg("tango.rs").run();
+ htmldocck().arg(&out_dir).arg("quebec.rs").run();
+ htmldocck().arg(&out_dir).arg("sierra.rs").run();
+}
diff --git a/tests/rustdoc-html/merge-cross-crate-info/no-merge-write-anyway/sierra.rs b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/sierra.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/no-merge-write-anyway/sierra.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/sierra.rs
diff --git a/tests/rustdoc-html/merge-cross-crate-info/no-merge-write-anyway/auxiliary/tango.rs b/tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/tango.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/no-merge-write-anyway/auxiliary/tango.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-no-merge-write-anyway/tango.rs
diff --git a/tests/rustdoc-html/merge-cross-crate-info/overwrite-but-include/auxiliary/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/quebec.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/overwrite-but-include/auxiliary/quebec.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/quebec.rs
diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/rmake.rs
new file mode 100644
index 0000000000000..e15e6dab4f82d
--- /dev/null
+++ b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/rmake.rs
@@ -0,0 +1,57 @@
+//@ needs-target-std
+
+use run_make_support::{cwd, htmldocck, path, rust_lib_name, rustc, rustdoc};
+
+fn main() {
+ let merged_dir = path("merged");
+ let parts_out_dir = path("parts");
+ let lib_dir = path("lib");
+ let out_dir = path("out");
+
+ rustc().input("quebec.rs").crate_name("quebec").crate_type("rlib").run();
+ rustdoc()
+ .input("quebec.rs")
+ .crate_name("quebec")
+ .out_dir(&out_dir)
+ .arg("-Zunstable-options")
+ .arg(format!("--write-doc-meta-dir=info/doc.parts/quebec"))
+ .run();
+
+ rustc()
+ .input("tango.rs")
+ .crate_name("tango")
+ .crate_type("rlib")
+ .extern_("quebec", rust_lib_name("quebec"))
+ .run();
+ rustdoc()
+ .input("tango.rs")
+ .crate_name("tango")
+ .extern_("quebec", rust_lib_name("quebec"))
+ .out_dir(&out_dir)
+ .arg("-Zunstable-options")
+ .arg(format!("--write-doc-meta-dir=info/doc.parts/tango"))
+ .run();
+
+ rustdoc()
+ .input("sierra.rs")
+ .crate_name("sierra")
+ .extern_("tango", rust_lib_name("tango"))
+ .library_search_path(cwd())
+ .out_dir(&out_dir)
+ .arg("-Zunstable-options")
+ .arg(format!("--write-doc-meta-dir=info/doc.parts/sierra"))
+ .run();
+
+ let output = rustdoc()
+ .arg("-Zunstable-options")
+ .out_dir(&out_dir)
+ .arg(format!("--read-doc-meta-dir=info/doc.parts/tango"))
+ .arg(format!("--read-doc-meta-dir=info/doc.parts/sierra"))
+ .arg("--enable-index-page")
+ .run();
+ output.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug.");
+
+ htmldocck().arg(&out_dir).arg("tango.rs").run();
+ htmldocck().arg(&out_dir).arg("quebec.rs").run();
+ htmldocck().arg(&out_dir).arg("sierra.rs").run();
+}
diff --git a/tests/rustdoc-html/merge-cross-crate-info/overwrite-but-include/sierra.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/sierra.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/overwrite-but-include/sierra.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/sierra.rs
diff --git a/tests/rustdoc-html/merge-cross-crate-info/overwrite-but-include/auxiliary/tango.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/tango.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/overwrite-but-include/auxiliary/tango.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-include/tango.rs
diff --git a/tests/rustdoc-html/merge-cross-crate-info/overwrite-but-separate/auxiliary/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/quebec.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/overwrite-but-separate/auxiliary/quebec.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/quebec.rs
diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/rmake.rs
new file mode 100644
index 0000000000000..ae0b55dc8d2de
--- /dev/null
+++ b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/rmake.rs
@@ -0,0 +1,58 @@
+//@ needs-target-std
+
+use run_make_support::{cwd, htmldocck, path, rust_lib_name, rustc, rustdoc};
+
+fn main() {
+ let merged_dir = path("merged");
+ let parts_out_dir = path("parts");
+ let lib_dir = path("lib");
+ let out_dir = path("out");
+
+ rustc().input("quebec.rs").crate_name("quebec").crate_type("rlib").run();
+ rustdoc()
+ .input("quebec.rs")
+ .crate_name("quebec")
+ .out_dir(&out_dir)
+ .arg("-Zunstable-options")
+ .arg(format!("--write-doc-meta-dir=info/doc.parts/quebec"))
+ .run();
+
+ rustc()
+ .input("tango.rs")
+ .crate_name("tango")
+ .crate_type("rlib")
+ .extern_("quebec", rust_lib_name("quebec"))
+ .run();
+ rustdoc()
+ .input("tango.rs")
+ .crate_name("tango")
+ .extern_("quebec", rust_lib_name("quebec"))
+ .out_dir(&out_dir)
+ .arg("-Zunstable-options")
+ .arg(format!("--write-doc-meta-dir=info/doc.parts/tango"))
+ .run();
+
+ rustdoc()
+ .input("sierra.rs")
+ .crate_name("sierra")
+ .extern_("tango", rust_lib_name("tango"))
+ .library_search_path(cwd())
+ .out_dir(&out_dir)
+ .arg("-Zunstable-options")
+ .arg(format!("--write-doc-meta-dir=info/doc.parts/sierra"))
+ .run();
+
+ let output = rustdoc()
+ .arg("-Zunstable-options")
+ .out_dir(&out_dir)
+ .arg(format!("--read-doc-meta-dir=info/doc.parts/tango"))
+ .arg(format!("--read-doc-meta-dir=info/doc.parts/quebec"))
+ .arg(format!("--read-doc-meta-dir=info/doc.parts/sierra"))
+ .arg("--enable-index-page")
+ .run();
+ output.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug.");
+
+ htmldocck().arg(&out_dir).arg("tango.rs").run();
+ htmldocck().arg(&out_dir).arg("quebec.rs").run();
+ htmldocck().arg(&out_dir).arg("sierra.rs").run();
+}
diff --git a/tests/rustdoc-html/merge-cross-crate-info/overwrite-but-separate/sierra.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/sierra.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/overwrite-but-separate/sierra.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/sierra.rs
diff --git a/tests/rustdoc-html/merge-cross-crate-info/overwrite-but-separate/auxiliary/tango.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/tango.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/overwrite-but-separate/auxiliary/tango.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-overwrite-but-separate/tango.rs
diff --git a/tests/rustdoc-html/merge-cross-crate-info/overwrite/auxiliary/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite/quebec.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/overwrite/auxiliary/quebec.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-overwrite/quebec.rs
diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-overwrite/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite/rmake.rs
new file mode 100644
index 0000000000000..c99c1c2f8e623
--- /dev/null
+++ b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite/rmake.rs
@@ -0,0 +1,54 @@
+//@ needs-target-std
+
+use run_make_support::{cwd, htmldocck, path, rust_lib_name, rustc, rustdoc};
+
+fn main() {
+ let merged_dir = path("merged");
+ let parts_out_dir = path("parts");
+ let lib_dir = path("lib");
+ let out_dir = path("out");
+
+ rustc().input("quebec.rs").crate_name("quebec").crate_type("rlib").run();
+ rustdoc()
+ .input("quebec.rs")
+ .crate_name("quebec")
+ .out_dir(&out_dir)
+ .arg("-Zunstable-options")
+ .arg(format!("--write-doc-meta-dir=info/doc.parts/quebec.d"))
+ .run();
+
+ rustc()
+ .input("tango.rs")
+ .crate_name("tango")
+ .crate_type("rlib")
+ .extern_("quebec", rust_lib_name("quebec"))
+ .run();
+ rustdoc()
+ .input("tango.rs")
+ .crate_name("tango")
+ .extern_("quebec", rust_lib_name("quebec"))
+ .out_dir(&out_dir)
+ .arg("-Zunstable-options")
+ .arg(format!("--write-doc-meta-dir=info/doc.parts"))
+ .run();
+
+ let output = rustdoc()
+ .arg("-Zunstable-options")
+ .out_dir(&out_dir)
+ .arg(format!("--read-doc-meta-dir=info/doc.parts"))
+ .arg("--enable-index-page")
+ .run();
+ output.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug.");
+
+ rustdoc()
+ .input("sierra.rs")
+ .crate_name("sierra")
+ .extern_("tango", rust_lib_name("tango"))
+ .library_search_path(cwd())
+ .out_dir(&out_dir)
+ .run();
+
+ htmldocck().arg(&out_dir).arg("tango.rs").run();
+ htmldocck().arg(&out_dir).arg("quebec.rs").run();
+ htmldocck().arg(&out_dir).arg("sierra.rs").run();
+}
diff --git a/tests/rustdoc-html/merge-cross-crate-info/overwrite/sierra.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite/sierra.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/overwrite/sierra.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-overwrite/sierra.rs
diff --git a/tests/rustdoc-html/merge-cross-crate-info/overwrite/auxiliary/tango.rs b/tests/run-make/rustdoc-merge-cross-crate-info-overwrite/tango.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/overwrite/auxiliary/tango.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-overwrite/tango.rs
diff --git a/tests/rustdoc-html/merge-cross-crate-info/single-crate-finalize/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-single-crate-finalize/quebec.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/single-crate-finalize/quebec.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-single-crate-finalize/quebec.rs
diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-single-crate-finalize/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-single-crate-finalize/rmake.rs
new file mode 100644
index 0000000000000..18a1e3fe78a6c
--- /dev/null
+++ b/tests/run-make/rustdoc-merge-cross-crate-info-single-crate-finalize/rmake.rs
@@ -0,0 +1,27 @@
+//@ needs-target-std
+
+use run_make_support::{htmldocck, path, rustc, rustdoc};
+
+fn main() {
+ let parts_out_dir = path("parts");
+ let out_dir = path("out");
+
+ rustdoc()
+ .input("quebec.rs")
+ .crate_name("quebec")
+ .out_dir(&out_dir)
+ .arg("-Zunstable-options")
+ .arg(format!("--write-doc-meta-dir={}", parts_out_dir.display()))
+ .run();
+ assert!(parts_out_dir.join("quebec.json").exists());
+
+ let output = rustdoc()
+ .arg("-Zunstable-options")
+ .out_dir(&out_dir)
+ .arg(format!("--read-doc-meta-dir={}", parts_out_dir.display()))
+ .arg("--enable-index-page")
+ .run();
+ output.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug.");
+
+ htmldocck().arg(&out_dir).arg("quebec.rs").run();
+}
diff --git a/tests/rustdoc-html/merge-cross-crate-info/single-crate-read-write/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-single-crate-read-write/quebec.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/single-crate-read-write/quebec.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-single-crate-read-write/quebec.rs
diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-single-crate-read-write/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-single-crate-read-write/rmake.rs
new file mode 100644
index 0000000000000..f1f3fb4ae3e3d
--- /dev/null
+++ b/tests/run-make/rustdoc-merge-cross-crate-info-single-crate-read-write/rmake.rs
@@ -0,0 +1,17 @@
+//@ needs-target-std
+
+use run_make_support::{htmldocck, path, rustc, rustdoc};
+
+fn main() {
+ let out_dir = path("out");
+
+ rustdoc()
+ .input("quebec.rs")
+ .crate_name("quebec")
+ .out_dir(&out_dir)
+ .arg("-Zunstable-options")
+ .arg("--enable-index-page")
+ .run();
+
+ htmldocck().arg(&out_dir).arg("quebec.rs").run();
+}
diff --git a/tests/rustdoc-html/merge-cross-crate-info/transitive-merge-none/auxiliary/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/quebec.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/transitive-merge-none/auxiliary/quebec.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/quebec.rs
diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/rmake.rs
new file mode 100644
index 0000000000000..d61f7f3bb10d3
--- /dev/null
+++ b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/rmake.rs
@@ -0,0 +1,58 @@
+//@ needs-target-std
+
+use run_make_support::{cwd, htmldocck, path, rust_lib_name, rustc, rustdoc};
+
+fn main() {
+ let merged_dir = path("merged");
+ let parts_out_dir = path("parts");
+ let lib_dir = path("lib");
+ let out_dir = path("out");
+
+ rustc().input("quebec.rs").crate_name("quebec").crate_type("rlib").run();
+ rustdoc()
+ .input("quebec.rs")
+ .crate_name("quebec")
+ .out_dir(&out_dir)
+ .arg("-Zunstable-options")
+ .arg("--write-doc-meta-dir=info/doc.parts/quebec")
+ .run();
+
+ rustc()
+ .input("tango.rs")
+ .crate_name("tango")
+ .crate_type("rlib")
+ .extern_("quebec", rust_lib_name("quebec"))
+ .run();
+ rustdoc()
+ .input("tango.rs")
+ .crate_name("tango")
+ .extern_("quebec", rust_lib_name("quebec"))
+ .out_dir(&out_dir)
+ .arg("-Zunstable-options")
+ .arg("--write-doc-meta-dir=info/doc.parts/tango")
+ .run();
+
+ rustdoc()
+ .input("sierra.rs")
+ .crate_name("sierra")
+ .extern_("tango", rust_lib_name("tango"))
+ .library_search_path(cwd())
+ .out_dir(&out_dir)
+ .arg("-Zunstable-options")
+ .arg("--write-doc-meta-dir=info/doc.parts/sierra")
+ .run();
+
+ let output = rustdoc()
+ .arg("-Zunstable-options")
+ .out_dir(&out_dir)
+ .arg("--read-doc-meta-dir=info/doc.parts/tango")
+ .arg("--read-doc-meta-dir=info/doc.parts/quebec")
+ .arg("--read-doc-meta-dir=info/doc.parts/sierra")
+ .arg("--enable-index-page")
+ .run();
+ output.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug.");
+
+ htmldocck().arg(&out_dir).arg("tango.rs").run();
+ htmldocck().arg(&out_dir).arg("quebec.rs").run();
+ htmldocck().arg(&out_dir).arg("sierra.rs").run();
+}
diff --git a/tests/rustdoc-html/merge-cross-crate-info/transitive-merge-none/sierra.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/sierra.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/transitive-merge-none/sierra.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/sierra.rs
diff --git a/tests/rustdoc-html/merge-cross-crate-info/transitive-merge-none/auxiliary/tango.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/tango.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/transitive-merge-none/auxiliary/tango.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-none/tango.rs
diff --git a/tests/rustdoc-html/merge-cross-crate-info/transitive-merge-read-write/auxiliary/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/quebec.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/transitive-merge-read-write/auxiliary/quebec.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/quebec.rs
diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/rmake.rs
new file mode 100644
index 0000000000000..019d497da1c65
--- /dev/null
+++ b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/rmake.rs
@@ -0,0 +1,48 @@
+//@ needs-target-std
+
+use run_make_support::{cwd, htmldocck, path, rust_lib_name, rustc, rustdoc};
+
+fn main() {
+ let merged_dir = path("merged");
+ let parts_out_dir = path("parts");
+ let lib_dir = path("lib");
+ let out_dir = path("out");
+
+ rustc().input("quebec.rs").crate_name("quebec").crate_type("rlib").run();
+ rustdoc()
+ .input("quebec.rs")
+ .crate_name("quebec")
+ .out_dir(&out_dir)
+ .arg("-Zunstable-options")
+ .arg("--enable-index-page")
+ .run();
+
+ rustc()
+ .input("tango.rs")
+ .crate_name("tango")
+ .crate_type("rlib")
+ .extern_("quebec", rust_lib_name("quebec"))
+ .run();
+ rustdoc()
+ .input("tango.rs")
+ .crate_name("tango")
+ .extern_("quebec", rust_lib_name("quebec"))
+ .out_dir(&out_dir)
+ .arg("-Zunstable-options")
+ .arg("--enable-index-page")
+ .run();
+
+ rustdoc()
+ .input("sierra.rs")
+ .crate_name("sierra")
+ .extern_("tango", rust_lib_name("tango"))
+ .library_search_path(cwd())
+ .out_dir(&out_dir)
+ .arg("-Zunstable-options")
+ .arg("--enable-index-page")
+ .run();
+
+ htmldocck().arg(&out_dir).arg("tango.rs").run();
+ htmldocck().arg(&out_dir).arg("quebec.rs").run();
+ htmldocck().arg(&out_dir).arg("sierra.rs").run();
+}
diff --git a/tests/rustdoc-html/merge-cross-crate-info/transitive-merge-read-write/sierra.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/sierra.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/transitive-merge-read-write/sierra.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/sierra.rs
diff --git a/tests/rustdoc-html/merge-cross-crate-info/transitive-merge-read-write/auxiliary/tango.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/tango.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/transitive-merge-read-write/auxiliary/tango.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-transitive-merge-read-write/tango.rs
diff --git a/tests/rustdoc-html/merge-cross-crate-info/transitive-no-info/auxiliary/quebec.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/quebec.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/transitive-no-info/auxiliary/quebec.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/quebec.rs
diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/rmake.rs
new file mode 100644
index 0000000000000..dcbc605be4629
--- /dev/null
+++ b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/rmake.rs
@@ -0,0 +1,48 @@
+//@ needs-target-std
+
+use run_make_support::{cwd, htmldocck, path, rust_lib_name, rustc, rustdoc};
+
+fn main() {
+ let merged_dir = path("merged");
+ let parts_out_dir = path("parts");
+ let lib_dir = path("lib");
+ let out_dir = path("out");
+
+ rustc().input("quebec.rs").crate_name("quebec").crate_type("rlib").run();
+ rustdoc()
+ .input("quebec.rs")
+ .crate_name("quebec")
+ .out_dir(&out_dir)
+ .arg("-Zunstable-options")
+ .arg("--write-doc-meta-dir=info/doc.parts/quebec")
+ .run();
+
+ rustc()
+ .input("tango.rs")
+ .crate_name("tango")
+ .crate_type("rlib")
+ .extern_("quebec", rust_lib_name("quebec"))
+ .run();
+ rustdoc()
+ .input("tango.rs")
+ .crate_name("tango")
+ .extern_("quebec", rust_lib_name("quebec"))
+ .out_dir(&out_dir)
+ .arg("-Zunstable-options")
+ .arg("--write-doc-meta-dir=info/doc.parts/tango")
+ .run();
+
+ rustdoc()
+ .input("sierra.rs")
+ .crate_name("sierra")
+ .extern_("tango", rust_lib_name("tango"))
+ .library_search_path(cwd())
+ .out_dir(&out_dir)
+ .arg("-Zunstable-options")
+ .arg("--write-doc-meta-dir=info/doc.parts/sierra")
+ .run();
+
+ htmldocck().arg(&out_dir).arg("tango.rs").run();
+ htmldocck().arg(&out_dir).arg("quebec.rs").run();
+ htmldocck().arg(&out_dir).arg("sierra.rs").run();
+}
diff --git a/tests/rustdoc-html/merge-cross-crate-info/transitive-no-info/sierra.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/sierra.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/transitive-no-info/sierra.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/sierra.rs
diff --git a/tests/rustdoc-html/merge-cross-crate-info/transitive-no-info/auxiliary/tango.rs b/tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/tango.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/transitive-no-info/auxiliary/tango.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-transitive-no-info/tango.rs
diff --git a/tests/rustdoc-html/merge-cross-crate-info/two-separate-out-dir/echo.rs b/tests/run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir/echo.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/two-separate-out-dir/echo.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir/echo.rs
diff --git a/tests/rustdoc-html/merge-cross-crate-info/two-separate-out-dir/auxiliary/foxtrot.rs b/tests/run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir/foxtrot.rs
similarity index 100%
rename from tests/rustdoc-html/merge-cross-crate-info/two-separate-out-dir/auxiliary/foxtrot.rs
rename to tests/run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir/foxtrot.rs
diff --git a/tests/run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir/rmake.rs b/tests/run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir/rmake.rs
new file mode 100644
index 0000000000000..5c46c1751d6df
--- /dev/null
+++ b/tests/run-make/rustdoc-merge-cross-crate-info-two-separate-out-dir/rmake.rs
@@ -0,0 +1,41 @@
+//@ needs-target-std
+
+use run_make_support::{cwd, htmldocck, path, rust_lib_name, rustc, rustdoc};
+
+fn main() {
+ let merged_dir = path("merged");
+ let parts_out_dir = path("parts");
+ let lib_dir = path("lib");
+ let out_dir = path("out");
+ let alt_out_dir = path("alt-out");
+
+ rustc().input("foxtrot.rs").crate_name("foxtrot").crate_type("rlib").run();
+ rustdoc()
+ .input("foxtrot.rs")
+ .crate_name("foxtrot")
+ .out_dir(&alt_out_dir)
+ .arg("-Zunstable-options")
+ .arg("--write-doc-meta-dir=info/doc.parts/foxtrot")
+ .run();
+
+ rustdoc()
+ .input("echo.rs")
+ .crate_name("echo")
+ .extern_("foxtrot", rust_lib_name("foxtrot"))
+ .out_dir(&out_dir)
+ .arg("-Zunstable-options")
+ .arg("--write-doc-meta-dir=info/doc.parts/echo")
+ .run();
+
+ let output = rustdoc()
+ .arg("-Zunstable-options")
+ .out_dir(&out_dir)
+ .arg("--read-doc-meta-dir=info/doc.parts/echo")
+ .arg("--read-doc-meta-dir=info/doc.parts/foxtrot")
+ .arg("--enable-index-page")
+ .run();
+ output.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug.");
+
+ htmldocck().arg(&out_dir).arg("echo.rs").run();
+ htmldocck().arg(&out_dir).arg("foxtrot.rs").run();
+}
diff --git a/tests/rustdoc-html/merge-cross-crate-info/single-crate-write-anyway/quebec.rs b/tests/rustdoc-html/merge-cross-crate-info/single-crate-write-anyway/quebec.rs
deleted file mode 100644
index fde3635e62250..0000000000000
--- a/tests/rustdoc-html/merge-cross-crate-info/single-crate-write-anyway/quebec.rs
+++ /dev/null
@@ -1,13 +0,0 @@
-//@ doc-flags:--read-doc-meta-dir=.
-//@ doc-flags:--enable-index-page
-//@ doc-flags:-Zunstable-options
-
-//@ has index.html
-//@ has index.html '//h1' 'List of all crates'
-//@ has index.html '//ul[@class="all-items"]//a[@href="quebec/index.html"]' 'quebec'
-//@ has quebec/struct.Quebec.html
-//@ hasraw search.index/name/*.js 'Quebec'
-
-// we can --write-doc-meta-dir, but that doesn't do anything other than create
-// the file
-pub struct Quebec;