extern crate bindgen;
use std::path::PathBuf;
#[cfg(target_os = "windows")]
const SOLCLIENT_GZ_PATH: &str = "solclient_Win_vs2015_7.25.0.10.tar.gz";
#[cfg(target_os = "macos")]
const SOLCLIENT_GZ_PATH: &str = "solclient_Darwin-universal2_opt_7.25.0.10.tar.gz";
#[cfg(target_os = "linux")]
const SOLCLIENT_GZ_PATH: &str = "solclient_Linux26-x86_64_opt_7.25.0.10.tar.gz";
fn main() {
let solclient_folder_name = "solclient-7.25.0.10";
let p = format!("../{}", solclient_folder_name);
let solclient_path = std::path::Path::new(&p);
let package_solclient_folder = std::env::current_dir()
.unwrap()
.ancestors()
.nth(3)
.unwrap()
.join(solclient_folder_name);
if !solclient_path.exists() {
std::fs::create_dir(solclient_path).unwrap();
}
if !solclient_path.join("lib").exists() {
std::process::Command::new("tar")
.args([
"-zxvf",
SOLCLIENT_GZ_PATH,
"-C",
"solclient-7.25.0.10",
"--strip-components=1",
])
.output()
.expect("decompress lib error");
}
println!(
"cargo:rustc-link-search=native={}/lib",
solclient_folder_name
);
println!(
"cargo:rustc-link-search=native={}/lib",
package_solclient_folder.to_str().unwrap()
);
let os = std::env::consts::OS;
if os == "macos" {
println!("cargo:rustc-link-lib=dylib=gssapi_krb5");
}
println!("cargo:rustc-link-lib=static=ssl");
println!("cargo:rustc-link-lib=static=crypto");
println!("cargo:rustc-link-lib=static=solclient");
let include_path = package_solclient_folder.join("include");
let include_arg = format!("-I{}", include_path.to_str().unwrap());
let bindings = bindgen::Builder::default()
.header("wrapper.h")
.clang_arg("-v")
.clang_arg("-I../solclient-7.25.0.10/include")
.clang_arg("-Isolclient-7.25.0.10/include")
.clang_arg(&include_arg)
.allowlist_function("^solClient_.*")
.allowlist_var("^SOLCLIENT_.*")
.size_t_is_usize(true)
.generate_comments(false)
.generate()
.expect("Unable to generate bindings");
let out_path = PathBuf::from("src");
bindings
.write_to_file(out_path.join("solace_bindings.rs"))
.expect("Couldn't write bindings!");
}