use std::path::{Path, PathBuf};
use std::process::Command;
use crate::error::{Error, Result};
pub fn is_available(program: &str) -> bool {
Command::new(program)
.arg("--version")
.output()
.map(|o| o.status.success())
.unwrap_or(false)
}
pub fn compile_with_reference(program: &str, inputs: &[PathBuf], out_dir: &Path) -> Result<()> {
let mut cmd = Command::new(program);
cmd.arg("-d").arg(out_dir);
for i in inputs {
cmd.arg(i);
}
let output = cmd
.output()
.map_err(|e| Error::message(format!("failed to run reference zic {program:?}: {e}")))?;
if !output.status.success() {
return Err(Error::message(format!(
"reference zic failed: {}",
String::from_utf8_lossy(&output.stderr).trim()
)));
}
Ok(())
}
pub fn compiled_path(out_dir: &Path, zone: &str) -> PathBuf {
out_dir.join(zone)
}