| // When two object archives with the same filename are present, an iterator is supposed to |
| // inspect each object, recognize the duplication and extract each one to a different directory. |
| // This test checks that this duplicate handling behaviour has not been broken. |
| // See https://github.com/rust-lang/rust/pull/24439 |
| |
| //@ ignore-cross-compile |
| // Reason: the compiled binary is executed |
| |
| use run_make_support::{cc, is_msvc, llvm_ar, rfs, run, rustc}; |
| |
| fn main() { |
| rfs::create_dir("a"); |
| rfs::create_dir("b"); |
| compile_obj_force_foo("a", "foo"); |
| compile_obj_force_foo("b", "bar"); |
| let mut ar = llvm_ar(); |
| ar.obj_to_ar().arg("libfoo.a"); |
| if is_msvc() { |
| ar.arg("a/foo.obj").arg("b/foo.obj").run(); |
| } else { |
| ar.arg("a/foo.o").arg("b/foo.o").run(); |
| } |
| rustc().input("foo.rs").run(); |
| rustc().input("bar.rs").run(); |
| run("bar"); |
| } |
| |
| #[track_caller] |
| pub fn compile_obj_force_foo(dir: &str, lib_name: &str) { |
| let obj_file = if is_msvc() { format!("{dir}/foo") } else { format!("{dir}/foo.o") }; |
| let src = format!("{lib_name}.c"); |
| if is_msvc() { |
| cc().arg("-c").out_exe(&obj_file).input(src).run(); |
| } else { |
| cc().arg("-v").arg("-c").out_exe(&obj_file).input(src).run(); |
| }; |
| } |