-fn is_target_dir<P: Into<PathBuf>>(path: P) -> bool {
- let mut path = path.into();
- path.push("lib");
- path.metadata().map(|m| m.is_dir()).unwrap_or(false)
-}
-
-fn target_has_std<P: Into<PathBuf>>(path: P) -> bool {
- let mut path = path.into();
- path.push("lib");
- std::fs::read_dir(path)
- .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 == "libstd.rlib")
-}
-
-
-fn for_all_targets<F: FnMut(String)>(sysroot: &Path, f: F) {
- let target_dir = sysroot.join("lib").join("rustlib");
- let mut targets = std::fs::read_dir(target_dir)
- .expect("invalid sysroot")
- .map(|entry| entry.unwrap())
- .filter(|entry| is_target_dir(entry.path()))
- .filter(|entry| target_has_std(entry.path()))
- .map(|entry| entry.file_name().into_string().unwrap())
- .peekable();
-
- if targets.peek().is_none() {
- panic!("No valid targets found");