@@ -22,6 +22,7 @@ const JOSH_FILTER: &str =
22
22
const JOSH_PORT : u16 = 42042 ;
23
23
24
24
impl MiriEnv {
25
+ /// Prepares the environment: builds miri and cargo-miri and a sysroot.
25
26
/// Returns the location of the sysroot.
26
27
///
27
28
/// If the target is None the sysroot will be built for the host machine.
@@ -34,12 +35,10 @@ impl MiriEnv {
34
35
// Sysroot already set, use that.
35
36
return Ok ( miri_sysroot. into ( ) ) ;
36
37
}
37
- let manifest_path = path ! ( self . miri_dir / "cargo-miri" / "Cargo.toml" ) ;
38
- let Self { toolchain, cargo_extra_flags, .. } = & self ;
39
38
40
39
// Make sure everything is built. Also Miri itself.
41
- self . build ( path ! ( self . miri_dir / "Cargo.toml" ) , & [ ] , quiet) ?;
42
- self . build ( & manifest_path , & [ ] , quiet) ?;
40
+ self . build ( "." , & [ ] , quiet) ?;
41
+ self . build ( "cargo-miri" , & [ ] , quiet) ?;
43
42
44
43
let target_flag = if let Some ( target) = & target {
45
44
vec ! [ OsStr :: new( "--target" ) , target. as_ref( ) ]
@@ -56,10 +55,12 @@ impl MiriEnv {
56
55
eprintln ! ( ) ;
57
56
}
58
57
59
- let mut cmd = cmd ! ( self . sh,
60
- "cargo +{toolchain} --quiet run {cargo_extra_flags...} --manifest-path {manifest_path} --
61
- miri setup --print-sysroot {target_flag...}"
62
- ) ;
58
+ let mut cmd = self
59
+ . cargo_cmd ( "cargo-miri" , "run" )
60
+ . arg ( "--quiet" )
61
+ . arg ( "--" )
62
+ . args ( & [ "miri" , "setup" , "--print-sysroot" ] )
63
+ . args ( target_flag) ;
63
64
cmd. set_quiet ( quiet) ;
64
65
let output = cmd. read ( ) ?;
65
66
self . sh . set_var ( "MIRI_SYSROOT" , & output) ;
@@ -162,8 +163,8 @@ impl Command {
162
163
| Command :: Test { .. }
163
164
| Command :: Run { .. }
164
165
| Command :: Fmt { .. }
165
- | Command :: Clippy { .. }
166
- | Command :: Cargo { .. } => Self :: auto_actions ( ) ?,
166
+ | Command :: Doc { .. }
167
+ | Command :: Clippy { .. } => Self :: auto_actions ( ) ?,
167
168
| Command :: Toolchain { .. }
168
169
| Command :: Bench { .. }
169
170
| Command :: RustcPull { .. }
@@ -177,9 +178,9 @@ impl Command {
177
178
Command :: Test { bless, flags, target } => Self :: test ( bless, flags, target) ,
178
179
Command :: Run { dep, verbose, many_seeds, target, edition, flags } =>
179
180
Self :: run ( dep, verbose, many_seeds, target, edition, flags) ,
181
+ Command :: Doc { flags } => Self :: doc ( flags) ,
180
182
Command :: Fmt { flags } => Self :: fmt ( flags) ,
181
183
Command :: Clippy { flags } => Self :: clippy ( flags) ,
182
- Command :: Cargo { flags } => Self :: cargo ( flags) ,
183
184
Command :: Bench { target, benches } => Self :: bench ( target, benches) ,
184
185
Command :: Toolchain { flags } => Self :: toolchain ( flags) ,
185
186
Command :: RustcPull { commit } => Self :: rustc_pull ( commit. clone ( ) ) ,
@@ -433,39 +434,37 @@ impl Command {
433
434
434
435
fn build ( flags : Vec < String > ) -> Result < ( ) > {
435
436
let e = MiriEnv :: new ( ) ?;
436
- e. build ( path ! ( e . miri_dir / "Cargo.toml" ) , & flags, /* quiet */ false ) ?;
437
- e. build ( path ! ( e . miri_dir / "cargo-miri" / "Cargo.toml" ) , & flags, /* quiet */ false ) ?;
437
+ e. build ( "." , & flags, /* quiet */ false ) ?;
438
+ e. build ( "cargo-miri" , & flags, /* quiet */ false ) ?;
438
439
Ok ( ( ) )
439
440
}
440
441
441
442
fn check ( flags : Vec < String > ) -> Result < ( ) > {
442
443
let e = MiriEnv :: new ( ) ?;
443
- e. check ( path ! ( e . miri_dir / "Cargo.toml" ) , & flags) ?;
444
- e. check ( path ! ( e . miri_dir / "cargo-miri" / "Cargo.toml" ) , & flags) ?;
444
+ e. check ( "." , & flags) ?;
445
+ e. check ( "cargo-miri" , & flags) ?;
445
446
Ok ( ( ) )
446
447
}
447
448
448
- fn clippy ( flags : Vec < String > ) -> Result < ( ) > {
449
+ fn doc ( flags : Vec < String > ) -> Result < ( ) > {
449
450
let e = MiriEnv :: new ( ) ?;
450
- e. clippy ( path ! ( e. miri_dir / "Cargo.toml" ) , & flags) ?;
451
- e. clippy ( path ! ( e. miri_dir / "cargo-miri" / "Cargo.toml" ) , & flags) ?;
452
- e. clippy ( path ! ( e. miri_dir / "miri-script" / "Cargo.toml" ) , & flags) ?;
451
+ e. doc ( "." , & flags) ?;
452
+ e. doc ( "cargo-miri" , & flags) ?;
453
453
Ok ( ( ) )
454
454
}
455
455
456
- fn cargo ( flags : Vec < String > ) -> Result < ( ) > {
456
+ fn clippy ( flags : Vec < String > ) -> Result < ( ) > {
457
457
let e = MiriEnv :: new ( ) ?;
458
- let toolchain = & e. toolchain ;
459
- // We carefully kept the working dir intact, so this will run cargo *on the workspace in the
460
- // current working dir*, not on the main Miri workspace. That is exactly what RA needs.
461
- cmd ! ( e. sh, "cargo +{toolchain} {flags...}" ) . run ( ) ?;
458
+ e. clippy ( "." , & flags) ?;
459
+ e. clippy ( "cargo-miri" , & flags) ?;
460
+ e. clippy ( "miri-script" , & flags) ?;
462
461
Ok ( ( ) )
463
462
}
464
463
465
464
fn test ( bless : bool , mut flags : Vec < String > , target : Option < String > ) -> Result < ( ) > {
466
465
let mut e = MiriEnv :: new ( ) ?;
467
466
468
- // Prepare a sysroot.
467
+ // Prepare a sysroot. (Also builds cargo-miri, which we need.)
469
468
e. build_miri_sysroot ( /* quiet */ false , target. as_deref ( ) ) ?;
470
469
471
470
// Forward information to test harness.
@@ -482,7 +481,7 @@ impl Command {
482
481
483
482
// Then test, and let caller control flags.
484
483
// Only in root project as `cargo-miri` has no tests.
485
- e. test ( path ! ( e . miri_dir / "Cargo.toml" ) , & flags) ?;
484
+ e. test ( "." , & flags) ?;
486
485
Ok ( ( ) )
487
486
}
488
487
@@ -510,32 +509,27 @@ impl Command {
510
509
early_flags. push ( "--edition" . into ( ) ) ;
511
510
early_flags. push ( edition. as_deref ( ) . unwrap_or ( "2021" ) . into ( ) ) ;
512
511
513
- // Prepare a sysroot, add it to the flags.
512
+ // Prepare a sysroot, add it to the flags. (Also builds cargo-miri, which we need.)
514
513
let miri_sysroot = e. build_miri_sysroot ( /* quiet */ !verbose, target. as_deref ( ) ) ?;
515
514
early_flags. push ( "--sysroot" . into ( ) ) ;
516
515
early_flags. push ( miri_sysroot. into ( ) ) ;
517
516
518
517
// Compute everything needed to run the actual command. Also add MIRIFLAGS.
519
- let miri_manifest = path ! ( e. miri_dir / "Cargo.toml" ) ;
520
518
let miri_flags = e. sh . var ( "MIRIFLAGS" ) . unwrap_or_default ( ) ;
521
519
let miri_flags = flagsplit ( & miri_flags) ;
522
- let toolchain = & e. toolchain ;
523
- let extra_flags = & e. cargo_extra_flags ;
524
520
let quiet_flag = if verbose { None } else { Some ( "--quiet" ) } ;
525
521
// This closure runs the command with the given `seed_flag` added between the MIRIFLAGS and
526
522
// the `flags` given on the command-line.
527
- let run_miri = |sh : & Shell , seed_flag : Option < String > | -> Result < ( ) > {
523
+ let run_miri = |e : & MiriEnv , seed_flag : Option < String > | -> Result < ( ) > {
528
524
// The basic command that executes the Miri driver.
529
525
let mut cmd = if dep {
530
- cmd ! (
531
- sh,
532
- "cargo +{toolchain} {quiet_flag...} test {extra_flags...} --manifest-path {miri_manifest} --test ui -- --miri-run-dep-mode"
533
- )
526
+ e. cargo_cmd ( "." , "test" )
527
+ . args ( & [ "--test" , "ui" ] )
528
+ . args ( quiet_flag)
529
+ . arg ( "--" )
530
+ . args ( & [ "--miri-run-dep-mode" ] )
534
531
} else {
535
- cmd ! (
536
- sh,
537
- "cargo +{toolchain} {quiet_flag...} run {extra_flags...} --manifest-path {miri_manifest} --"
538
- )
532
+ e. cargo_cmd ( "." , "run" ) . args ( quiet_flag) . arg ( "--" )
539
533
} ;
540
534
cmd. set_quiet ( !verbose) ;
541
535
// Add Miri flags
@@ -551,14 +545,14 @@ impl Command {
551
545
} ;
552
546
// Run the closure once or many times.
553
547
if let Some ( seed_range) = many_seeds {
554
- e. run_many_times ( seed_range, |sh , seed| {
548
+ e. run_many_times ( seed_range, |e , seed| {
555
549
eprintln ! ( "Trying seed: {seed}" ) ;
556
- run_miri ( sh , Some ( format ! ( "-Zmiri-seed={seed}" ) ) ) . inspect_err ( |_| {
550
+ run_miri ( e , Some ( format ! ( "-Zmiri-seed={seed}" ) ) ) . inspect_err ( |_| {
557
551
eprintln ! ( "FAILING SEED: {seed}" ) ;
558
552
} )
559
553
} ) ?;
560
554
} else {
561
- run_miri ( & e. sh , None ) ?;
555
+ run_miri ( & e, None ) ?;
562
556
}
563
557
Ok ( ( ) )
564
558
}
@@ -585,6 +579,6 @@ impl Command {
585
579
. filter_ok ( |item| item. file_type ( ) . is_file ( ) )
586
580
. map_ok ( |item| item. into_path ( ) ) ;
587
581
588
- e. format_files ( files, & e . toolchain [ .. ] , & config_path, & flags)
582
+ e. format_files ( files, & config_path, & flags)
589
583
}
590
584
}
0 commit comments