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.
This commit is contained in:
commit
e4f102d174
@ -877,6 +877,7 @@ pub fn line_directive<'line>(
|
|||||||
"needs-sanitizer-shadow-call-stack",
|
"needs-sanitizer-shadow-call-stack",
|
||||||
"needs-sanitizer-support",
|
"needs-sanitizer-support",
|
||||||
"needs-sanitizer-thread",
|
"needs-sanitizer-thread",
|
||||||
|
"needs-symlink",
|
||||||
"needs-threads",
|
"needs-threads",
|
||||||
"needs-unwind",
|
"needs-unwind",
|
||||||
"needs-wasmtime",
|
"needs-wasmtime",
|
||||||
|
@ -144,6 +144,11 @@ pub(super) fn handle_needs(
|
|||||||
condition: config.runner.as_ref().is_some_and(|r| r.contains("wasmtime")),
|
condition: config.runner.as_ref().is_some_and(|r| r.contains("wasmtime")),
|
||||||
ignore_reason: "ignored when wasmtime runner is not available",
|
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([':', ' ']) {
|
let (name, comment) = match ln.split_once([':', ' ']) {
|
||||||
@ -209,6 +214,7 @@ pub(super) struct CachedNeedsConditions {
|
|||||||
xray: bool,
|
xray: bool,
|
||||||
rust_lld: bool,
|
rust_lld: bool,
|
||||||
dlltool: bool,
|
dlltool: bool,
|
||||||
|
symlinks: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl CachedNeedsConditions {
|
impl CachedNeedsConditions {
|
||||||
@ -253,6 +259,7 @@ pub(super) fn load(config: &Config) -> Self {
|
|||||||
.exists(),
|
.exists(),
|
||||||
|
|
||||||
dlltool: find_dlltool(&config),
|
dlltool: find_dlltool(&config),
|
||||||
|
symlinks: has_symlinks(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -279,3 +286,22 @@ fn find_dlltool(config: &Config) -> bool {
|
|||||||
};
|
};
|
||||||
dlltool_found
|
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
|
||||||
|
}
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
// can result in successful compilation.
|
// can result in successful compilation.
|
||||||
|
|
||||||
//@ ignore-cross-compile
|
//@ ignore-cross-compile
|
||||||
|
//@ needs-symlink
|
||||||
|
|
||||||
use run_make_support::{create_symlink, cwd, fs_wrapper, rustc};
|
use run_make_support::{create_symlink, cwd, fs_wrapper, rustc};
|
||||||
|
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
// See https://github.com/rust-lang/rust/issues/12459
|
// See https://github.com/rust-lang/rust/issues/12459
|
||||||
|
|
||||||
//@ ignore-cross-compile
|
//@ ignore-cross-compile
|
||||||
|
//@ needs-symlink
|
||||||
|
|
||||||
use run_make_support::{create_symlink, dynamic_lib_name, fs_wrapper, rustc};
|
use run_make_support::{create_symlink, dynamic_lib_name, fs_wrapper, rustc};
|
||||||
|
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
// See https://github.com/rust-lang/rust/pull/32828
|
// See https://github.com/rust-lang/rust/pull/32828
|
||||||
|
|
||||||
//@ ignore-cross-compile
|
//@ ignore-cross-compile
|
||||||
|
//@ needs-symlink
|
||||||
|
|
||||||
use run_make_support::{create_symlink, cwd, rustc};
|
use run_make_support::{create_symlink, cwd, rustc};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user