use std::env; use std::path::PathBuf; fn main() { let lzc = pkg_config::Config::new() .atleast_version("0.8") .cargo_metadata(false) .probe("libzfs_core") .expect("ZFS development environment is not installed"); let cflags = lzc .include_paths .iter() .map(|path| format!("-I{}", path.display())); let default_enum_style = bindgen::EnumVariation::Rust { non_exhaustive: true, }; println!("cargo:rustc-link-lib=nvpair"); println!("cargo:rerun-if-changed=nvpair.h"); let bindings = bindgen::Builder::default() .header("nvpair.h") .clang_args(cflags) .size_t_is_usize(true) .ctypes_prefix("libc") .allowlist_var(r"(^NV_\w*)") .allowlist_type(r"(\w*nvpair\w*)") .allowlist_type(r"(\w*nvlist\w*)") .allowlist_function(r"(\w*nvpair\w*)") .allowlist_function(r"(\w*nvlist\w*)") .rustified_enum("boolean_t") .default_enum_style(default_enum_style) .blocklist_function(r"nvpair_value_match\w*") .blocklist_function(r"nvlist_print\w*") .blocklist_function("dump_nvlist") .blocklist_item(r"nvlist_prt\w*") .blocklist_type("regex_t") .blocklist_type("reg_syntax_t") .blocklist_type("re_pattern_buffer") .blocklist_type("FILE") .blocklist_item(r"_IO_\w*") .generate() .expect("Unable to generate bindings"); let nvpair = env::var("OUT_DIR") .map(PathBuf::from) .expect("OUT_DIR environment") .join("nvpair.rs"); bindings .write_to_file(nvpair) .expect("Couldn't write bindings!"); }