1use std::path::{Path, PathBuf};
2
3pub const TARGET_TRIPLE: &str = env!("ROOTCX_TARGET");
4
5pub fn binary_name(name: &str) -> String {
6 if cfg!(windows) { format!("{name}.exe") } else { name.to_string() }
7}
8
9pub fn binary_path(dir: &Path, name: &str) -> PathBuf {
10 dir.join(binary_name(name))
11}
12
13pub fn bundled_binary(name: &str) -> Option<PathBuf> {
14 let dir = std::env::current_exe().ok()?.parent()?.to_path_buf();
15 let candidates: [Option<PathBuf>; 3] = [
16 Some(dir.join(binary_name(&format!("{name}-{}", TARGET_TRIPLE)))),
17 Some(dir.join(binary_name(name))),
18 crate::dirs::rootcx_home().ok().map(|h| h.join("bin").join(binary_name(name))),
19 ];
20 candidates.into_iter().flatten().find(|p| p.exists())
21}
22
23pub fn runtime_installed() -> bool {
24 crate::dirs::rootcx_home().ok()
25 .map(|h| h.join("bin").join(binary_name("rootcx-core")).is_file())
26 .unwrap_or(false)
27}