use std::env;
use std::io::Error;
use std::process::Command;
fn main() -> Result<(), Error> {
let out_dir = env::var("OUT_DIR").map_err(|e| {
Error::new(
std::io::ErrorKind::NotFound,
format!("OUT_DIR environment variable not set: {e}"),
)
})?;
println!("cargo:rerun-if-changed=src/cli/mod.rs");
println!("cargo:rerun-if-changed=src/cli/commands.rs");
println!("cargo:rerun-if-changed=src/cli/args.rs");
if let Ok(output) = Command::new("rustc").arg("--version").output()
&& let Ok(version) = String::from_utf8(output.stdout)
{
let version = version.trim();
println!("cargo:rustc-env=RUSTC_VERSION={version}");
}
let features: Vec<String> = env::vars()
.filter_map(|(key, _)| {
if key.starts_with("CARGO_FEATURE_") {
let feature = key
.strip_prefix("CARGO_FEATURE_")
.map(|s| s.to_lowercase().replace('_', "-"))?;
Some(feature)
} else {
None
}
})
.collect();
let features_list = features.join(",");
println!("cargo:rustc-env=CARGO_FEATURES={features_list}");
println!("cargo:warning=Shell completions will be generated in OUT_DIR: {out_dir}");
Ok(())
}