Skip to content

Commit 3048c4a

Browse files
authored
Rollup merge of rust-lang#134829 - jieyouxu:migrate-libs-through-symlinks, r=lqd
Migrate `libs-through-symlink` to rmake.rs Part of rust-lang#121876. This PR migrates `tests/run-make/libs-through-symlink/` to use rmake.rs. - Regression test for rust-lang#13890. - Original fix PR is rust-lang#13903. - 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 `$(TMPDIR)` 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)`. The rmake.rs version now explicitly separates the two directory trees and sets the CWD of the `bar.rs` rustc invocation so that the actual library is *not* present under its CWD tree. I.e. it is now ``` $test_output/ # rustc foo.rs -o actual_lib_dir/libfoo.rlib actual_lib_dir/ libfoo.rlib symlink_lib_dir/ # CWD set; rustc -L . bar.rs libfoo.rlib --> $test_output/actual_lib_dir/libfoo.rlib ``` Partially supersedes rust-lang#129011. This PR is co-authored with `@Oneirical.` r? compiler
2 parents dd03fba + b77ab2d commit 3048c4a

File tree

3 files changed

+48
-23
lines changed

3 files changed

+48
-23
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
run-make/cat-and-grep-sanity-check/Makefile
22
run-make/extern-fn-reachable/Makefile
33
run-make/jobserver-error/Makefile
4-
run-make/libs-through-symlinks/Makefile
54
run-make/split-debuginfo/Makefile
65
run-make/symbol-mangling-hashed/Makefile
76
run-make/translation/Makefile

tests/run-make/libs-through-symlinks/Makefile

-22
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
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

Comments
 (0)