cursebox 0.1.0

Low level bindings for the cursebox library
Documentation
use std::env;
use std::path::Path;
use std::process::{Stdio, Command};

fn main() {
    let out_dir = env::var("OUT_DIR").unwrap();
    let dst = Path::new(&out_dir);

    setup();
    configure();
    build();
    install(&dst);
    clean();
    println!("cargo:rustc-flags=-L {} -l static=cursebox", dst.join("lib").display());
}

fn setup() {
    let mut cmd = Command::new("git");
    cmd.arg("clone");
    cmd.arg("https://github.com/strake/cursebox.c");
    cmd.arg(".cursebox");
    let manifest_dir = env::var("CARGO_MANIFEST_DIR").unwrap();
    let cargo_dir = Path::new(&manifest_dir);
    cmd.current_dir(&cargo_dir);
    run(&mut cmd);
}

fn clean() {
    let mut cmd = Command::new("rm");
    cmd.arg("-rf");
    cmd.arg(".cursebox");
    let manifest_dir = env::var("CARGO_MANIFEST_DIR").unwrap();
    let cargo_dir = Path::new(&manifest_dir);
    cmd.current_dir(&cargo_dir);
    run(&mut cmd);
}

fn configure() {
}

fn build() {
    let mut cmd = make_cmd();
    cmd.arg("prefix=/");
    run(&mut cmd);
}

fn install(dst: &Path) {
    let mut cmd = make_cmd();
    cmd.args(&["prefix=/",
               format!("DESTDIR={}", dst.display()).as_str(),
               "install"]);
    run(&mut cmd);
}

fn make_cmd() -> Command {
    let mut cmd = Command::new("make");
    cmd.current_dir(&Path::new(&env::var("CARGO_MANIFEST_DIR").unwrap()).join(".cursebox"));
    cmd
}

fn run(cmd: &mut Command) {
    println!("running: {:?}", cmd);
    assert!(cmd.stdout(Stdio::inherit())
               .stderr(Stdio::inherit())
               .status()
               .unwrap()
               .success());
}