Skip to content

Commit 53eab71

Browse files
committed
make our filename handling work better across platforms
1 parent 147330c commit 53eab71

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

cargo-miri/bin.rs

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -486,14 +486,14 @@ fn phase_cargo_rustc(args: env::Args) {
486486
let filename = out_filename("", "");
487487

488488
if verbose {
489-
eprintln!("[cargo-miri rustc] writing run info to {:?}", filename.display());
489+
eprintln!("[cargo-miri rustc] writing run info to `{}`", filename.display());
490490
}
491491

492492
let file = File::create(&filename)
493-
.unwrap_or_else(|_| show_error(format!("Cannot create {:?}", filename.display())));
493+
.unwrap_or_else(|_| show_error(format!("Cannot create `{}`", filename.display())));
494494
let file = BufWriter::new(file);
495495
serde_json::ser::to_writer(file, &info)
496-
.unwrap_or_else(|_| show_error(format!("Cannot write to {:?}", filename.display())));
496+
.unwrap_or_else(|_| show_error(format!("Cannot write to `{}`", filename.display())));
497497
return;
498498
}
499499

@@ -502,7 +502,7 @@ fn phase_cargo_rustc(args: env::Args) {
502502
// Arguments are treated very differently depending on whether this crate is
503503
// for interpretation by Miri, or for use by a build script / proc macro.
504504
if target_crate {
505-
// Forward arguments, butremove "link" from "--emit" to make this a check-only build.
505+
// Forward arguments, but remove "link" from "--emit" to make this a check-only build.
506506
let emit_flag = "--emit";
507507
for arg in args {
508508
if arg.starts_with(emit_flag) {
@@ -547,21 +547,26 @@ fn phase_cargo_rustc(args: env::Args) {
547547

548548
// Create a stub .rlib file if "link" was requested by cargo.
549549
if emit_link_hack {
550-
// FIXME: is "lib" always right?
550+
// Some platforms prepend "lib", some do not... let's just create both files.
551551
let filename = out_filename("lib", ".rlib");
552552
File::create(filename).expect("Failed to create rlib file");
553+
let filename = out_filename("", ".rlib");
554+
File::create(filename).expect("Failed to create rlib file");
553555
}
554556
}
555557

556558
fn phase_cargo_runner(binary: &str, binary_args: env::Args) {
557559
let verbose = std::env::var_os("MIRI_VERBOSE").is_some();
558560

559-
let file = File::open(binary)
561+
// Strip extension from binary name (Windows adds ".exe").
562+
let mut filename = PathBuf::from(binary);
563+
filename.set_extension("");
564+
let file = File::open(&filename)
560565
.unwrap_or_else(|_| show_error(format!("File {:?} not found or `cargo-miri` invoked incorrectly; please only invoke this binary through `cargo miri`", binary)));
561566
let file = BufReader::new(file);
562567
let info: CrateRunInfo = serde_json::from_reader(file)
563568
.unwrap_or_else(|_| show_error(format!("File {:?} does not contain valid JSON", binary)));
564-
fs::remove_file(binary)
569+
fs::remove_file(&filename)
565570
.unwrap_or_else(|_| show_error(format!("Unable to remove file {:?}", binary)));
566571

567572
let mut cmd = miri();

0 commit comments

Comments
 (0)