use std::env;
use vergen_gitcl::BuildBuilder;
use vergen_gitcl::CargoBuilder;
use vergen_gitcl::Emitter;
use vergen_gitcl::GitclBuilder;
use vergen_gitcl::RustcBuilder;
use vergen_gitcl::SysinfoBuilder;
fn main() -> Result<(), Box<dyn std::error::Error>> {
const ENV_VAR_NAME: &str = "DEV";
println!("cargo:rustc-env=VERGEN_SYSINFO_KERNEL_VERSION=unknown");
let mut emitter = Emitter::default();
emitter.add_instructions(&BuildBuilder::all_build()?)?;
emitter.add_instructions(&CargoBuilder::all_cargo()?)?;
let git = GitclBuilder::default().all().dirty(true).build()?;
emitter.add_instructions(&git)?;
emitter.add_instructions(&RustcBuilder::all_rustc()?)?;
emitter.add_instructions(&SysinfoBuilder::all_sysinfo()?)?;
emitter.emit()?;
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("rssn.h");
println!("cargo:warning=Generated rssn.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("rssn".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("rssn.hpp");
println!("cargo:warning=Generated rssn.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(())
}