use super::{registration_check, split_build_args};
pub(crate) fn build(args: &mut impl Iterator<Item = String>) -> Result<(), String> {
let all: Vec<String> = args.by_ref().collect();
let (directory, cargo_args) = split_build_args(&all);
let directory = directory.unwrap_or_else(|| ".".to_owned());
let package = registration_check(&directory)?;
println!("nichlink build: registration ok ({package})");
let manifest = std::fs::canonicalize(&directory)
.map_err(|error| format!("cannot resolve {directory}: {error}"))?;
let status = std::process::Command::new("cargo")
.arg("build")
.args(&cargo_args)
.current_dir(&manifest)
.status()
.map_err(|error| format!("cannot start cargo build: {error}"))?;
if status.success() {
Ok(())
} else {
Err(format!("cargo build failed ({status})"))
}
}