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>,
> {
let mut emitter =
Emitter::default();
emitter.add_instructions(
&BuildBuilder::all_build()?,
)?;
emitter.add_instructions(
&CargoBuilder::all_cargo()?,
)?;
emitter.add_instructions(
&GitclBuilder::all_git()?,
)?;
emitter.add_instructions(
&RustcBuilder::all_rustc()?,
)?;
emitter.add_instructions(
&SysinfoBuilder::all_sysinfo()?,
)?;
emitter.emit()?;
generate_headers()?;
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");
Ok(())
}