Rollup merge of #125674 - Oneirical:another-day-another-test, r=jieyouxu
Rewrite `symlinked-extern`, `symlinked-rlib` and `symlinked-libraries` `run-make` tests in `rmake.rs` format Part of #121876 and the associated [Google Summer of Code project](https://blog.rust-lang.org/2024/05/01/gsoc-2024-selected-projects.html). try-job: x86_64-msvc
This commit is contained in:
commit
1a6b1a14f9
@ -93,6 +93,34 @@ pub fn source_root() -> PathBuf {
|
||||
env_var("SOURCE_ROOT").into()
|
||||
}
|
||||
|
||||
/// Creates a new symlink to a path on the filesystem, adjusting for Windows or Unix.
|
||||
#[cfg(target_family = "windows")]
|
||||
pub fn create_symlink<P: AsRef<Path>, Q: AsRef<Path>>(original: P, link: Q) {
|
||||
if link.as_ref().exists() {
|
||||
std::fs::remove_dir(link.as_ref()).unwrap();
|
||||
}
|
||||
use std::os::windows::fs;
|
||||
fs::symlink_file(original.as_ref(), link.as_ref()).expect(&format!(
|
||||
"failed to create symlink {:?} for {:?}",
|
||||
link.as_ref().display(),
|
||||
original.as_ref().display(),
|
||||
));
|
||||
}
|
||||
|
||||
/// Creates a new symlink to a path on the filesystem, adjusting for Windows or Unix.
|
||||
#[cfg(target_family = "unix")]
|
||||
pub fn create_symlink<P: AsRef<Path>, Q: AsRef<Path>>(original: P, link: Q) {
|
||||
if link.as_ref().exists() {
|
||||
std::fs::remove_dir(link.as_ref()).unwrap();
|
||||
}
|
||||
use std::os::unix::fs;
|
||||
fs::symlink(original.as_ref(), link.as_ref()).expect(&format!(
|
||||
"failed to create symlink {:?} for {:?}",
|
||||
link.as_ref().display(),
|
||||
original.as_ref().display(),
|
||||
));
|
||||
}
|
||||
|
||||
/// Construct the static library name based on the platform.
|
||||
pub fn static_lib_name(name: &str) -> String {
|
||||
// See tools.mk (irrelevant lines omitted):
|
||||
|
@ -227,9 +227,6 @@ run-make/std-core-cycle/Makefile
|
||||
run-make/symbol-mangling-hashed/Makefile
|
||||
run-make/symbol-visibility/Makefile
|
||||
run-make/symbols-include-type-name/Makefile
|
||||
run-make/symlinked-extern/Makefile
|
||||
run-make/symlinked-libraries/Makefile
|
||||
run-make/symlinked-rlib/Makefile
|
||||
run-make/sysroot-crates-are-unstable/Makefile
|
||||
run-make/target-cpu-native/Makefile
|
||||
run-make/target-specs/Makefile
|
||||
|
@ -1,12 +0,0 @@
|
||||
# ignore-cross-compile
|
||||
include ../tools.mk
|
||||
|
||||
# ignore-windows
|
||||
# `ln` is actually `cp` on msys.
|
||||
|
||||
all:
|
||||
$(RUSTC) foo.rs
|
||||
mkdir -p $(TMPDIR)/other
|
||||
ln -nsf $(TMPDIR)/libfoo.rlib $(TMPDIR)/other
|
||||
$(RUSTC) bar.rs -L $(TMPDIR)
|
||||
$(RUSTC) baz.rs --extern foo=$(TMPDIR)/other/libfoo.rlib -L $(TMPDIR)
|
21
tests/run-make/symlinked-extern/rmake.rs
Normal file
21
tests/run-make/symlinked-extern/rmake.rs
Normal file
@ -0,0 +1,21 @@
|
||||
// Crates that are resolved normally have their path canonicalized and all
|
||||
// symlinks resolved. This did not happen for paths specified
|
||||
// using the --extern option to rustc, which could lead to rustc thinking
|
||||
// that it encountered two different versions of a crate, when it's
|
||||
// actually the same version found through different paths.
|
||||
// See https://github.com/rust-lang/rust/pull/16505
|
||||
|
||||
// This test checks that --extern and symlinks together
|
||||
// can result in successful compilation.
|
||||
|
||||
//@ ignore-cross-compile
|
||||
|
||||
use run_make_support::{create_symlink, cwd, fs_wrapper, rustc};
|
||||
|
||||
fn main() {
|
||||
rustc().input("foo.rs").run();
|
||||
fs_wrapper::create_dir_all("other");
|
||||
create_symlink("libfoo.rlib", "other");
|
||||
rustc().input("bar.rs").library_search_path(cwd()).run();
|
||||
rustc().input("baz.rs").extern_("foo", "other").library_search_path(cwd()).run();
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
# ignore-cross-compile
|
||||
include ../tools.mk
|
||||
|
||||
# ignore-windows
|
||||
# `ln` is actually `cp` on msys.
|
||||
|
||||
all:
|
||||
$(RUSTC) foo.rs -C prefer-dynamic
|
||||
mkdir -p $(TMPDIR)/other
|
||||
ln -nsf $(TMPDIR)/$(call DYLIB_GLOB,foo) $(TMPDIR)/other
|
||||
$(RUSTC) bar.rs -L $(TMPDIR)/other
|
16
tests/run-make/symlinked-libraries/rmake.rs
Normal file
16
tests/run-make/symlinked-libraries/rmake.rs
Normal file
@ -0,0 +1,16 @@
|
||||
// When a directory and a symlink simultaneously exist with the same name,
|
||||
// setting that name as the library search path should not cause rustc
|
||||
// to avoid looking in the symlink and cause an error. This test creates
|
||||
// a directory and a symlink named "other", and places the library in the symlink.
|
||||
// If it succeeds, the library was successfully found.
|
||||
// See https://github.com/rust-lang/rust/issues/12459
|
||||
|
||||
//@ ignore-cross-compile
|
||||
use run_make_support::{create_symlink, dynamic_lib_name, fs_wrapper, rustc};
|
||||
|
||||
fn main() {
|
||||
rustc().input("foo.rs").arg("-Cprefer-dynamic").run();
|
||||
fs_wrapper::create_dir_all("other");
|
||||
create_symlink(dynamic_lib_name("foo"), "other");
|
||||
rustc().input("bar.rs").library_search_path("other").run();
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
# ignore-cross-compile
|
||||
include ../tools.mk
|
||||
|
||||
# ignore-windows
|
||||
# `ln` is actually `cp` on msys.
|
||||
|
||||
all:
|
||||
$(RUSTC) foo.rs --crate-type=rlib -o $(TMPDIR)/foo.xxx
|
||||
ln -nsf $(TMPDIR)/foo.xxx $(TMPDIR)/libfoo.rlib
|
||||
$(RUSTC) bar.rs -L $(TMPDIR)
|
16
tests/run-make/symlinked-rlib/rmake.rs
Normal file
16
tests/run-make/symlinked-rlib/rmake.rs
Normal file
@ -0,0 +1,16 @@
|
||||
// Rustc did not recognize libraries which were symlinked
|
||||
// to files having extension other than .rlib. This was fixed
|
||||
// in #32828. This test creates a symlink to "foo.xxx", which has
|
||||
// an unusual file extension, and checks that rustc can successfully
|
||||
// use it as an rlib library.
|
||||
// See https://github.com/rust-lang/rust/pull/32828
|
||||
|
||||
//@ ignore-cross-compile
|
||||
|
||||
use run_make_support::{create_symlink, cwd, rustc};
|
||||
|
||||
fn main() {
|
||||
rustc().input("foo.rs").crate_type("rlib").output("foo.xxx").run();
|
||||
create_symlink("foo.xxx", "libfoo.rlib");
|
||||
rustc().input("bar.rs").library_search_path(cwd()).run();
|
||||
}
|
Loading…
Reference in New Issue
Block a user