use std::env;
use std::path::PathBuf;
fn main() {
let mut config = cmake::Config::new("ext/CascLib");
config
.define("CASC_BUILD_STATIC_LIB", "ON")
.define("CASC_BUILD_SHARED_LIB", "OFF")
.define("CMAKE_POLICY_VERSION_MINIMUM", "3.5");
if cfg!(target_os = "windows") {
config.define("CMAKE_DISABLE_FIND_PACKAGE_ZLIB", "TRUE");
}
let dst = config.build();
println!("cargo:rustc-link-search=native={}/lib", dst.display());
println!("cargo:rustc-link-lib=static=casc");
if cfg!(target_os = "linux") {
println!("cargo:rustc-link-lib=dylib=stdc++");
println!("cargo:rustc-link-lib=dylib=z");
} else if cfg!(target_os = "macos") {
println!("cargo:rustc-link-lib=dylib=c++");
println!("cargo:rustc-link-lib=dylib=z");
}
let mut builder = bindgen::Builder::default()
.header("ext/CascLib/src/CascLib.h")
.clang_args(&["-x", "c++", "-std=c++11"])
.clang_arg("-Iext/CascLib/src")
.blocklist_item("IPPORT_RESERVED")
.layout_tests(false)
.parse_callbacks(Box::new(bindgen::CargoCallbacks::new()));
let target = env::var("TARGET").unwrap_or_default();
if target.contains("apple-darwin") {
let output = std::process::Command::new("xcrun")
.args(["--show-sdk-path"])
.output();
match output {
Ok(output) if output.status.success() => {
let sdk_path = String::from_utf8_lossy(&output.stdout).trim().to_string();
builder = builder.clang_arg("-isysroot").clang_arg(sdk_path);
}
_ => {}
}
}
let bindings = builder.generate().expect("Unable to generate bindings");
let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
bindings
.write_to_file(out_path.join("bindings.rs"))
.expect("Couldn't write bindings!");
}