emscripten-sys 0.1.0

Emscripten API bindings for Rust
extern crate bindgen;

use std::env;
use std::path::Path;
use std::process::Command;

fn main() {
    let out_dir = env::var("OUT_DIR").expect("failed to get envvar OUT_DIR");

    let emcc_output = Command::new("emcc")
        .arg("--cflags")
        .output()
        .expect("failed to execute process");
    if !emcc_output.status.success() {
        panic!("failed to execute command: {}",
               String::from_utf8_lossy(&emcc_output.stderr));
    }

    let clang_args = String::from_utf8_lossy(&emcc_output.stdout);

    let whitelist = "^_?em_|^_?emscripten_|^_?EM_|^_?EMSCRIPTEN_";

    let mut builder = bindgen::builder()
        .header("etc/emscripten.h")
        .generate_comments(true)
        .whitelisted_type(whitelist)
        .whitelisted_function(whitelist)
        .whitelisted_var(whitelist)
        .no_unstable_rust()
        .use_core();

    for arg in clang_args.split_whitespace() {
        builder = builder.clang_arg(arg);
    }

    builder.generate()
        .expect("failed to generate rust bindings")
        .write_to_file(Path::new(&out_dir).join("emscripten.rs"))
        .expect("failed to write to file")
}