use std::path::{Path, PathBuf};
#[path = "src/lib.rs"]
mod codegen_source;
fn main() {
println!("cargo:rerun-if-env-changed=NOYA_GEN_ASSETS");
println!("cargo:rerun-if-changed=src/lib.rs");
println!("cargo:rerun-if-changed=build.rs");
if std::env::var("NOYA_GEN_ASSETS").as_deref() != Ok("1") {
return;
}
let out_dir: PathBuf = std::env::var_os("OUT_DIR")
.expect("OUT_DIR is set by Cargo for build scripts")
.into();
let cmds = [
("noyafmt", codegen_source::noyafmt_command()),
("noyavalidate", codegen_source::noyavalidate_command()),
];
for (name, cmd) in cmds {
gen_completions(&out_dir, name, &mut cmd.clone());
gen_manpage(&out_dir, name, cmd);
}
}
fn gen_completions(out_dir: &Path, name: &str, cmd: &mut clap::Command) {
use clap_complete::{Shell, generate_to};
for shell in [Shell::Bash, Shell::Fish, Shell::Zsh, Shell::PowerShell] {
let _ = generate_to(shell, cmd, name, out_dir)
.expect("clap_complete::generate_to must succeed in build.rs");
}
}
fn gen_manpage(out_dir: &Path, name: &str, cmd: clap::Command) {
let path = out_dir.join(format!("{name}.1"));
let mut buffer: Vec<u8> = Vec::with_capacity(4096);
clap_mangen::Man::new(cmd)
.render(&mut buffer)
.expect("clap_mangen::Man::render must succeed in build.rs");
std::fs::write(&path, buffer).unwrap_or_else(|e| panic!("writing {}: {e}", path.display()));
}