run-make: enable msvc for link-dedup

This commit is contained in:
Chris Denton 2024-08-04 11:03:27 +00:00
parent b389b0ab72
commit d8c2b767c6
No known key found for this signature in database
GPG Key ID: 713472F2F45627DE

View File

@ -5,20 +5,37 @@
// Without the --cfg flag, there should be a single -ltesta, no more, no less. // Without the --cfg flag, there should be a single -ltesta, no more, no less.
// See https://github.com/rust-lang/rust/pull/84794 // See https://github.com/rust-lang/rust/pull/84794
//@ ignore-msvc use std::fmt::Write;
use run_make_support::rustc; use run_make_support::{is_msvc, rustc};
fn main() { fn main() {
rustc().input("depa.rs").run(); rustc().input("depa.rs").run();
rustc().input("depb.rs").run(); rustc().input("depb.rs").run();
rustc().input("depc.rs").run(); rustc().input("depc.rs").run();
let output = rustc().input("empty.rs").cfg("bar").run_fail(); let output = rustc().input("empty.rs").cfg("bar").run_fail();
output.assert_stderr_contains(r#""-ltesta" "-ltestb" "-ltesta""#); output.assert_stderr_contains(needle_from_libs(&["testa", "testb", "testa"]));
let output = rustc().input("empty.rs").run_fail(); let output = rustc().input("empty.rs").run_fail();
output.assert_stderr_contains(r#""-ltesta""#); output.assert_stderr_contains(needle_from_libs(&["testa"]));
let output = rustc().input("empty.rs").run_fail(); output.assert_stderr_not_contains(needle_from_libs(&["testb"]));
output.assert_stderr_not_contains(r#""-ltestb""#); output.assert_stderr_not_contains(needle_from_libs(&["testa", "testa", "testa"]));
let output = rustc().input("empty.rs").run_fail(); // Adjacent identical native libraries are no longer deduplicated if
output.assert_stderr_not_contains(r#""-ltesta" "-ltesta" "-ltesta""#); // they come from different crates (https://github.com/rust-lang/rust/pull/103311)
// so the following will fail:
//output.assert_stderr_not_contains(needle_from_libs(&["testa", "testa"]));
}
fn needle_from_libs(libs: &[&str]) -> String {
let mut needle = String::new();
for lib in libs {
if is_msvc() {
let _ = needle.write_fmt(format_args!(r#""{lib}.lib" "#));
} else {
let _ = needle.write_fmt(format_args!(r#""-l{lib}" "#));
}
}
needle.pop(); // remove trailing space
needle
} }