extern crate pkg_config;
use std::env;
use std::path::PathBuf;
use std::process::ExitCode;
fn main() -> ExitCode {
if std::env::var("DOCS_RS").is_ok() {
println!("cargo:warning=building on docs.rs; skipping libnvme detection");
return ExitCode::SUCCESS;
}
match pkg_config::Config::new()
.atleast_version("1.3")
.probe("libnvme")
{
Ok(_) => {
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
}
}
}
Err(e) => {
eprintln!("Could not find libnvme library: {}", e);
ExitCode::FAILURE
}
}
}