use std::process::Command;
fn main() {
if std::env::var("CARGO_FEATURE_SYSTEM_SA_CLIENT").is_err() {
let out_dir = std::env::var("OUT_DIR").unwrap();
let manifest_dir = std::env::var("CARGO_MANIFEST_DIR").unwrap();
let cmake_out_dir = [&manifest_dir, "tasecureapi"]
.iter()
.collect::<std::path::PathBuf>();
let rust_out_dir = [&out_dir, "tasecureapi"]
.iter()
.collect::<std::path::PathBuf>();
std::fs::remove_dir_all(&rust_out_dir).ok();
copy_dir::copy_dir(&cmake_out_dir, &rust_out_dir).unwrap();
println!("cargo:rerun-if-changed={}", cmake_out_dir.display());
println!("building from {}", rust_out_dir.display());
std::env::set_current_dir(&rust_out_dir).unwrap();
let status = Command::new("cmake")
.args(["-S", "reference"])
.args(["-B", "reference/cmake-build"])
.args(["-DBUILD_TESTS=FALSE"])
.status()
.expect("Cmake could not be run. Is it installed?");
assert!(status.success(), "Cmake failed to configure tasecureapi");
let status = Command::new("cmake")
.args(["--build", "reference/cmake-build"])
.status()
.expect("Cmake could not be run. Is it installed?");
assert!(status.success(), "Cmake failed to build tasecureapi");
let status = Command::new("cmake")
.args(["--install", "reference/cmake-build"])
.args(["--prefix", "./install"])
.status()
.expect("Cmake could not be run. Is it installed?");
assert!(status.success(), "Cmake failed to install tasecureapi");
let cmake_artifacts_dir = [rust_out_dir.to_str().unwrap(), "install", "lib"]
.iter()
.collect::<std::path::PathBuf>();
println!(
"cargo:rustc-link-search=native={}",
cmake_artifacts_dir.display()
);
}
println!("cargo:rustc-link-lib=dylib=saclient");
println!("cargo:rustc-link-lib=dylib=stdc++");
println!("cargo:rustc-link-lib=dylib=c");
}