Rollup merge of #124383 - Urgau:port-print-native-static-libs, r=jieyouxu
Port run-make `--print=native-static-libs` to rmake.rs This PR port the run-make `--print=native-static-libs` test to rmake.rs The dedup was really awful in the `Makefile`, I'm glad to finally have a proper dedup detection for this. Related to https://github.com/rust-lang/rust/issues/121876 r? `@jieyouxu`
This commit is contained in:
commit
c8beab7f46
@ -220,7 +220,6 @@ run-make/pretty-print-to-file/Makefile
|
|||||||
run-make/pretty-print-with-dep-file/Makefile
|
run-make/pretty-print-with-dep-file/Makefile
|
||||||
run-make/print-calling-conventions/Makefile
|
run-make/print-calling-conventions/Makefile
|
||||||
run-make/print-cfg/Makefile
|
run-make/print-cfg/Makefile
|
||||||
run-make/print-native-static-libs/Makefile
|
|
||||||
run-make/print-target-list/Makefile
|
run-make/print-target-list/Makefile
|
||||||
run-make/profile/Makefile
|
run-make/profile/Makefile
|
||||||
run-make/prune-link-args/Makefile
|
run-make/prune-link-args/Makefile
|
||||||
|
@ -1,19 +0,0 @@
|
|||||||
include ../tools.mk
|
|
||||||
|
|
||||||
# ignore-cross-compile
|
|
||||||
# ignore-wasm
|
|
||||||
|
|
||||||
all:
|
|
||||||
$(RUSTC) --crate-type rlib -lbar_cli bar.rs
|
|
||||||
$(RUSTC) foo.rs -lfoo_cli -lfoo_cli --crate-type staticlib --print native-static-libs 2>&1 \
|
|
||||||
| grep 'note: native-static-libs: ' \
|
|
||||||
| sed 's/note: native-static-libs: \(.*\)/\1/' > $(TMPDIR)/libs.txt
|
|
||||||
|
|
||||||
cat $(TMPDIR)/libs.txt | grep -F "glib-2.0" # in bar.rs
|
|
||||||
cat $(TMPDIR)/libs.txt | grep -F "systemd" # in foo.rs
|
|
||||||
cat $(TMPDIR)/libs.txt | grep -F "bar_cli"
|
|
||||||
cat $(TMPDIR)/libs.txt | grep -F "foo_cli"
|
|
||||||
|
|
||||||
# make sure that foo_cli and glib-2.0 are not consecutively present
|
|
||||||
cat $(TMPDIR)/libs.txt | grep -Fv "foo_cli -lfoo_cli"
|
|
||||||
cat $(TMPDIR)/libs.txt | grep -Fv "glib-2.0 -lglib-2.0"
|
|
76
tests/run-make/print-native-static-libs/rmake.rs
Normal file
76
tests/run-make/print-native-static-libs/rmake.rs
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
//! This checks the output of `--print=native-static-libs`
|
||||||
|
//!
|
||||||
|
//! Specifically, this test makes sure that one and only one
|
||||||
|
//! note is emitted with the text "native-static-libs:" as prefix
|
||||||
|
//! that the note contains the link args given in the source code
|
||||||
|
//! and cli of the current crate and downstream crates.
|
||||||
|
//!
|
||||||
|
//! It also checks that there aren't any duplicated consecutive
|
||||||
|
//! args, as they are useless and suboptimal for debugability.
|
||||||
|
//! See https://github.com/rust-lang/rust/issues/113209.
|
||||||
|
|
||||||
|
//@ ignore-cross-compile
|
||||||
|
//@ ignore-wasm
|
||||||
|
|
||||||
|
extern crate run_make_support;
|
||||||
|
|
||||||
|
use std::io::BufRead;
|
||||||
|
|
||||||
|
use run_make_support::{rustc, is_msvc};
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
// build supporting crate
|
||||||
|
rustc()
|
||||||
|
.input("bar.rs")
|
||||||
|
.crate_type("rlib")
|
||||||
|
.arg("-lbar_cli")
|
||||||
|
.run();
|
||||||
|
|
||||||
|
// build main crate as staticlib
|
||||||
|
let output = rustc()
|
||||||
|
.input("foo.rs")
|
||||||
|
.crate_type("staticlib")
|
||||||
|
.arg("-lfoo_cli")
|
||||||
|
.arg("-lfoo_cli") // 2nd time
|
||||||
|
.print("native-static-libs")
|
||||||
|
.run();
|
||||||
|
|
||||||
|
let mut found_note = false;
|
||||||
|
for l in output.stderr.lines() {
|
||||||
|
let l = l.expect("utf-8 string");
|
||||||
|
|
||||||
|
let Some(args) = l.strip_prefix("note: native-static-libs:") else { continue; };
|
||||||
|
assert!(!found_note);
|
||||||
|
found_note = true;
|
||||||
|
|
||||||
|
let args: Vec<&str> = args.trim().split_ascii_whitespace().collect();
|
||||||
|
|
||||||
|
macro_rules! assert_contains_lib {
|
||||||
|
($lib:literal in $args:ident) => {{
|
||||||
|
let lib = format!(
|
||||||
|
"{}{}{}",
|
||||||
|
if !is_msvc() { "-l" } else { "" },
|
||||||
|
$lib,
|
||||||
|
if !is_msvc() { "" } else { ".lib" },
|
||||||
|
);
|
||||||
|
let found = $args.contains(&&*lib);
|
||||||
|
assert!(found, "unable to find lib `{}` in those linker args: {:?}", lib, $args);
|
||||||
|
}}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert_contains_lib!("glib-2.0" in args); // in bar.rs
|
||||||
|
assert_contains_lib!("systemd" in args); // in foo.rs
|
||||||
|
assert_contains_lib!("bar_cli" in args);
|
||||||
|
assert_contains_lib!("foo_cli" in args);
|
||||||
|
|
||||||
|
// make sure that no args are consecutively present
|
||||||
|
let dedup_args: Vec<&str> = {
|
||||||
|
let mut args = args.clone();
|
||||||
|
args.dedup();
|
||||||
|
args
|
||||||
|
};
|
||||||
|
assert_eq!(args, dedup_args);
|
||||||
|
}
|
||||||
|
|
||||||
|
assert!(found_note);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user