tasign 0.2.0

TA ELF signing utilities with CMS/PKCS#7 support
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");
}