use clap::CommandFactory;
use std::fs;
use std::path::Path;
#[path = "src/cli.rs"]
mod cli;
mod speedtest {
#[derive(Clone)]
#[allow(dead_code)]
pub enum TestDuration {
Seconds(u64),
Auto,
}
}
fn normalize_manpage(buf: Vec<u8>) -> Vec<u8> {
let rendered = String::from_utf8(buf).expect("clap_mangen renders UTF-8 man pages");
rendered
.lines()
.map(str::trim_end)
.collect::<Vec<_>>()
.join("\n")
.into_bytes()
}
fn is_dev_source_tree(manifest_dir: &Path) -> bool {
let normalized = manifest_dir.to_string_lossy().replace('\\', "/");
const NON_SOURCE_MARKERS: [&str; 5] = [
"/registry/src/",
"/registry/cache/",
"/git/checkouts/",
"/vendor/",
"/target/package/",
];
!NON_SOURCE_MARKERS
.iter()
.any(|marker| normalized.contains(marker))
}
fn main() {
let nd300_cmd = cli::Nd300Cli::command();
let nd300_man = clap_mangen::Man::new(nd300_cmd);
let mut nd300_buf = Vec::new();
nd300_man.render(&mut nd300_buf).unwrap();
let nd300_buf = normalize_manpage(nd300_buf);
let speedqx_cmd = cli::SpeedQXCli::command();
let speedqx_man = clap_mangen::Man::new(speedqx_cmd);
let mut speedqx_buf = Vec::new();
speedqx_man.render(&mut speedqx_buf).unwrap();
let speedqx_buf = normalize_manpage(speedqx_buf);
let out_man_dir =
std::path::PathBuf::from(std::env::var("OUT_DIR").unwrap_or_else(|_| "man".to_string()))
.join("man");
if fs::create_dir_all(&out_man_dir).is_ok() {
let _ = fs::write(out_man_dir.join("nd300.1"), &nd300_buf);
let _ = fs::write(out_man_dir.join("speedqx.1"), &speedqx_buf);
}
if let Ok(manifest_dir) = std::env::var("CARGO_MANIFEST_DIR") {
let manifest_dir = std::path::PathBuf::from(manifest_dir);
if is_dev_source_tree(&manifest_dir) {
let root_man_dir = manifest_dir.join("man");
if fs::create_dir_all(&root_man_dir).is_ok() {
let _ = fs::write(root_man_dir.join("nd300.1"), &nd300_buf);
let _ = fs::write(root_man_dir.join("speedqx.1"), &speedqx_buf);
}
}
}
println!("cargo::rerun-if-changed=src/cli.rs");
}