extern crate bindgen;
use bindgen::Builder;
use std::env;
use std::path::PathBuf;
fn main() {
bind_rpmlib();
if feature_enabled("rpmbuild") {
bind_rpmbuild();
}
if feature_enabled("rpmsign") {
bind_rpmsign();
}
}
fn bind_rpmlib() {
println!("cargo:rustc-link-lib=rpm");
println!("cargo:rustc-link-lib=rpmio");
generate_binding(
"rpmlib_binding.rs",
Builder::default()
.header("include/rpmlib.hpp")
.blacklist_type("timex"),
)
}
fn bind_rpmbuild() {
println!("cargo:rustc-link-lib=rpmbuild");
generate_binding(
"rpmbuild_binding.rs",
Builder::default()
.header("include/rpmbuild.hpp")
.blacklist_type("timex"),
)
}
fn bind_rpmsign() {
println!("cargo:rustc-link-lib=rpmsign");
generate_binding(
"rpmsign_binding.rs",
Builder::default().header("include/rpmsign.hpp"),
)
}
fn feature_enabled(feature_name: &str) -> bool {
let env_var = format!("CARGO_FEATURE_{}", feature_name.to_uppercase());
if let Ok(ref enabled) = env::var(env_var) {
if enabled == "1" {
return true;
}
}
false
}
fn generate_binding(filename: &str, binding: Builder) {
let output_path = PathBuf::from(env::var("OUT_DIR").unwrap()).join(filename);
binding
.generate()
.unwrap()
.write_to_file(output_path)
.unwrap();
}