File: rmake.rs

package info (click to toggle)
rustc 1.90.0%2Bdfsg1-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental, forky, sid
  • size: 925,928 kB
  • sloc: xml: 158,148; javascript: 19,781; sh: 19,174; python: 15,732; ansic: 13,096; cpp: 7,181; asm: 4,376; makefile: 697; lisp: 176; sql: 15
file content (37 lines) | stat: -rw-r--r-- 1,293 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// 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_windows_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_windows_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_windows_msvc() { format!("{dir}/foo") } else { format!("{dir}/foo.o") };
    let src = format!("{lib_name}.c");
    if is_windows_msvc() {
        cc().arg("-c").out_exe(&obj_file).input(src).run();
    } else {
        cc().arg("-v").arg("-c").out_exe(&obj_file).input(src).run();
    };
}