use std::env;
fn main() -> Result<(), Box<dyn std::error::Error>> {
const ENV_VAR_NAME: &str = "DEV";
match env::var(ENV_VAR_NAME) {
Ok(value) if value == "1" => {
println!(
"cargo:warning=Condition met: {} is set to '1'.",
ENV_VAR_NAME
);
generate_headers()?;
}
_ => {
println!(
"cargo:warning=Skipping header generation. Set {}='1' to enable.",
ENV_VAR_NAME
);
}
}
Ok(())
}
fn generate_headers() -> Result<(), Box<dyn std::error::Error>> {
let crate_dir = std::env::var("CARGO_MANIFEST_DIR")?;
match cbindgen::generate(&crate_dir) {
Ok(bindings) => {
bindings.write_to_file("dtact.h");
println!("cargo:warning=Generated dtact.h");
}
Err(e) => {
println!(
"cargo:warning=Failed \
to generate C \
bindings: {:?}",
e
);
println!("cargo:warning=Continuing build without C header generation");
}
}
let cpp_config = cbindgen::Config {
language: cbindgen::Language::Cxx,
namespace: Some("dtact".to_string()),
..cbindgen::Config::from_file("cbindgen.toml").unwrap_or_default()
};
match cbindgen::Builder::new()
.with_crate(&crate_dir)
.with_config(cpp_config)
.generate()
{
Ok(bindings) => {
bindings.write_to_file("dtact.hpp");
println!("cargo:warning=Generated dtact.hpp");
}
Err(e) => {
println!(
"cargo:warning=Failed \
to generate C++ \
bindings: {:?}",
e
);
println!("cargo:warning=Continuing build without C++ header generation");
}
}
println!("cargo:rerun-if-changed=src/");
println!("cargo:rerun-if-changed=cbindgen.toml");
println!("cargo:rerun-if-changed=Cargo.toml");
Ok(())
}