#![allow(
clippy::print_stdout,
reason = "cargo directives are written to stdout"
)]
use std::env;
use std::fs;
use std::io;
use std::path::{Path, PathBuf};
use clap::CommandFactory;
#[path = "src/cli.rs"]
mod cli;
fn main() -> io::Result<()> {
println!("cargo::rerun-if-changed=src/cli.rs");
println!("cargo::rerun-if-changed=build.rs");
println!("cargo::rerun-if-env-changed=SOURCE_DATE_EPOCH");
let Some(out_dir) = env::var_os("OUT_DIR").map(PathBuf::from) else {
return Ok(());
};
let manuals = out_dir.join("artifacts").join("man");
fs::create_dir_all(&manuals)?;
let mut command = cli::Cli::command();
command.build();
write_manuals(&command, &manuals)?;
Ok(())
}
fn write_manuals(command: &clap::Command, target: &Path) -> io::Result<()> {
let root = clap_mangen::Man::new(command.clone());
let mut buffer = Vec::new();
root.render(&mut buffer)?;
fs::write(target.join("reserve.1"), &buffer)?;
for sub in command.get_subcommands() {
let name = format!("reserve-{}", sub.get_name());
let file = format!("{name}.1");
let leaked: &'static str = Box::leak(name.into_boxed_str());
let page = clap_mangen::Man::new(sub.clone().name(leaked));
let mut buffer = Vec::new();
page.render(&mut buffer)?;
fs::write(target.join(file), &buffer)?;
}
Ok(())
}