@@ -401,12 +401,13 @@ impl Step for RustAnalyzer {
401
401
402
402
macro_rules! tool_check_step {
403
403
(
404
- $name: ident,
405
- $display_name: literal,
406
- $path: literal,
407
- $( $alias: literal, ) *
408
- $source_type: path
409
- $( , $default: literal ) ?
404
+ $name: ident {
405
+ // The part of this path after the final '/' is also used as a display name.
406
+ path: $path: literal
407
+ $( , alt_path: $alt_path: literal ) *
408
+ $( , default : $default: literal ) ?
409
+ $( , ) ?
410
+ }
410
411
) => {
411
412
#[ derive( Debug , Clone , PartialEq , Eq , Hash ) ]
412
413
pub struct $name {
@@ -416,94 +417,83 @@ macro_rules! tool_check_step {
416
417
impl Step for $name {
417
418
type Output = ( ) ;
418
419
const ONLY_HOSTS : bool = true ;
419
- /// don't ever check out-of-tree tools by default, they'll fail when toolstate is broken
420
- const DEFAULT : bool = matches! ( $source_type , SourceType :: InTree ) $( && $default ) ?;
420
+ /// Most of the tool-checks using this macro are run by default.
421
+ const DEFAULT : bool = true $( && $default ) ?;
421
422
422
423
fn should_run( run: ShouldRun <' _>) -> ShouldRun <' _> {
423
- run. paths( & [ $path, $( $alias ) ,* ] )
424
+ run. paths( & [ $path, $( $alt_path ) ,* ] )
424
425
}
425
426
426
427
fn make_run( run: RunConfig <' _>) {
427
428
run. builder. ensure( $name { target: run. target } ) ;
428
429
}
429
430
430
431
fn run( self , builder: & Builder <' _>) {
431
- let compiler = builder. compiler( builder. top_stage, builder. config. build) ;
432
- let target = self . target;
433
-
434
- builder. ensure( Rustc :: new( target, builder) ) ;
435
-
436
- let mut cargo = prepare_tool_cargo(
437
- builder,
438
- compiler,
439
- Mode :: ToolRustc ,
440
- target,
441
- builder. kind,
442
- $path,
443
- $source_type,
444
- & [ ] ,
445
- ) ;
446
-
447
- // For ./x.py clippy, don't run with --all-targets because
448
- // linting tests and benchmarks can produce very noisy results
449
- if builder. kind != Kind :: Clippy {
450
- cargo. arg( "--all-targets" ) ;
451
- }
452
-
453
- let _guard = builder. msg_check( & format!( "{} artifacts" , $display_name) , target) ;
454
- run_cargo(
455
- builder,
456
- cargo,
457
- builder. config. free_args. clone( ) ,
458
- & stamp( builder, compiler, target) ,
459
- vec![ ] ,
460
- true ,
461
- false ,
462
- ) ;
463
-
464
- /// Cargo's output path in a given stage, compiled by a particular
465
- /// compiler for the specified target.
466
- fn stamp(
467
- builder: & Builder <' _>,
468
- compiler: Compiler ,
469
- target: TargetSelection ,
470
- ) -> PathBuf {
471
- builder
472
- . cargo_out( compiler, Mode :: ToolRustc , target)
473
- . join( format!( ".{}-check.stamp" , stringify!( $name) . to_lowercase( ) ) )
474
- }
432
+ let Self { target } = self ;
433
+ run_tool_check_step( builder, target, stringify!( $name) , $path) ;
475
434
}
476
435
}
477
- } ;
436
+ }
437
+ }
438
+
439
+ /// Used by the implementation of `Step::run` in `tool_check_step!`.
440
+ fn run_tool_check_step (
441
+ builder : & Builder < ' _ > ,
442
+ target : TargetSelection ,
443
+ step_type_name : & str ,
444
+ path : & str ,
445
+ ) {
446
+ let display_name = path. rsplit ( '/' ) . next ( ) . unwrap ( ) ;
447
+ let compiler = builder. compiler ( builder. top_stage , builder. config . build ) ;
448
+
449
+ builder. ensure ( Rustc :: new ( target, builder) ) ;
450
+
451
+ let mut cargo = prepare_tool_cargo (
452
+ builder,
453
+ compiler,
454
+ Mode :: ToolRustc ,
455
+ target,
456
+ builder. kind ,
457
+ path,
458
+ // Currently, all of the tools that use this macro/function are in-tree.
459
+ // If support for out-of-tree tools is re-added in the future, those
460
+ // steps should probably be marked non-default so that the default
461
+ // checks aren't affected by toolstate being broken.
462
+ SourceType :: InTree ,
463
+ & [ ] ,
464
+ ) ;
465
+
466
+ // For ./x.py clippy, don't run with --all-targets because
467
+ // linting tests and benchmarks can produce very noisy results
468
+ if builder. kind != Kind :: Clippy {
469
+ cargo. arg ( "--all-targets" ) ;
470
+ }
471
+
472
+ let stamp = builder
473
+ . cargo_out ( compiler, Mode :: ToolRustc , target)
474
+ . join ( format ! ( ".{}-check.stamp" , step_type_name. to_lowercase( ) ) ) ;
475
+
476
+ let _guard = builder. msg_check ( format ! ( "{display_name} artifacts" ) , target) ;
477
+ run_cargo ( builder, cargo, builder. config . free_args . clone ( ) , & stamp, vec ! [ ] , true , false ) ;
478
478
}
479
479
480
- tool_check_step ! ( Rustdoc , "rustdoc" , "src/tools/rustdoc" , "src/librustdoc" , SourceType :: InTree ) ;
480
+ tool_check_step ! ( Rustdoc { path : "src/tools/rustdoc" , alt_path : "src/librustdoc" } ) ;
481
481
// Clippy, miri and Rustfmt are hybrids. They are external tools, but use a git subtree instead
482
482
// of a submodule. Since the SourceType only drives the deny-warnings
483
483
// behavior, treat it as in-tree so that any new warnings in clippy will be
484
484
// rejected.
485
- tool_check_step ! ( Clippy , "clippy" , "src/tools/clippy" , SourceType :: InTree ) ;
486
- tool_check_step ! ( Miri , "miri" , "src/tools/miri" , SourceType :: InTree ) ;
487
- tool_check_step ! ( CargoMiri , "cargo-miri" , "src/tools/miri/cargo-miri" , SourceType :: InTree ) ;
488
- tool_check_step ! ( Rls , "rls" , "src/tools/rls" , SourceType :: InTree ) ;
489
- tool_check_step ! ( Rustfmt , "rustfmt" , "src/tools/rustfmt" , SourceType :: InTree ) ;
490
- tool_check_step ! (
491
- MiroptTestTools ,
492
- "miropt-test-tools" ,
493
- "src/tools/miropt-test-tools" ,
494
- SourceType :: InTree
495
- ) ;
496
- tool_check_step ! (
497
- TestFloatParse ,
498
- "test-float-parse" ,
499
- "src/etc/test-float-parse" ,
500
- SourceType :: InTree
501
- ) ;
502
-
503
- tool_check_step ! ( Bootstrap , "bootstrap" , "src/bootstrap" , SourceType :: InTree , false ) ;
485
+ tool_check_step ! ( Clippy { path: "src/tools/clippy" } ) ;
486
+ tool_check_step ! ( Miri { path: "src/tools/miri" } ) ;
487
+ tool_check_step ! ( CargoMiri { path: "src/tools/miri/cargo-miri" } ) ;
488
+ tool_check_step ! ( Rls { path: "src/tools/rls" } ) ;
489
+ tool_check_step ! ( Rustfmt { path: "src/tools/rustfmt" } ) ;
490
+ tool_check_step ! ( MiroptTestTools { path: "src/tools/miropt-test-tools" } ) ;
491
+ tool_check_step ! ( TestFloatParse { path: "src/etc/test-float-parse" } ) ;
492
+
493
+ tool_check_step ! ( Bootstrap { path: "src/bootstrap" , default : false } ) ;
504
494
// Compiletest is implicitly "checked" when it gets built in order to run tests,
505
495
// so this is mainly for people working on compiletest to run locally.
506
- tool_check_step ! ( Compiletest , "compiletest" , "src/tools/compiletest" , SourceType :: InTree , false ) ;
496
+ tool_check_step ! ( Compiletest { path : "src/tools/compiletest" , default : false } ) ;
507
497
508
498
/// Cargo's output path for the standard library in a given stage, compiled
509
499
/// by a particular compiler for the specified target.
0 commit comments