#[derive(Debug)]
struct IgnoreMacros(std::collections::HashSet<&'static str>);
impl bindgen::callbacks::ParseCallbacks for IgnoreMacros {
fn will_parse_macro(&self, name: &str) -> bindgen::callbacks::MacroParsingBehavior {
if self.0.contains(name) {
bindgen::callbacks::MacroParsingBehavior::Ignore
} else {
bindgen::callbacks::MacroParsingBehavior::Default
}
}
}
#[cfg(feature = "docs-rs")]
fn main() {}
#[cfg(not(feature = "docs-rs"))]
fn main() {
let pkg = pkg_config::probe_library("vips").expect("Could not find libvips");
let out_path = std::path::PathBuf::from(std::env::var("OUT_DIR").unwrap()).join("bindings.rs");
let ignored_macros = IgnoreMacros(
vec!["FP_INFINITE", "FP_NAN", "FP_NORMAL", "FP_SUBNORMAL", "FP_ZERO"].into_iter().collect(),
);
let mut builder = bindgen::Builder::default();
for path in pkg.include_paths.iter().filter_map(|p| p.to_str()) {
builder = builder.clang_arg("-I");
builder = builder.clang_arg(path);
}
let bindings = builder
.derive_debug(true)
.impl_debug(true)
.default_enum_style(bindgen::EnumVariation::Rust { non_exhaustive: false })
.header_contents("wrapper.h", "#include \"vips/vips.h\"")
.parse_callbacks(Box::new(ignored_macros))
.rustfmt_bindings(true)
.generate()
.unwrap();
bindings.write_to_file(out_path).unwrap();
}