use std::path::PathBuf;
use std::process::{Command, Stdio};
fn main() {
let args: Vec<String> = std::env::args().skip(1).collect();
if args.is_empty() {
eprintln!(
"[x1zz-runner] 사용법: x1zz-runner <file.xzz|file.csv> [--verbose] [--output <path.csv>]"
);
std::process::exit(1);
}
let exec_path = resolve_exec_binary();
let status = Command::new(&exec_path)
.args(&args)
.stdin(Stdio::inherit())
.stdout(Stdio::inherit())
.stderr(Stdio::inherit())
.status()
.unwrap_or_else(|e| {
eprintln!(
"[x1zz-runner] ERROR: x1zz-exec 실행 엔진을 시작할 수 없습니다."
);
eprintln!("[x1zz-runner] 경로: {}", exec_path.display());
eprintln!("[x1zz-runner] 원인: {}", e);
eprintln!(
"[x1zz-runner] x1zz-exec 바이너리가 x1zz-runner와 같은 디렉터리에 있는지 확인하세요."
);
std::process::exit(1);
});
std::process::exit(status.code().unwrap_or(1));
}
fn resolve_exec_binary() -> PathBuf {
#[cfg(target_os = "windows")]
let exec_name = "x1zz-exec.exe";
#[cfg(not(target_os = "windows"))]
let exec_name = "x1zz-exec";
if let Ok(current_exe) = std::env::current_exe() {
if let Some(dir) = current_exe.parent() {
let candidate = dir.join(exec_name);
if candidate.exists() {
return candidate;
}
}
}
PathBuf::from(exec_name)
}