freenect2-rs 0.1.0

Safe Rust bindings for libfreenect2 (Kinect v2)
use std::env;
use std::path::PathBuf;

fn main() {
    let manifest_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap());

    let lib = pkg_config::Config::new()
        .atleast_version("0.2")
        .probe("freenect2")
        .expect("freenect2 not found via pkg-config; is it installed to /usr/local?");

    let mut build = cc::Build::new();
    build.cpp(true)
        .flag_if_supported("-std=c++11")
        .file(manifest_dir.join("csrc/freenect2_shim.cpp"))
        .include(manifest_dir.join("vendor/include"))
        .include(manifest_dir.join("csrc"));
    for path in &lib.include_paths {
        build.include(path);
    }
    build.compile("freenect2_shim");

    let out_path = PathBuf::from(env::var("OUT_DIR").unwrap()).join("bindings.rs");
    bindgen::Builder::default()
        .header(manifest_dir.join("csrc/freenect2_shim.h").to_str().unwrap())
        .clang_arg(format!("-I{}", manifest_dir.join("vendor/include").display()))
        .clang_arg(format!("-I{}", manifest_dir.join("csrc").display()))
        .parse_callbacks(Box::new(bindgen::CargoCallbacks::new()))
        .generate()
        .expect("Unable to generate bindings")
        .write_to_file(out_path)
        .expect("Couldn't write bindings");
}