extern crate pkg_config;
use std::env;
use std::fs;
use std::path::PathBuf;
use std::process::ExitCode;
fn main() -> ExitCode {
match env::var("OUT_DIR") {
Ok(out) => {
if env::var("DOCS_RS").is_ok() {
println!("cargo:warning=building on docs.rs; skipping libnvme detection");
let out_dir = PathBuf::from(out);
if let Err(e) =
fs::write(out_dir.join("bindings.rs"), "// docs.rs dummy bindings\n")
{
eprintln!("{}", e);
return ExitCode::FAILURE;
}
return ExitCode::SUCCESS;
}
}
Err(e) => {
eprintln!("{}", e);
return ExitCode::FAILURE;
}
}
let bindings = match bindgen::Builder::default()
.header("wrapper.h")
.default_enum_style(bindgen::EnumVariation::Rust {
non_exhaustive: false,
})
.generate_comments(true)
.derive_copy(true)
.derive_hash(true)
.derive_debug(true)
.derive_default(true)
.derive_partialeq(true)
.generate()
{
Ok(bindings) => bindings,
Err(e) => {
eprintln!("Failed to generate bindings: {}", e);
return ExitCode::FAILURE;
}
};
let out = match env::var("OUT_DIR") {
Ok(out) => PathBuf::from(out),
Err(e) => {
eprintln!("{}", e);
return ExitCode::FAILURE;
}
};
match bindings.write_to_file(out.join("bindings.rs")) {
Ok(_) => ExitCode::SUCCESS,
Err(e) => {
eprintln!("Failed to write bindings.rs: {}", e);
ExitCode::FAILURE
}
}
}