compiletest: implement needs-subprocess directive
This commit is contained in:
parent
cf577f34c4
commit
339616b97a
3 changed files with 20 additions and 0 deletions
|
|
@ -488,6 +488,17 @@ impl Config {
|
|||
git_merge_commit_email: &self.git_merge_commit_email,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn has_subprocess_support(&self) -> bool {
|
||||
// FIXME(#135928): compiletest is always a **host** tool. Building and running an
|
||||
// capability detection executable against the **target** is not trivial. The short term
|
||||
// solution here is to hard-code some targets to allow/deny, unfortunately.
|
||||
|
||||
let unsupported_target = self.target_cfg().env == "sgx"
|
||||
|| matches!(self.target_cfg().arch.as_str(), "wasm32" | "wasm64")
|
||||
|| self.target_cfg().os == "emscripten";
|
||||
!unsupported_target
|
||||
}
|
||||
}
|
||||
|
||||
/// Known widths of `target_has_atomic`.
|
||||
|
|
|
|||
|
|
@ -152,6 +152,7 @@ const KNOWN_DIRECTIVE_NAMES: &[&str] = &[
|
|||
"needs-sanitizer-support",
|
||||
"needs-sanitizer-thread",
|
||||
"needs-std-debug-assertions",
|
||||
"needs-subprocess",
|
||||
"needs-symlink",
|
||||
"needs-target-has-atomic",
|
||||
"needs-threads",
|
||||
|
|
|
|||
|
|
@ -94,6 +94,11 @@ pub(super) fn handle_needs(
|
|||
condition: config.has_threads(),
|
||||
ignore_reason: "ignored on targets without threading support",
|
||||
},
|
||||
Need {
|
||||
name: "needs-subprocess",
|
||||
condition: config.has_subprocess_support(),
|
||||
ignore_reason: "ignored on targets without subprocess support",
|
||||
},
|
||||
Need {
|
||||
name: "needs-unwind",
|
||||
condition: config.can_unwind(),
|
||||
|
|
@ -351,6 +356,9 @@ fn find_dlltool(config: &Config) -> bool {
|
|||
dlltool_found
|
||||
}
|
||||
|
||||
// FIXME(#135928): this is actually not quite right because this detection is run on the **host**.
|
||||
// This however still helps the case of windows -> windows local development in case symlinks are
|
||||
// not available.
|
||||
#[cfg(windows)]
|
||||
fn has_symlinks() -> bool {
|
||||
if std::env::var_os("CI").is_some() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue