use std::env;
use std::path::PathBuf;
use cc;
const LIBC_TYPES: &[&str] = &[
"in_addr",
"in6_addr",
"sockaddr",
"sockaddr_in",
"sockaddr_in6",
"timespec",
];
const USELESS_TYPES: &[&str] = &["in6_addr__bindgen_ty_1"];
fn main() {
let mut bindings = bindgen::Builder::default()
.header("c/wireguard.h")
.impl_debug(true)
.allowlist_function("wg_.*")
.bitfield_enum("wg_peer_flags")
.bitfield_enum("wg_device_flags")
.parse_callbacks(Box::new(bindgen::CargoCallbacks))
.raw_line("extern crate libc;");
for libc_type in LIBC_TYPES {
bindings = bindings
.blocklist_type(libc_type)
.raw_line(format!("use libc::{};", libc_type));
}
for useless_type in USELESS_TYPES {
bindings = bindings.blocklist_type(useless_type);
}
let bindings = bindings.generate().expect("Unable to generate bindings");
let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
bindings
.write_to_file(out_path.join("bindings.rs"))
.expect("Couldn't write bindings!");
cc::Build::new()
.file("c/wireguard.c")
.warnings(true)
.extra_warnings(true)
.warnings_into_errors(true)
.flag_if_supported("-Wno-unused-parameter")
.compile("wireguard");
}