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());
}