use std::env;
#[cfg(feature = "vendored-kcapi")]
use std::fs;
use std::path::PathBuf;
const LIB: &str = "kcapi";
#[cfg(feature = "vendored-kcapi")]
fn build_vendored() {
let wrapper = "wrapper-vendored.h";
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);
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, wrapper_h_path.clone()) {
Ok(_ok) => {}
Err(e) => {
panic!(
"Unable to copy wrapper-vendored.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);
println!("cargo:rerun-if-changed=libkcapi/lib");
let bindings = bindgen::Builder::default()
.header(format!("{}", wrapper_h_path.display()))
.parse_callbacks(Box::new(bindgen::CargoCallbacks::new()))
.size_t_is_usize(false)
.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");
}
#[cfg(feature = "local-kcapi")]
fn build_local() {
let wrapper = "wrapper-local-kcapi.h";
if env::var("LIBKCAPI_DIR").is_ok() {
println!(
"cargo:rustc-link-search=native={}",
env::var("LIBKCAPI_DIR").unwrap()
);
}
println!("cargo:rustc-link-lib={}", LIB);
println!("carg:rerun-if-changed={}", wrapper);
let bindings = bindgen::Builder::default()
.header(format!("{}", wrapper))
.parse_callbacks(Box::new(bindgen::CargoCallbacks::new()))
.size_t_is_usize(false)
.generate()
.unwrap_or_else(|_| panic!("unable to generate bindings for lib{}", LIB));
bindings
.write_to_file(PathBuf::from(env::var("OUT_DIR").unwrap()).join("bindings.rs"))
.expect("Faield to write bindings");
}
fn main() {
#[cfg(feature = "vendored-kcapi")]
build_vendored();
#[cfg(feature = "local-kcapi")]
build_local();
}