Port run-make --print=native-static-libs to rmake.rs

This commit is contained in:
Urgau 2024-04-25 20:39:17 +02:00
parent 9adafa7f8d
commit 74cbc09fc9
3 changed files with 63 additions and 20 deletions

View File

@ -220,7 +220,6 @@ run-make/pretty-print-to-file/Makefile
run-make/pretty-print-with-dep-file/Makefile
run-make/print-calling-conventions/Makefile
run-make/print-cfg/Makefile
run-make/print-native-static-libs/Makefile
run-make/print-target-list/Makefile
run-make/profile/Makefile
run-make/prune-link-args/Makefile

View File

@ -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"

View File

@ -0,0 +1,63 @@
//! 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;
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();
assert!(args.contains(&"-lglib-2.0")); // in bar.rs
assert!(args.contains(&"-lsystemd")); // in foo.rs
assert!(args.contains(&"-lbar_cli"));
assert!(args.contains(&"-lfoo_cli"));
// 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);
}