wgctrl-sys 0.1.0

Raw bindings to the WireGuard embeddable C library
Documentation
extern crate bindgen;
extern crate cc;

use std::env;
use std::path::PathBuf;

const LIBC_TYPES: &[&'static str] = &[
    "sockaddr",
    "sockaddr_in",
    "sockaddr_in6",
    "in_addr",
    "in6_addr",
    "timespec",
];

const USELESS_TYPES: &[&'static str] = &["in_addr_t", "in_port_t", "in6_addr__bindgen_ty_1"];

fn build_bindings() {
    let mut bindings = bindgen::Builder::default()
        .header("c/wireguard.h")
        .impl_debug(true)
        .whitelist_function("wg_.*")
        .bitfield_enum("wg_peer_flags")
        .bitfield_enum("wg_device_flags")
        .raw_line("extern crate libc;");

    for ty in LIBC_TYPES {
        bindings = bindings
            .blacklist_type(ty)
            .raw_line(format!("use libc::{};", ty));
    }

    for ty in USELESS_TYPES {
        bindings = bindings.blacklist_type(ty);
    }

    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!");
}

fn build_library() {
    cc::Build::new().file("c/wireguard.c").compile("wireguard");
}

fn main() {
    build_bindings();
    build_library();
}