Skip to content

Commit

Permalink
test(rustflags): Clarify remap tests
Browse files Browse the repository at this point in the history
The tests were comparing rustc vs RUSTFLAGS which was obscuring the case
it was trying to test which was that different remaps shouldn't cause
different results.
  • Loading branch information
epage committed Dec 5, 2024
1 parent 9fcb5de commit 31a17b6
Showing 1 changed file with 98 additions and 5 deletions.
103 changes: 98 additions & 5 deletions tests/testsuite/rustflags.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1521,7 +1521,7 @@ fn remap_path_prefix_works() {
}

#[cargo_test]
fn remap_path_prefix_ignored() {
fn rustflags_remap_path_prefix_ignored_for_c_metadata() {
let p = project().file("src/lib.rs", "").build();

let build_output = p
Expand All @@ -1531,16 +1531,89 @@ fn remap_path_prefix_ignored() {
"--remap-path-prefix=/abc=/zoo --remap-path-prefix /spaced=/zoo",
)
.run();
let build_c_metadata = dbg!(get_c_metadata(build_output));
let first_c_metadata = dbg!(get_c_metadata(build_output));

p.cargo("clean").run();

let rustc_output = p
let build_output = p
.cargo("build -v")
.env(
"RUSTFLAGS",
"--remap-path-prefix=/def=/zoo --remap-path-prefix /earth=/zoo",
)
.run();
let second_c_metadata = dbg!(get_c_metadata(build_output));

assert_data_eq!(first_c_metadata, second_c_metadata);
}

#[cargo_test]
fn rustc_remap_path_prefix_ignored_for_c_metadata() {
let p = project().file("src/lib.rs", "").build();

let build_output = p
.cargo("rustc -v -- --remap-path-prefix=/abc=/zoo --remap-path-prefix /spaced=/zoo")
.run();
let first_c_metadata = dbg!(get_c_metadata(build_output));

p.cargo("clean").run();

let build_output = p
.cargo("rustc -v -- --remap-path-prefix=/def=/zoo --remap-path-prefix /earth=/zoo")
.run();
let second_c_metadata = dbg!(get_c_metadata(build_output));

assert_data_eq!(first_c_metadata, second_c_metadata);
}

// `--remap-path-prefix` is meant to take two different binaries and make them the same but the
// rlib name, including `-Cextra-filename`, can still end up in the binary so it can't change
#[cargo_test]
fn rustflags_remap_path_prefix_ignored_for_c_extra_filename() {
let p = project().file("src/lib.rs", "").build();

let build_output = p
.cargo("build -v")
.env(
"RUSTFLAGS",
"--remap-path-prefix=/abc=/zoo --remap-path-prefix /spaced=/zoo",
)
.run();
let first_c_extra_filename = dbg!(get_c_extra_filename(build_output));

p.cargo("clean").run();

let build_output = p
.cargo("build -v")
.env(
"RUSTFLAGS",
"--remap-path-prefix=/def=/zoo --remap-path-prefix /earth=/zoo",
)
.run();
let second_c_extra_filename = dbg!(get_c_extra_filename(build_output));

assert_data_eq!(first_c_extra_filename, second_c_extra_filename);
}

// `--remap-path-prefix` is meant to take two different binaries and make them the same but the
// rlib name, including `-Cextra-filename`, can still end up in the binary so it can't change
#[cargo_test]
fn rustc_remap_path_prefix_ignored_for_c_extra_filename() {
let p = project().file("src/lib.rs", "").build();

let build_output = p
.cargo("rustc -v -- --remap-path-prefix=/abc=/zoo --remap-path-prefix /spaced=/zoo")
.run();
let rustc_c_metadata = dbg!(get_c_metadata(rustc_output));
let first_c_extra_filename = dbg!(get_c_extra_filename(build_output));

p.cargo("clean").run();

let build_output = p
.cargo("rustc -v -- --remap-path-prefix=/def=/zoo --remap-path-prefix /earth=/zoo")
.run();
let second_c_extra_filename = dbg!(get_c_extra_filename(build_output));

assert_data_eq!(rustc_c_metadata, build_c_metadata);
assert_data_eq!(first_c_extra_filename, second_c_extra_filename);
}

fn get_c_metadata(output: RawOutput) -> String {
Expand All @@ -1563,6 +1636,26 @@ fn get_c_metadata(output: RawOutput) -> String {
c_metadata.join("\n")
}

fn get_c_extra_filename(output: RawOutput) -> String {
let get_c_extra_filename_re =
regex::Regex::new(r".* (--crate-name [^ ]+).* (-C ?extra-filename=[^ ]+).*").unwrap();

let stderr = String::from_utf8(output.stderr).unwrap();
let mut c_extra_filename = get_c_extra_filename_re
.captures_iter(&stderr)
.map(|c| {
let (_, [name, c_extra_filename]) = c.extract();
format!("{name} {c_extra_filename}")
})
.collect::<Vec<_>>();
assert!(
!c_extra_filename.is_empty(),
"`{get_c_extra_filename_re:?}` did not match:\n```\n{stderr}\n```"
);
c_extra_filename.sort();
c_extra_filename.join("\n")
}

#[cargo_test]
fn host_config_rustflags_with_target() {
// regression test for https://github.com/rust-lang/cargo/issues/10206
Expand Down

0 comments on commit 31a17b6

Please sign in to comment.