Skip to content

Commit 15e1baf

Browse files
committed
make our filename handling work better across platforms
1 parent 1fd1ad5 commit 15e1baf

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
@@ -483,14 +483,14 @@ fn phase_cargo_rustc(args: env::Args) {
483483
let filename = out_filename("", "");
484484

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

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

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

545545
// Create a stub .rlib file if "link" was requested by cargo.
546546
if emit_link_hack {
547-
// FIXME: is "lib" always right?
547+
// Some platforms prepend "lib", some do not... let's just create both files.
548548
let filename = out_filename("lib", ".rlib");
549549
File::create(filename).expect("Failed to create rlib file");
550+
let filename = out_filename("", ".rlib");
551+
File::create(filename).expect("Failed to create rlib file");
550552
}
551553
}
552554

553555
fn phase_cargo_runner(binary: &str, binary_args: env::Args) {
554556
let verbose = std::env::var_os("MIRI_VERBOSE").is_some();
555557

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

564569
let mut cmd = miri();

0 commit comments

Comments
 (0)