diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2024-06-23 22:39:02 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-06-23 22:39:02 +0200 |
| commit | e4f102d174d65ae1619c1ffbd59d10f49d7ac341 (patch) | |
| tree | 202147919a75bf1685124a3a1e6189813ca00d1f | |
| parent | 0149bc47d8b77a335922ca3c5cc3cd135a96e983 (diff) | |
| parent | b8a003035887586eb180b2618cc9891f8f913678 (diff) | |
| download | rust-e4f102d174d65ae1619c1ffbd59d10f49d7ac341.tar.gz rust-e4f102d174d65ae1619c1ffbd59d10f49d7ac341.zip | |
Rollup merge of #126862 - ChrisDenton:needs-symlink, r=jieyouxu
Add needs-symlink directive to compiletest This is an alternative to #126846 that allows running symlink tests on Windows in CI but will ignore them locally if symlinks aren't available. A future improvement would be to check that the `needs-symlink` directive is used in rmake files that call `create_symlink` but this is just a quick PR to unblock Windows users who want to run tests locally without enabling symlinks.
| -rw-r--r-- | src/tools/compiletest/src/header.rs | 1 | ||||
| -rw-r--r-- | src/tools/compiletest/src/header/needs.rs | 26 | ||||
| -rw-r--r-- | tests/run-make/symlinked-extern/rmake.rs | 1 | ||||
| -rw-r--r-- | tests/run-make/symlinked-libraries/rmake.rs | 1 | ||||
| -rw-r--r-- | tests/run-make/symlinked-rlib/rmake.rs | 1 |
5 files changed, 30 insertions, 0 deletions
diff --git a/src/tools/compiletest/src/header.rs b/src/tools/compiletest/src/header.rs index 82d80fcc19c..31ae0deb7ec 100644 --- a/src/tools/compiletest/src/header.rs +++ b/src/tools/compiletest/src/header.rs @@ -877,6 +877,7 @@ const KNOWN_DIRECTIVE_NAMES: &[&str] = &[ "needs-sanitizer-shadow-call-stack", "needs-sanitizer-support", "needs-sanitizer-thread", + "needs-symlink", "needs-threads", "needs-unwind", "needs-wasmtime", diff --git a/src/tools/compiletest/src/header/needs.rs b/src/tools/compiletest/src/header/needs.rs index b96832db67b..5b2665f7d0b 100644 --- a/src/tools/compiletest/src/header/needs.rs +++ b/src/tools/compiletest/src/header/needs.rs @@ -144,6 +144,11 @@ pub(super) fn handle_needs( condition: config.runner.as_ref().is_some_and(|r| r.contains("wasmtime")), ignore_reason: "ignored when wasmtime runner is not available", }, + Need { + name: "needs-symlink", + condition: cache.symlinks, + ignore_reason: "ignored if symlinks are unavailable", + }, ]; let (name, comment) = match ln.split_once([':', ' ']) { @@ -209,6 +214,7 @@ pub(super) struct CachedNeedsConditions { xray: bool, rust_lld: bool, dlltool: bool, + symlinks: bool, } impl CachedNeedsConditions { @@ -253,6 +259,7 @@ impl CachedNeedsConditions { .exists(), dlltool: find_dlltool(&config), + symlinks: has_symlinks(), } } } @@ -279,3 +286,22 @@ fn find_dlltool(config: &Config) -> bool { }; dlltool_found } + +#[cfg(windows)] +fn has_symlinks() -> bool { + if std::env::var_os("CI").is_some() { + return true; + } + let link = std::env::temp_dir().join("RUST_COMPILETEST_SYMLINK_CHECK"); + if std::os::windows::fs::symlink_file("DOES NOT EXIST", &link).is_ok() { + std::fs::remove_file(&link).unwrap(); + true + } else { + false + } +} + +#[cfg(not(windows))] +fn has_symlinks() -> bool { + true +} diff --git a/tests/run-make/symlinked-extern/rmake.rs b/tests/run-make/symlinked-extern/rmake.rs index 98f69aefbe6..9ed5b76edcb 100644 --- a/tests/run-make/symlinked-extern/rmake.rs +++ b/tests/run-make/symlinked-extern/rmake.rs @@ -9,6 +9,7 @@ // can result in successful compilation. //@ ignore-cross-compile +//@ needs-symlink use run_make_support::{create_symlink, cwd, fs_wrapper, rustc}; diff --git a/tests/run-make/symlinked-libraries/rmake.rs b/tests/run-make/symlinked-libraries/rmake.rs index 3f02f19ccd5..1d1dce5b5cf 100644 --- a/tests/run-make/symlinked-libraries/rmake.rs +++ b/tests/run-make/symlinked-libraries/rmake.rs @@ -6,6 +6,7 @@ // See https://github.com/rust-lang/rust/issues/12459 //@ ignore-cross-compile +//@ needs-symlink use run_make_support::{create_symlink, dynamic_lib_name, fs_wrapper, rustc}; diff --git a/tests/run-make/symlinked-rlib/rmake.rs b/tests/run-make/symlinked-rlib/rmake.rs index 3759ca25928..65ebb191428 100644 --- a/tests/run-make/symlinked-rlib/rmake.rs +++ b/tests/run-make/symlinked-rlib/rmake.rs @@ -6,6 +6,7 @@ // See https://github.com/rust-lang/rust/pull/32828 //@ ignore-cross-compile +//@ needs-symlink use run_make_support::{create_symlink, cwd, rustc}; |
