#![allow(non_upper_case_globals)]
#![allow(non_camel_case_types)]
use std::env;
use std::path::PathBuf;
const libctypes: &[&str] = &[
"in_addr",
"in6_addr",
"sockaddr",
"sockaddr_in",
"sockaddr_in6",
"timespec",
];
const ignoretypes: &[&str] = &[
"in6_addr__bindgen_ty_1",
"sa_family_t",
"in_addr_t",
"in_port_t",
];
fn main() {
println!("cargo:rerun-if-changed=wg/wireguard.h");
let mut bindings = bindgen::Builder::default()
.header("wg/wireguard.h")
.impl_debug(true)
.clang_arg("-fretain-comments-from-system-headers")
.sort_semantically(true)
.generate_comments(true)
.generate_block(true)
.generate_cstr(true)
.enable_function_attribute_detection()
.wrap_unsafe_ops(true)
.use_core()
.array_pointers_in_arguments(true)
.allowlist_function("wg_.*")
.bitfield_enum("wg_peer_flags")
.bitfield_enum("wg_device_flags")
.parse_callbacks(Box::new(bindgen::CargoCallbacks::new()))
.raw_line("extern crate libc;");
for libc_type in libctypes {
bindings = bindings
.blocklist_type(libc_type)
.raw_line(format!("use libc::{};", libc_type));
}
for useless_type in ignoretypes {
bindings = bindings.blocklist_type(useless_type);
}
let bindings = bindings.generate().expect("Couldn't generate bindings");
if std::env::var("DOCS_RS").is_err() {
let out_path = PathBuf::from("./src");
bindings
.write_to_file(out_path.join("bindings.rs"))
.expect(" Could write bindings");
}
let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
bindings
.write_to_file(out_path.join("bindings.rs"))
.expect("Could not write to file");
cc::Build::new()
.file("wg/wireguard.c")
.warnings(true)
.extra_warnings(true)
.warnings_into_errors(true)
.flag_if_supported("-Wno-unused-parameter")
.compile("wireguard.a");
}