use std::env;
use std::path::{Path, PathBuf};
use std::process::Command;
const LIB_NAME: &str = "CoinUtils";
fn main() {
if !Path::new("CoinUtils/AUTHORS").exists() {
update_submodules();
}
build();
}
fn update_submodules() {
let program = "git";
let dir = "../";
let args = ["submodule", "update", "--init"];
println!(
"Running command: \"{} {}\" in dir: {}",
program,
args.join(" "),
dir
);
let ret = Command::new(program).current_dir(dir).args(args).status();
match ret.map(|status| (status.success(), status.code())) {
Ok((true, _)) => (),
Ok((false, Some(c))) => panic!("Command failed with error code {}", c),
Ok((false, None)) => panic!("Command got killed"),
Err(e) => panic!("Command failed with error: {}", e),
}
}
fn build() {
let target = env::var("TARGET").unwrap();
let mut config = cc::Build::new()
.cpp(true)
.warnings(false)
.extra_warnings(false)
.define("NDEBUG", None)
.define("HAVE_STDIO_H", None)
.define("HAVE_STDLIB_H", None)
.define("HAVE_STRING_H", None)
.define("HAVE_INTTYPES_H", None)
.define("HAVE_STDINT_H", None)
.define("HAVE_STRINGS_H", None)
.define("HAVE_SYS_TYPES_H", None)
.define("HAVE_SYS_STAT_H", None)
.define("HAVE_UNISTD_H", None)
.define("HAVE_CMATH", None)
.define("HAVE_CFLOAT", None)
.define("HAVE_DLFCN_H", None)
.define("HAVE_MEMORY_H", None)
.to_owned();
if target.contains("msvc") {
config.flag("-EHsc").flag("-std:c++14");
} else {
config.flag("-std=c++11").flag("-w");
}
let src_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap())
.join(LIB_NAME)
.join(LIB_NAME)
.join("src");
let includes_dir = vec![src_dir.clone()];
config.includes(includes_dir);
let lib_sources = include_str!("CoinUtils_lib_sources.txt")
.trim()
.split('\n')
.map(|file| format!("{}/{}", src_dir.display(), file.trim()))
.collect::<Vec<String>>();
config.files(lib_sources);
config.compile("CoinUtils");
}