extern crate bindgen;
extern crate hyper;
use std::env;
use std::fs::File;
use std::io;
use std::io::prelude::*;
use std::path::Path;
use hyper::Client;
use hyper::header::Connection;
fn generate_emacs_bindings(out_dir: &str) -> io::Result<()> {
let origin_path = Path::new(&out_dir).join("emacs-module.h");
let client = Client::new();
let mut response = client.get("https://github.com/emacs-mirror/emacs/raw/master/src/emacs-module.h").
header(Connection::close()).send().unwrap();
let mut content = String::new();
response.read_to_string(&mut content).unwrap();
content = content.replace("intmax_t","int");
let mut f = File::create(&origin_path).expect("Unable to create emacs-module.h file");
f.write_all(content.as_bytes()).unwrap();
let mut bindings = bindgen::Builder::new(origin_path.to_string_lossy().into_owned());
let generated_bindings = bindings.builtins()
.forbid_unknown_types()
.generate()
.expect("Failed to generate bindings");
let dest_path = Path::new(out_dir).join("emacs.rs");
let mut file = try!(File::create(dest_path));
try!(file.write(b"pub mod emacs {\n"));
try!(file.write(generated_bindings.to_string().as_bytes()));
try!(file.write(b"\n}"));
Ok(())
}
fn main() {
let out_dir = env::var("OUT_DIR").unwrap();
generate_emacs_bindings(&out_dir).unwrap();
}