// Setting the linker flavor as a C compiler should cause the output of the -l flags to be // prefixed by -Wl, except when a flag is requested to be verbatim. A bare linker (ld) should // never cause prefixes to appear in the output. This test checks this ruleset twice, once with // explicit flags and then with those flags passed inside the rust source code. // See https://github.com/rust-lang/rust/pull/118202 //@ only-linux // Reason: the `gnu-cc` linker is only available on linux use run_make_support::{regex, rustc}; fn main() { let out_gnu = rustc() .input("empty.rs") .linker_flavor("gnu-cc") .arg("-Zunstable-options") .arg("-lstatic=l1") .arg("-llink-arg=a1") .arg("-lstatic=l2") .arg("-llink-arg=a2") .arg("-ldylib=d1") .arg("-llink-arg=a3") .print("link-args") .run_unchecked() .stdout_utf8(); let out_gnu_verbatim = rustc() .input("empty.rs") .linker_flavor("gnu-cc") .arg("-Zunstable-options") .arg("-lstatic=l1") .arg("-llink-arg:+verbatim=a1") .arg("-lstatic=l2") .arg("-llink-arg=a2") .arg("-ldylib=d1") .arg("-llink-arg=a3") .print("link-args") .run_unchecked() .stdout_utf8(); let out_ld = rustc() .input("empty.rs") .linker_flavor("ld") .arg("-Zunstable-options") .arg("-lstatic=l1") .arg("-llink-arg=a1") .arg("-lstatic=l2") .arg("-llink-arg=a2") .arg("-ldylib=d1") .arg("-llink-arg=a3") .print("link-args") .run_unchecked() .stdout_utf8(); let out_att_gnu = rustc() .arg("-Zunstable-options") .linker_flavor("gnu-cc") .input("attribute.rs") .print("link-args") .run_unchecked() .stdout_utf8(); let out_att_gnu_verbatim = rustc() .cfg(r#"feature="verbatim""#) .arg("-Zunstable-options") .linker_flavor("gnu-cc") .input("attribute.rs") .print("link-args") .run_unchecked() .stdout_utf8(); let out_att_ld = rustc() .linker_flavor("ld") .input("attribute.rs") .print("link-args") .run_unchecked() .stdout_utf8(); let no_verbatim = regex::Regex::new("l1.*-Wl,a1.*l2.*-Wl,a2.*d1.*-Wl,a3").unwrap(); let one_verbatim = regex::Regex::new(r#"l1.*"a1".*l2.*-Wl,a2.*d1.*-Wl,a3"#).unwrap(); let ld = regex::Regex::new(r#"l1.*"a1".*l2.*"a2".*d1.*"a3""#).unwrap(); assert!(no_verbatim.is_match(&out_gnu)); assert!(no_verbatim.is_match(&out_att_gnu)); assert!(one_verbatim.is_match(&out_gnu_verbatim)); assert!(one_verbatim.is_match(&out_att_gnu_verbatim)); assert!(ld.is_match(&out_ld)); assert!(ld.is_match(&out_att_ld)); }