extern crate gcc;
use std::path::PathBuf;
use std::fs::{read_dir};
fn main() {
let udt4_src = PathBuf::from("libudt4/udt4/src");
if let Err(_) = std::fs::metadata(&udt4_src) {
panic!("Can't find UDT src dir: {:?}", udt4_src);
}
let mut cpp_files = Vec::new();
for dir in read_dir(&udt4_src).unwrap() {
let path = dir.unwrap().path();
if let Some(ext) = path.extension() {
if ext == "cpp" {
cpp_files.push(path.clone());
}
}
}
let mut cfg = gcc::Config::new();
for file in cpp_files {
cfg.file(file);
}
cfg.include(&udt4_src);
cfg.file("udt_wrap.cpp");
if cfg!(target_os = "macox") {
cfg.define("osx", None);
}
if cfg!(target_os = "unix") {
cfg.define("LINUX", None)
.define("AMD64", None);
}
if cfg!(target_os = "windows") {
cfg.flag("/GS")
.flag("/analyze-")
.flag("/Zc:wchar_t")
.flag("/Zi")
.flag("/Zc:inline")
.flag("/fp:precise")
.define("WIN32", None)
.define("NDEBUG", None)
.define("_CONSOLE", None)
.define("UDT_EXPORTS", None)
.define("_WINDLL", None)
.flag("/errorReport:prompt")
.flag("/Zc:forScope")
.flag("/Gd")
.flag("/O2") .flag("/Ot") .flag("/Ob2") .flag("/Oy") .flag("/nologo") .flag("/W4") .flag("/Gm-") .flag("/EHsc") .flag("/MD"); } else {
cfg.flag("-fPIC")
.opt_level(3)
.flag("-Wextra")
.flag("-Wall")
.flag("-finline-functions")
.flag("-fno-strict-aliasing")
.flag("-fvisibility=hidden");
}
cfg.debug(false)
.cpp(true)
.compile("libudt4wrap.a");
}