forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
tests: migrate
libs-through-symlink
to rmake.rs
- Document test intent, backlink to rust-lang#13890 and fix PR rust-lang#13903. - Fix the test logic: the `Makefile` version seems to not actually be exercising the "library search traverses symlink" logic, because the actual symlinked-to-library is present under the directory tree when `bar.rs` is compiled, because the `$(RUSTC)` invocation has an implicit `-L $(TMPDIR)`. The symlink itself was actually broken, i.e. it should've been `ln -nsf $(TMPDIR)/outdir/$(NAME) $(TMPDIR)` but it used `ln -nsf outdir/$(NAME) $(TMPDIR)`. Co-authored-by: Oneirical <[email protected]>
- Loading branch information
Showing
3 changed files
with
48 additions
and
23 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
//! Regression test for [rustc doesn't handle relative symlinks to libraries | ||
//! #13890](https://github.com/rust-lang/rust/issues/13890). | ||
//! | ||
//! This smoke test checks that for a given library search path `P`: | ||
//! | ||
//! - `rustc` is able to locate a library available via a symlink, where: | ||
//! - the symlink is under the directory subtree of `P`, | ||
//! - but the actual library is not (it's in a different directory subtree). | ||
//! | ||
//! For example: | ||
//! | ||
//! ```text | ||
//! actual_dir/ | ||
//! libfoo.rlib | ||
//! symlink_dir/ # $CWD set; rustc -L . bar.rs that depends on foo | ||
//! libfoo.rlib --> ../actual_dir/libfoo.rlib | ||
//! ``` | ||
//! | ||
//! Previously, if `rustc` was invoked with CWD set to `symlink_dir/`, it would fail to traverse the | ||
//! symlink to locate `actual_dir/libfoo.rlib`. This was originally fixed in | ||
//! <https://github.com/rust-lang/rust/pull/13903>. | ||
//@ ignore-cross-compile | ||
|
||
use run_make_support::{bare_rustc, cwd, path, rfs, rust_lib_name}; | ||
|
||
fn main() { | ||
let actual_lib_dir = path("actual_lib_dir"); | ||
let symlink_lib_dir = path("symlink_lib_dir"); | ||
rfs::create_dir_all(&actual_lib_dir); | ||
rfs::create_dir_all(&symlink_lib_dir); | ||
|
||
// NOTE: `bare_rustc` is used because it does not introduce an implicit `-L .` library search | ||
// flag. | ||
bare_rustc().input("foo.rs").output(actual_lib_dir.join(rust_lib_name("foo"))).run(); | ||
|
||
rfs::symlink_file( | ||
actual_lib_dir.join(rust_lib_name("foo")), | ||
symlink_lib_dir.join(rust_lib_name("foo")), | ||
); | ||
|
||
// Make rustc's $CWD be in the directory containing the symlink-to-lib. | ||
bare_rustc() | ||
.current_dir(&symlink_lib_dir) | ||
.library_search_path(".") | ||
.input(cwd().join("bar.rs")) | ||
.run(); | ||
} |