//! 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 //! . //@ ignore-cross-compile //@ needs-symlink 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(); }