use std::env;
use std::path::PathBuf;
use std::process::Command;
pub fn binary_exists_in_path() -> bool {
let binary_name = super::platform::get_binary_name();
let output = if super::platform::get_platform() == super::platform::Platform::Windows {
Command::new("where").arg(&binary_name).output()
} else {
Command::new("which").arg(&binary_name).output()
};
output.map(|o| o.status.success()).unwrap_or(false)
}
pub fn get_binary_path() -> Option<PathBuf> {
let binary_name = super::platform::get_binary_name();
if let Ok(current_dir) = env::current_dir() {
let binary_path = current_dir.join(&binary_name);
if binary_path.exists() && binary_path.is_file() {
return Some(binary_path);
}
}
if binary_exists_in_path() {
if let Ok(paths) = env::var("PATH") {
for path in env::split_paths(&paths) {
let full_path = path.join(&binary_name);
if full_path.exists() && full_path.is_file() {
return Some(full_path);
}
}
}
}
None
}