diff --git a/tests/compiletest.rs b/tests/compiletest.rs index 7aa55ef663..724eca7511 100644 --- a/tests/compiletest.rs +++ b/tests/compiletest.rs @@ -124,6 +124,17 @@ fn is_target_dir>(path: P) -> bool { path.metadata().map(|m| m.is_dir()).unwrap_or(false) } +fn target_has_std>(path: P) -> bool { + let target_lib_dir = path.into().join("lib"); + std::fs::read_dir(target_lib_dir) + .expect("invalid target") + .map(|entry| entry.unwrap()) + .filter(|entry| entry.file_type().unwrap().is_file()) + .filter_map(|entry| entry.file_name().into_string().ok()) + .any(|file_name| file_name.starts_with("libstd") && file_name.ends_with(".rlib")) +} + + fn for_all_targets(sysroot: &Path, mut f: F) { let target_dir = sysroot.join("lib").join("rustlib"); for entry in std::fs::read_dir(target_dir).expect("invalid sysroot") { @@ -131,6 +142,9 @@ fn for_all_targets(sysroot: &Path, mut f: F) { if !is_target_dir(entry.path()) { continue; } + if !target_has_std(entry.path()) { + continue; + } let target = entry.file_name().into_string().unwrap(); f(target); }