| use std::path::{Path, PathBuf}; | |
| use xshell::{Shell, cmd}; | |
| pub(crate) fn list_rust_files(dir: &Path) -> Vec<PathBuf> { | |
| let mut res = list_files(dir); | |
| res.retain(|it| { | |
| it.file_name().unwrap_or_default().to_str().unwrap_or_default().ends_with(".rs") | |
| }); | |
| res | |
| } | |
| pub(crate) fn list_files(dir: &Path) -> Vec<PathBuf> { | |
| let mut res = Vec::new(); | |
| let mut work = vec![dir.to_path_buf()]; | |
| while let Some(dir) = work.pop() { | |
| for entry in dir.read_dir().unwrap() { | |
| let entry = entry.unwrap(); | |
| let file_type = entry.file_type().unwrap(); | |
| let path = entry.path(); | |
| let is_hidden = | |
| path.file_name().unwrap_or_default().to_str().unwrap_or_default().starts_with('.'); | |
| if !is_hidden { | |
| if file_type.is_dir() { | |
| work.push(path); | |
| } else if file_type.is_file() { | |
| res.push(path); | |
| } | |
| } | |
| } | |
| } | |
| res | |
| } | |
| pub(crate) fn detect_target(sh: &Shell) -> String { | |
| match std::env::var("RA_TARGET") { | |
| Ok(target) => target, | |
| _ => match cmd!(sh, "rustc --print=host-tuple").read() { | |
| Ok(target) => target, | |
| Err(e) => panic!("Failed to detect target: {e}\nPlease set RA_TARGET explicitly"), | |
| }, | |
| } | |
| } |