@@ -685,19 +685,6 @@ impl Step for Rustc {
685685 target,
686686 ) ;
687687
688- // This uses a shared directory so that librustdoc documentation gets
689- // correctly built and merged with the rustc documentation. This is
690- // needed because rustdoc is built in a different directory from
691- // rustc. rustdoc needs to be able to see everything, for example when
692- // merging the search index, or generating local (relative) links.
693- let out_dir = builder. stage_out ( compiler, Mode :: Rustc ) . join ( target. triple ) . join ( "doc" ) ;
694- t ! ( fs:: create_dir_all( out_dir. parent( ) . unwrap( ) ) ) ;
695- symlink_dir_force ( & builder. config , & out, & out_dir) ;
696- // Cargo puts proc macros in `target/doc` even if you pass `--target`
697- // explicitly (https://github.com/rust-lang/cargo/issues/7677).
698- let proc_macro_out_dir = builder. stage_out ( compiler, Mode :: Rustc ) . join ( "doc" ) ;
699- symlink_dir_force ( & builder. config , & out, & proc_macro_out_dir) ;
700-
701688 // Build cargo command.
702689 let mut cargo = builder. cargo ( compiler, Mode :: Rustc , SourceType :: InTree , target, "doc" ) ;
703690 cargo. rustdocflag ( "--document-private-items" ) ;
@@ -724,6 +711,7 @@ impl Step for Rustc {
724711
725712 let mut to_open = None ;
726713
714+ let out_dir = builder. stage_out ( compiler, Mode :: Rustc ) . join ( target. triple ) . join ( "doc" ) ;
727715 for krate in & * self . crates {
728716 // Create all crate output directories first to make sure rustdoc uses
729717 // relative links.
@@ -736,8 +724,29 @@ impl Step for Rustc {
736724 }
737725 }
738726
727+ // This uses a shared directory so that librustdoc documentation gets
728+ // correctly built and merged with the rustc documentation.
729+ //
730+ // This is needed because rustdoc is built in a different directory from
731+ // rustc. rustdoc needs to be able to see everything, for example when
732+ // merging the search index, or generating local (relative) links.
733+ symlink_dir_force ( & builder. config , & out, & out_dir) ;
734+ // Cargo puts proc macros in `target/doc` even if you pass `--target`
735+ // explicitly (https://github.com/rust-lang/cargo/issues/7677).
736+ let proc_macro_out_dir = builder. stage_out ( compiler, Mode :: Rustc ) . join ( "doc" ) ;
737+ symlink_dir_force ( & builder. config , & out, & proc_macro_out_dir) ;
738+
739739 builder. run ( & mut cargo. into ( ) ) ;
740740
741+ if !builder. config . dry_run ( ) {
742+ // Sanity check on linked compiler crates
743+ for krate in & * self . crates {
744+ let dir_name = krate. replace ( "-" , "_" ) ;
745+ // Making sure the directory exists and is not empty.
746+ assert ! ( out. join( & * dir_name) . read_dir( ) . unwrap( ) . next( ) . is_some( ) ) ;
747+ }
748+ }
749+
741750 if builder. paths . iter ( ) . any ( |path| path. ends_with ( "compiler" ) ) {
742751 // For `x.py doc compiler --open`, open `rustc_middle` by default.
743752 let index = out. join ( "rustc_middle" ) . join ( "index.html" ) ;
@@ -756,10 +765,10 @@ macro_rules! tool_doc {
756765 $should_run: literal,
757766 $path: literal,
758767 $( rustc_tool = $rustc_tool: literal, ) ?
759- $( in_tree = $in_tree: literal, ) ?
760- [ $ ( $extra_arg : literal ) ,+ $ ( , ) ?]
761- $( , ) ?
762- ) => {
768+ $( in_tree = $in_tree: literal , ) ?
769+ $ ( is_library = $is_library : expr , ) ?
770+ $( crates = $crates : expr ) ?
771+ ) => {
763772 #[ derive( Debug , Copy , Clone , Hash , PartialEq , Eq ) ]
764773 pub struct $tool {
765774 target: TargetSelection ,
@@ -812,17 +821,6 @@ macro_rules! tool_doc {
812821 SourceType :: Submodule
813822 } ;
814823
815- // Symlink compiler docs to the output directory of rustdoc documentation.
816- let out_dirs = [
817- builder. stage_out( compiler, Mode :: ToolRustc ) . join( target. triple) . join( "doc" ) ,
818- // Cargo uses a different directory for proc macros.
819- builder. stage_out( compiler, Mode :: ToolRustc ) . join( "doc" ) ,
820- ] ;
821- for out_dir in out_dirs {
822- t!( fs:: create_dir_all( & out_dir) ) ;
823- symlink_dir_force( & builder. config, & out, & out_dir) ;
824- }
825-
826824 // Build cargo command.
827825 let mut cargo = prepare_tool_cargo(
828826 builder,
@@ -839,9 +837,13 @@ macro_rules! tool_doc {
839837 // Only include compiler crates, no dependencies of those, such as `libc`.
840838 cargo. arg( "--no-deps" ) ;
841839
842- $(
843- cargo. arg( $extra_arg) ;
844- ) +
840+ if false $( || $is_library) ? {
841+ cargo. arg( "--lib" ) ;
842+ }
843+
844+ $( for krate in $crates {
845+ cargo. arg( "-p" ) . arg( krate) ;
846+ } ) ?
845847
846848 cargo. rustdocflag( "--document-private-items" ) ;
847849 // Since we always pass --document-private-items, there's no need to warn about linking to private items.
@@ -851,62 +853,69 @@ macro_rules! tool_doc {
851853 cargo. rustdocflag( "--generate-link-to-definition" ) ;
852854 cargo. rustdocflag( "-Zunstable-options" ) ;
853855
856+ let out_dir = builder. stage_out( compiler, Mode :: ToolRustc ) . join( target. triple) . join( "doc" ) ;
857+ $( for krate in $crates {
858+ let dir_name = krate. replace( "-" , "_" ) ;
859+ t!( fs:: create_dir_all( out_dir. join( & * dir_name) ) ) ;
860+ } ) ?
861+
862+ // Symlink compiler docs to the output directory of rustdoc documentation.
863+ symlink_dir_force( & builder. config, & out, & out_dir) ;
864+ let proc_macro_out_dir = builder. stage_out( compiler, Mode :: ToolRustc ) . join( "doc" ) ;
865+ symlink_dir_force( & builder. config, & out, & proc_macro_out_dir) ;
866+
854867 let _guard = builder. msg_doc( compiler, stringify!( $tool) . to_lowercase( ) , target) ;
855868 builder. run( & mut cargo. into( ) ) ;
869+
870+ if !builder. config. dry_run( ) {
871+ // Sanity check on linked doc directories
872+ $( for krate in $crates {
873+ let dir_name = krate. replace( "-" , "_" ) ;
874+ // Making sure the directory exists and is not empty.
875+ assert!( out. join( & * dir_name) . read_dir( ) . unwrap( ) . next( ) . is_some( ) ) ;
876+ } ) ?
877+ }
856878 }
857879 }
858880 }
859881}
860882
861- tool_doc ! (
862- Rustdoc ,
863- "rustdoc-tool" ,
864- "src/tools/rustdoc" ,
865- [ "-p" , "rustdoc" , "-p" , "rustdoc-json-types" ]
866- ) ;
883+ tool_doc ! ( Rustdoc , "rustdoc-tool" , "src/tools/rustdoc" , crates = [ "rustdoc" , "rustdoc-json-types" ] ) ;
867884tool_doc ! (
868885 Rustfmt ,
869886 "rustfmt-nightly" ,
870887 "src/tools/rustfmt" ,
871- [ "-p" , " rustfmt-nightly", "-p" , " rustfmt-config_proc_macro"] ,
888+ crates = [ " rustfmt-nightly", "rustfmt-config_proc_macro" ]
872889) ;
873- tool_doc ! ( Clippy , "clippy" , "src/tools/clippy" , [ "-p" , "clippy_utils" ] ) ;
874- tool_doc ! ( Miri , "miri" , "src/tools/miri" , [ "-p" , "miri" ] ) ;
890+ tool_doc ! ( Clippy , "clippy" , "src/tools/clippy" , crates = [ "clippy_utils" ] ) ;
891+ tool_doc ! ( Miri , "miri" , "src/tools/miri" , crates = [ "miri" ] ) ;
875892tool_doc ! (
876893 Cargo ,
877894 "cargo" ,
878895 "src/tools/cargo" ,
879896 rustc_tool = false ,
880897 in_tree = false ,
881- [
882- "-p" ,
898+ crates = [
883899 "cargo" ,
884- "-p" ,
885900 "cargo-platform" ,
886- "-p" ,
887901 "cargo-util" ,
888- "-p" ,
889902 "crates-io" ,
890- "-p" ,
891903 "cargo-test-macro" ,
892- "-p" ,
893904 "cargo-test-support" ,
894- "-p" ,
895905 "cargo-credential" ,
896- "-p" ,
897906 "mdman" ,
898907 // FIXME: this trips a license check in tidy.
899- // "-p",
900908 // "resolver-tests",
901909 ]
902910) ;
903- tool_doc ! ( Tidy , "tidy" , "src/tools/tidy" , rustc_tool = false , [ "-p" , "tidy" ] ) ;
911+ tool_doc ! ( Tidy , "tidy" , "src/tools/tidy" , rustc_tool = false , crates = [ "tidy" ] ) ;
904912tool_doc ! (
905913 Bootstrap ,
906914 "bootstrap" ,
907915 "src/bootstrap" ,
908916 rustc_tool = false ,
909- [ "--lib" , "-p" , "bootstrap" ]
917+ is_library = true ,
918+ crates = [ "bootstrap" ]
910919) ;
911920
912921#[ derive( Ord , PartialOrd , Debug , Copy , Clone , Hash , PartialEq , Eq ) ]
0 commit comments