|
| 1 | +//! Regression test for [rustc doesn't handle relative symlinks to libraries |
| 2 | +//! #13890](https://github.com/rust-lang/rust/issues/13890). |
| 3 | +//! |
| 4 | +//! This smoke test checks that for a given library search path `P`: |
| 5 | +//! |
| 6 | +//! - `rustc` is able to locate a library available via a symlink, where: |
| 7 | +//! - the symlink is under the directory subtree of `P`, |
| 8 | +//! - but the actual library is not (it's in a different directory subtree). |
| 9 | +//! |
| 10 | +//! For example: |
| 11 | +//! |
| 12 | +//! ```text |
| 13 | +//! actual_dir/ |
| 14 | +//! libfoo.rlib |
| 15 | +//! symlink_dir/ # $CWD set; rustc -L . bar.rs that depends on foo |
| 16 | +//! libfoo.rlib --> ../actual_dir/libfoo.rlib |
| 17 | +//! ``` |
| 18 | +//! |
| 19 | +//! Previously, if `rustc` was invoked with CWD set to `symlink_dir/`, it would fail to traverse the |
| 20 | +//! symlink to locate `actual_dir/libfoo.rlib`. This was originally fixed in |
| 21 | +//! <https://github.com/rust-lang/rust/pull/13903>. |
| 22 | +
|
| 23 | +//@ ignore-cross-compile |
| 24 | + |
| 25 | +use run_make_support::{bare_rustc, cwd, path, rfs, rust_lib_name}; |
| 26 | + |
| 27 | +fn main() { |
| 28 | + let actual_lib_dir = path("actual_lib_dir"); |
| 29 | + let symlink_lib_dir = path("symlink_lib_dir"); |
| 30 | + rfs::create_dir_all(&actual_lib_dir); |
| 31 | + rfs::create_dir_all(&symlink_lib_dir); |
| 32 | + |
| 33 | + // NOTE: `bare_rustc` is used because it does not introduce an implicit `-L .` library search |
| 34 | + // flag. |
| 35 | + bare_rustc().input("foo.rs").output(actual_lib_dir.join(rust_lib_name("foo"))).run(); |
| 36 | + |
| 37 | + rfs::symlink_file( |
| 38 | + actual_lib_dir.join(rust_lib_name("foo")), |
| 39 | + symlink_lib_dir.join(rust_lib_name("foo")), |
| 40 | + ); |
| 41 | + |
| 42 | + // Make rustc's $CWD be in the directory containing the symlink-to-lib. |
| 43 | + bare_rustc() |
| 44 | + .current_dir(&symlink_lib_dir) |
| 45 | + .library_search_path(".") |
| 46 | + .input(cwd().join("bar.rs")) |
| 47 | + .run(); |
| 48 | +} |
0 commit comments