1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
use std::env::{current_dir, var}; use std::path::{Path, PathBuf}; const LOA_SDK: &str = "LOA_SDK"; static mut OVERRIDE_LOA_SDK: Option<PathBuf> = None; pub fn override_sdk_dir<P: Into<PathBuf>>(path: P) { unsafe { OVERRIDE_LOA_SDK = Some(path.into()); } } pub fn sdk_dir() -> PathBuf { unsafe { OVERRIDE_LOA_SDK.clone() } .or_else(|| var(LOA_SDK).ok().map(PathBuf::from)) .or_else(|| current_dir().ok()) .expect("Please set the LOA_SDK environment variable") } pub fn sdk_path<S: AsRef<Path>, I: IntoIterator<Item = S>>(segments: I) -> PathBuf { let mut path = sdk_dir(); path.extend(segments); path } pub fn sdk_glob(segments: &[&str]) -> String { let sdk = sdk_dir(); let mut path = vec![sdk.to_str().unwrap()]; path.extend(segments); path.join(std::path::MAIN_SEPARATOR.to_string().as_ref()) }