use std::env;
use std::fs;
use std::path::PathBuf;
const LIB: &str = "kcapi";
fn main() {
let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
let include_path = out_path.join("include");
let wrapper_h_path = include_path.join("wrapper.h");
let build_path = out_path.join("libkcapi");
let mut opts = fs_extra::dir::CopyOptions::new();
opts.copy_inside = true;
opts.overwrite = true;
match fs_extra::dir::copy("libkcapi", out_path.clone(), &opts) {
Ok(_ret) => {}
Err(e) => panic!("Failed to copy libkcapi to {}: {}", build_path.display(), e),
};
let dst = autotools::Config::new(build_path)
.reconf("-ivf")
.enable("lib-asym", None)
.enable("lib-kpp", None)
.disable("dependency-tracking", None)
.cflag("-O")
.build();
match fs::copy("wrapper.h", wrapper_h_path.clone()) {
Ok(_ok) => {}
Err(e) => {
panic!(
"Unable to copy wrapper.h to {}: {}",
wrapper_h_path.display(),
e
);
}
}
println!("cargo:rustc-link-search=native={}/lib", dst.display());
println!("cargo:rustc-link-lib={}", LIB);
println!("cargo:rerun-if-changed=wrapper.h");
let bindings = bindgen::Builder::default()
.header(format!("{}", wrapper_h_path.display()))
.parse_callbacks(Box::new(bindgen::CargoCallbacks))
.generate()
.unwrap_or_else(|_| panic!("unable to generate bindings for lib{}", LIB));
bindings
.write_to_file(out_path.join("bindings.rs"))
.expect("Failed to write libkcapi bindings");
}