@@ -1493,7 +1493,7 @@ mod snapshot {
1493
1493
/// This also serves as an important regression test for <https://github.com/rust-lang/rust/issues/138123>
1494
1494
/// and <https://github.com/rust-lang/rust/issues/138004>.
1495
1495
#[ test]
1496
- fn dist_all_cross ( ) {
1496
+ fn dist_all_cross_extended ( ) {
1497
1497
let ctx = TestCtx :: new ( ) ;
1498
1498
insta:: assert_snapshot!(
1499
1499
ctx
@@ -1571,8 +1571,77 @@ mod snapshot {
1571
1571
" ) ;
1572
1572
}
1573
1573
1574
- // Enable dist cranelift tarball by default with `x dist` if cranelift is enabled in
1575
- // `rust.codegen-backends`.
1574
+ /// Simulates e.g. the powerpc64 builder, which is fully cross-compiled from x64, but it does
1575
+ /// not build docs. Crutically, it shouldn't build host stage 2 rustc.
1576
+ #[ test]
1577
+ fn dist_all_cross_extended_no_docs ( ) {
1578
+ let ctx = TestCtx :: new ( ) ;
1579
+ let steps = ctx
1580
+ . config ( "dist" )
1581
+ . hosts ( & [ TEST_TRIPLE_1 ] )
1582
+ . targets ( & [ TEST_TRIPLE_1 ] )
1583
+ . args ( & [
1584
+ "--set" ,
1585
+ "rust.channel=nightly" ,
1586
+ "--set" ,
1587
+ "build.extended=true" ,
1588
+ "--set" ,
1589
+ "build.docs=false" ,
1590
+ ] )
1591
+ . get_steps ( ) ;
1592
+
1593
+ // Make sure that we don't build stage2 host rustc
1594
+ // steps.assert_no_match(|m| {
1595
+ // m.name == "rustc"
1596
+ // && m.built_by.map(|b| b.stage) == Some(1)
1597
+ // && *m.target.triple == host_target()
1598
+ // });
1599
+
1600
+ insta:: assert_snapshot!(
1601
+ steps. render( ) , @r"
1602
+ [dist] mingw <target1>
1603
+ [build] llvm <host>
1604
+ [build] llvm <target1>
1605
+ [build] rustc 0 <host> -> rustc 1 <host>
1606
+ [build] rustc 0 <host> -> WasmComponentLd 1 <host>
1607
+ [build] rustc 1 <host> -> std 1 <target1>
1608
+ [build] rustc 1 <host> -> std 1 <host>
1609
+ [build] rustc 1 <host> -> rustc 2 <target1>
1610
+ [build] rustc 1 <host> -> WasmComponentLd 2 <target1>
1611
+ [build] rustdoc 2 <target1>
1612
+ [build] rustc 1 <host> -> rust-analyzer-proc-macro-srv 2 <target1>
1613
+ [build] rustc 0 <host> -> GenerateCopyright 1 <host>
1614
+ [build] rustc 0 <host> -> RustInstaller 1 <host>
1615
+ [dist] rustc <target1>
1616
+ [build] rustc 1 <host> -> rustc 2 <host>
1617
+ [build] rustc 1 <host> -> WasmComponentLd 2 <host>
1618
+ [build] rustc 2 <host> -> std 2 <target1>
1619
+ [dist] rustc 2 <host> -> std 2 <target1>
1620
+ [dist] rustc 1 <host> -> rustc-dev 2 <target1>
1621
+ [dist] rustc 1 <host> -> analysis 2 <target1>
1622
+ [dist] src <>
1623
+ [build] rustc 1 <host> -> cargo 2 <target1>
1624
+ [dist] rustc 1 <host> -> cargo 2 <target1>
1625
+ [build] rustc 1 <host> -> rust-analyzer 2 <target1>
1626
+ [dist] rustc 1 <host> -> rust-analyzer 2 <target1>
1627
+ [build] rustc 1 <host> -> rustfmt 2 <target1>
1628
+ [build] rustc 1 <host> -> cargo-fmt 2 <target1>
1629
+ [dist] rustc 1 <host> -> rustfmt 2 <target1>
1630
+ [build] rustc 1 <host> -> clippy-driver 2 <target1>
1631
+ [build] rustc 1 <host> -> cargo-clippy 2 <target1>
1632
+ [dist] rustc 1 <host> -> clippy 2 <target1>
1633
+ [build] rustc 1 <host> -> miri 2 <target1>
1634
+ [build] rustc 1 <host> -> cargo-miri 2 <target1>
1635
+ [dist] rustc 1 <host> -> miri 2 <target1>
1636
+ [build] rustc 1 <host> -> LlvmBitcodeLinker 2 <target1>
1637
+ [dist] rustc 1 <host> -> std 1 <target1>
1638
+ [dist] rustc 1 <host> -> extended 2 <target1>
1639
+ [dist] reproducible-artifacts <target1>
1640
+ " ) ;
1641
+ }
1642
+
1643
+ /// Enable dist cranelift tarball by default with `x dist` if cranelift is enabled in
1644
+ /// `rust.codegen-backends`.
1576
1645
#[ test]
1577
1646
fn dist_cranelift_by_default ( ) {
1578
1647
let ctx = TestCtx :: new ( ) ;
@@ -2426,6 +2495,21 @@ impl ExecutedSteps {
2426
2495
}
2427
2496
}
2428
2497
2498
+ /// Make sure that no metadata matches the given `func`.
2499
+ #[ track_caller]
2500
+ fn assert_no_match < F > ( & self , func : F )
2501
+ where
2502
+ F : Fn ( StepMetadata ) -> bool ,
2503
+ {
2504
+ for metadata in self . steps . iter ( ) . filter_map ( |s| s. metadata . clone ( ) ) {
2505
+ if func ( metadata. clone ( ) ) {
2506
+ panic ! (
2507
+ "Metadata {metadata:?} was found, even though it should have not been present"
2508
+ ) ;
2509
+ }
2510
+ }
2511
+ }
2512
+
2429
2513
fn contains ( & self , metadata : & StepMetadata ) -> bool {
2430
2514
self . steps
2431
2515
. iter ( )
0 commit comments