@@ -22,6 +22,7 @@ const JOSH_FILTER: &str =
2222const JOSH_PORT : u16 = 42042 ;
2323
2424impl MiriEnv {
25+ /// Prepares the environment: builds miri and cargo-miri and a sysroot.
2526 /// Returns the location of the sysroot.
2627 ///
2728 /// If the target is None the sysroot will be built for the host machine.
@@ -34,12 +35,10 @@ impl MiriEnv {
3435 // Sysroot already set, use that.
3536 return Ok ( miri_sysroot. into ( ) ) ;
3637 }
37- let manifest_path = path ! ( self . miri_dir / "cargo-miri" / "Cargo.toml" ) ;
38- let Self { toolchain, cargo_extra_flags, .. } = & self ;
3938
4039 // 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) ?;
4342
4443 let target_flag = if let Some ( target) = & target {
4544 vec ! [ OsStr :: new( "--target" ) , target. as_ref( ) ]
@@ -56,10 +55,12 @@ impl MiriEnv {
5655 eprintln ! ( ) ;
5756 }
5857
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) ;
6364 cmd. set_quiet ( quiet) ;
6465 let output = cmd. read ( ) ?;
6566 self . sh . set_var ( "MIRI_SYSROOT" , & output) ;
@@ -162,8 +163,8 @@ impl Command {
162163 | Command :: Test { .. }
163164 | Command :: Run { .. }
164165 | Command :: Fmt { .. }
165- | Command :: Clippy { .. }
166- | Command :: Cargo { .. } => Self :: auto_actions ( ) ?,
166+ | Command :: Doc { .. }
167+ | Command :: Clippy { .. } => Self :: auto_actions ( ) ?,
167168 | Command :: Toolchain { .. }
168169 | Command :: Bench { .. }
169170 | Command :: RustcPull { .. }
@@ -177,9 +178,9 @@ impl Command {
177178 Command :: Test { bless, flags, target } => Self :: test ( bless, flags, target) ,
178179 Command :: Run { dep, verbose, many_seeds, target, edition, flags } =>
179180 Self :: run ( dep, verbose, many_seeds, target, edition, flags) ,
181+ Command :: Doc { flags } => Self :: doc ( flags) ,
180182 Command :: Fmt { flags } => Self :: fmt ( flags) ,
181183 Command :: Clippy { flags } => Self :: clippy ( flags) ,
182- Command :: Cargo { flags } => Self :: cargo ( flags) ,
183184 Command :: Bench { target, benches } => Self :: bench ( target, benches) ,
184185 Command :: Toolchain { flags } => Self :: toolchain ( flags) ,
185186 Command :: RustcPull { commit } => Self :: rustc_pull ( commit. clone ( ) ) ,
@@ -433,39 +434,37 @@ impl Command {
433434
434435 fn build ( flags : Vec < String > ) -> Result < ( ) > {
435436 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 ) ?;
438439 Ok ( ( ) )
439440 }
440441
441442 fn check ( flags : Vec < String > ) -> Result < ( ) > {
442443 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) ?;
445446 Ok ( ( ) )
446447 }
447448
448- fn clippy ( flags : Vec < String > ) -> Result < ( ) > {
449+ fn doc ( flags : Vec < String > ) -> Result < ( ) > {
449450 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) ?;
453453 Ok ( ( ) )
454454 }
455455
456- fn cargo ( flags : Vec < String > ) -> Result < ( ) > {
456+ fn clippy ( flags : Vec < String > ) -> Result < ( ) > {
457457 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) ?;
462461 Ok ( ( ) )
463462 }
464463
465464 fn test ( bless : bool , mut flags : Vec < String > , target : Option < String > ) -> Result < ( ) > {
466465 let mut e = MiriEnv :: new ( ) ?;
467466
468- // Prepare a sysroot.
467+ // Prepare a sysroot. (Also builds cargo-miri, which we need.)
469468 e. build_miri_sysroot ( /* quiet */ false , target. as_deref ( ) ) ?;
470469
471470 // Forward information to test harness.
@@ -482,7 +481,7 @@ impl Command {
482481
483482 // Then test, and let caller control flags.
484483 // Only in root project as `cargo-miri` has no tests.
485- e. test ( path ! ( e . miri_dir / "Cargo.toml" ) , & flags) ?;
484+ e. test ( "." , & flags) ?;
486485 Ok ( ( ) )
487486 }
488487
@@ -510,32 +509,27 @@ impl Command {
510509 early_flags. push ( "--edition" . into ( ) ) ;
511510 early_flags. push ( edition. as_deref ( ) . unwrap_or ( "2021" ) . into ( ) ) ;
512511
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.)
514513 let miri_sysroot = e. build_miri_sysroot ( /* quiet */ !verbose, target. as_deref ( ) ) ?;
515514 early_flags. push ( "--sysroot" . into ( ) ) ;
516515 early_flags. push ( miri_sysroot. into ( ) ) ;
517516
518517 // Compute everything needed to run the actual command. Also add MIRIFLAGS.
519- let miri_manifest = path ! ( e. miri_dir / "Cargo.toml" ) ;
520518 let miri_flags = e. sh . var ( "MIRIFLAGS" ) . unwrap_or_default ( ) ;
521519 let miri_flags = flagsplit ( & miri_flags) ;
522- let toolchain = & e. toolchain ;
523- let extra_flags = & e. cargo_extra_flags ;
524520 let quiet_flag = if verbose { None } else { Some ( "--quiet" ) } ;
525521 // This closure runs the command with the given `seed_flag` added between the MIRIFLAGS and
526522 // 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 < ( ) > {
528524 // The basic command that executes the Miri driver.
529525 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" ] )
534531 } 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 ( "--" )
539533 } ;
540534 cmd. set_quiet ( !verbose) ;
541535 // Add Miri flags
@@ -551,14 +545,14 @@ impl Command {
551545 } ;
552546 // Run the closure once or many times.
553547 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| {
555549 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 ( |_| {
557551 eprintln ! ( "FAILING SEED: {seed}" ) ;
558552 } )
559553 } ) ?;
560554 } else {
561- run_miri ( & e. sh , None ) ?;
555+ run_miri ( & e, None ) ?;
562556 }
563557 Ok ( ( ) )
564558 }
@@ -585,6 +579,6 @@ impl Command {
585579 . filter_ok ( |item| item. file_type ( ) . is_file ( ) )
586580 . map_ok ( |item| item. into_path ( ) ) ;
587581
588- e. format_files ( files, & e . toolchain [ .. ] , & config_path, & flags)
582+ e. format_files ( files, & config_path, & flags)
589583 }
590584}
0 commit comments