diff --git a/src/doc/rustdoc/src/unstable-features.md b/src/doc/rustdoc/src/unstable-features.md index 26985e67abb6e..4fad13c14eb9f 100644 --- a/src/doc/rustdoc/src/unstable-features.md +++ b/src/doc/rustdoc/src/unstable-features.md @@ -206,17 +206,15 @@ This is very easy to use in scripts that manually invoke rustdoc, but it's also performs O(crates) work on every crate, meaning it performs O(crates2) work. When `--write-doc-meta-dir` and/or `--read-doc-meta-dir` are supplied, this is turned off. -When `--write-doc-meta-dir` is supplied, rustdoc will write the crate's metadata to that directory. -If this parameter is supplied but `--read-doc-meta-dir` isn't, it runs in *intermediate mode*: -some pages may be written to the output dir, but there is a lot of functionality that won't work -until rustdoc is run in *finalize mode*. +When `--write-doc-meta-dir` is supplied, rustdoc will write the crate's shared metadata to +that directory. This is an *intermediate mode* where it may write some files to the doc output +directory, but some features won't work until it is finalized. -When `--read-doc-meta-dir` is supplied, rustdoc runs in *finalize mode*. It will read the data from -the supplied directory, and will write it to the doc output directory in the form that the web -frontend will use. +When `--read-doc-meta-dir` is supplied, it runs it in *finalize mode*. No crate source code is +passed to rustdoc when it runs in this mode. Multiple `--read-doc-meta-dir` can be passed to +rustdoc, so your build system can split the state between multiple directories if that helps. -If both `--write-doc-meta-dir` and `--read-doc-meta-dir` are specified, the crate metadata will be -written to both the HTML `--out-dir` and to the supplied `--write-doc-meta-dir`. +Both `--write-doc-meta-dir` and `--read-doc-meta-dir` can't be supplied at once. ```console $ rustdoc crate1.rs --out-dir=doc @@ -231,10 +229,13 @@ To delay shared-data merging until the end of a build, so that you only have to work, use `--write-doc-meta-dir` on every crate, and the last will use `--read-doc-meta-dir`. ```console -$ rustdoc +nightly crate1.rs --write-doc-meta=crate1.d -Zunstable-options +$ rustdoc +nightly crate1.rs --write-doc-meta-dir=crate1.d -Zunstable-options $ cat doc/search.index/crateNames/* cat: 'doc/search.index/crateNames/*': No such file or directory -$ rustdoc +nightly crate2.rs --read-doc-meta=crate1.d -Zunstable-options +$ rustdoc +nightly crate2.rs --write-doc-meta-dir=crate2.d -Zunstable-options +$ cat doc/search.index/crateNames/* +cat: 'doc/search.index/crateNames/*': No such file or directory +$ rustdoc +nightly --read-doc-meta-dir=crate1.d --read-doc-meta-dir=crate2.d -Zunstable-options $ cat doc/search.index/crateNames/* rd_("fcrate1fcrate2") ``` diff --git a/src/librustdoc/html/render/write_shared.rs b/src/librustdoc/html/render/write_shared.rs index ad8c6588e521f..6ac448c18aa29 100644 --- a/src/librustdoc/html/render/write_shared.rs +++ b/src/librustdoc/html/render/write_shared.rs @@ -111,28 +111,9 @@ pub(crate) fn write_shared( cx.shared.layout.css_file_extension.as_deref(), &cx.shared.resource_suffix, cx.info.include_sources, + &cx.shared.layout, + cx.shared.tcx, )?; - match &opt.index_page { - Some(index_page) if opt.enable_index_page => { - let mut md_opts = opt.clone(); - md_opts.output = cx.dst.clone(); - md_opts.external_html = cx.shared.layout.external_html.clone(); - let file = try_err!(cx.sess().source_map().load_file(&index_page), &index_page); - try_err!( - crate::markdown::render_and_write(file, md_opts, cx.shared.edition()), - &index_page - ); - } - None if opt.enable_index_page => { - write_rendered_cci::( - || CratesIndexPart::blank(cx), - &cx.dst, - &crates, - &opt.should_merge, - )?; - } - _ => {} // they don't want an index page - } } cx.shared.fs.set_sync_only(false); @@ -150,9 +131,32 @@ pub(crate) fn write_not_crate_specific( css_file_extension: Option<&Path>, resource_suffix: &str, include_sources: bool, + layout: &layout::Layout, + tcx: TyCtxt<'_>, ) -> Result<(), Error> { write_rendered_cross_crate_info(crates, dst, opt, include_sources, resource_suffix)?; write_resources(dst, opt, style_files, css_file_extension, resource_suffix)?; + match &opt.index_page { + Some(index_page) if opt.enable_index_page => { + let mut md_opts = opt.clone(); + md_opts.output = dst.to_path_buf(); + md_opts.external_html = layout.external_html.clone(); + let file = try_err!(tcx.sess.source_map().load_file(&index_page), &index_page); + try_err!( + crate::markdown::render_and_write(file, md_opts, tcx.sess.edition()), + &index_page + ); + } + None if opt.enable_index_page => { + write_rendered_cci::( + || CratesIndexPart::blank(layout, opt, style_files), + &dst, + &crates, + &opt.should_merge, + )?; + } + _ => {} // they don't want an index page + } Ok(()) } @@ -399,19 +403,21 @@ impl CciPart for CratesIndexPart { } impl CratesIndexPart { - fn blank(cx: &Context<'_>) -> SortedTemplate<::FileFormat> { + fn blank( + layout: &layout::Layout, + opt: &RenderOptions, + style_files: &[StylePath], + ) -> SortedTemplate<::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;