wepoll-sys-stjepang 1.0.8

A fork of wepoll-sys with stjepang's patches
use std::env;
use std::io;
use std::path::Path;

const SRC_DIR: &'static str = "wepoll";

fn main() {
    let src_dir = Path::new(&SRC_DIR);

    let out_env_var =
        env::var("OUT_DIR").expect("Failed to obtain the OUT_DIR variable");

    let out_dir = Path::new(&out_env_var);
    let build_dir = out_dir.join("wepoll-build");

    if let Err(err) = std::fs::remove_dir_all(&build_dir) {
        if err.kind() != io::ErrorKind::NotFound {
            panic!("Failed to remove the build directory: {}", err);
        }
    }

    std::fs::create_dir(&build_dir)
        .expect("Failed to create the build directory");

    for file in &["wepoll.c", "wepoll.h"] {
        std::fs::copy(src_dir.join(file), build_dir.join(file))
            .expect(&format!("Failed to copy {} to the build directory", file));
    }

    cc::Build::new()
        .include(&build_dir)
        .out_dir(&build_dir)
        .file(&build_dir.join("wepoll.c"))
        .compile("wepoll");

    println!("cargo:rustc-link-lib=static=wepoll");
    println!("cargo:rustc-link-search={}", &build_dir.display());

    #[cfg(feature = "buildtime-bindgen")]
    {
        build::bindgen(&build_dir, &out_dir);
    }
    #[cfg(not(feature = "buildtime-bindgen"))]
    {
        let out_path = Path::new(&out_dir).join("bindings.rs");
        std::fs::copy("bindgen-bindings/bindings.rs", &out_path)
            .unwrap_or_else(|err| {
                panic!(
                    "Could not copy bindings to output directory {}, {}",
                    out_path.display(),
                    err
                )
            });
    }
}

#[cfg(feature = "buildtime-bindgen")]
mod build {
    use std::path::Path;

    pub fn bindgen(build_dir: &Path, out_dir: &Path) {
        bindgen::Builder::default()
            .header(build_dir.join("wepoll.h").display().to_string())
            .generate()
            .expect("Failed to generate wepoll Rust bindings")
            .write_to_file(out_dir.join("bindings.rs"))
            .expect("Failed to write the Rust bindings");
    }
}