use std::env;
use std::path::PathBuf;
fn main() {
let enable_bjca = env::var_os("CARGO_FEATURE_BJCA").is_some();
if !enable_bjca {
return;
}
let header = "src/bjca/BJCA_SVS_API.h";
println!("cargo:rerun-if-changed={header}");
println!("cargo:rerun-if-env-changed=BJCA_LIB_DIR");
println!("cargo:rerun-if-env-changed=BJCA_LIB_NAME");
if let Some(lib_dir) = env::var_os("BJCA_LIB_DIR") {
println!(
"cargo:rustc-link-search=native={}",
PathBuf::from(lib_dir).display()
);
}
let lib_name = env::var("BJCA_LIB_NAME").unwrap_or_else(|_| "svscc".to_string());
println!("cargo:rustc-link-lib=dylib={lib_name}");
let bindings = bindgen::Builder::default()
.header(header)
.allowlist_function("BJCA_SVS_Init_Default")
.allowlist_function("BJCA_SVS_Final")
.allowlist_function("BJCA_SVS_SignData")
.allowlist_function("BJCA_SVS_GetServerCertificate")
.allowlist_function("BJCA_SVS_Base64Decode")
.allowlist_type("BJCA_HANDLE")
.allowlist_type("BJCA_ULONG")
.allowlist_type("BJCA_UCHAR")
.allowlist_type("BJCA_CHAR")
.allowlist_type("BJCA_INT32")
.parse_callbacks(Box::new(bindgen::CargoCallbacks::new()))
.generate()
.expect("failed to generate BJCA bindings");
let out = PathBuf::from(env::var("OUT_DIR").expect("OUT_DIR missing")).join("bjca_bindings.rs");
bindings
.write_to_file(out)
.expect("failed to write BJCA bindings");
}