mirror of https://github.com/rust-lang/rust
42 lines
1.7 KiB
Rust
42 lines
1.7 KiB
Rust
// Previously, rustc mandated that cdylibs could only link against rlibs as dependencies,
|
|
// making linkage between cdylibs and dylibs impossible. After this was changed in #68448,
|
|
// this test attempts to link both `foo` (a cdylib) and `bar` (a dylib) and checks that
|
|
// both compilation and execution are successful.
|
|
// See https://github.com/rust-lang/rust/pull/68448
|
|
|
|
//@ ignore-cross-compile
|
|
// Reason: the compiled binary is executed
|
|
|
|
use run_make_support::{
|
|
bin_name, cc, dynamic_lib_extension, dynamic_lib_name, filename_contains, has_extension,
|
|
has_prefix, has_suffix, is_msvc, msvc_import_dynamic_lib_name, path, run, rustc,
|
|
shallow_find_files, target,
|
|
};
|
|
|
|
fn main() {
|
|
rustc().arg("-Cprefer-dynamic").input("bar.rs").run();
|
|
rustc().input("foo.rs").run();
|
|
let sysroot = rustc().print("sysroot").run().stdout_utf8();
|
|
let sysroot = sysroot.trim();
|
|
let target_sysroot = path(sysroot).join("lib/rustlib").join(target()).join("lib");
|
|
if is_msvc() {
|
|
let mut libs = shallow_find_files(&target_sysroot, |path| {
|
|
has_prefix(path, "libstd-") && has_suffix(path, ".dll.lib")
|
|
});
|
|
libs.push(path(msvc_import_dynamic_lib_name("foo")));
|
|
libs.push(path(msvc_import_dynamic_lib_name("bar")));
|
|
cc().input("foo.c").args(&libs).out_exe("foo").run();
|
|
} else {
|
|
let stdlibs = shallow_find_files(&target_sysroot, |path| {
|
|
has_extension(path, dynamic_lib_extension()) && filename_contains(path, "std")
|
|
});
|
|
cc().input("foo.c")
|
|
.args(&[dynamic_lib_name("foo"), dynamic_lib_name("bar")])
|
|
.arg(stdlibs.get(0).unwrap())
|
|
.library_search_path(&target_sysroot)
|
|
.output(bin_name("foo"))
|
|
.run();
|
|
}
|
|
run("foo");
|
|
}
|