Skip to main content

rootcx_platform/
bin.rs

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}