use std::{env, path::PathBuf, process::Command};
const BINDINGS_FILE: &str = "bindings.rs";
const WRAPPER_FILE: &str = "wrapper.h";
fn main()
{
println!("cargo:rerun-if-changed=wrapper.h");
let source = PathBuf::from(&env::var("CARGO_MANIFEST_DIR").unwrap());
let output = PathBuf::from(&env::var("OUT_DIR").unwrap());
let name = "ucl";
let include = output.join("include").display().to_string();
let library = output.join("lib").display().to_string();
println!("cargo:rustc-env=CFLAGS=-Wno-implicit-function-declaration");
Command::new(source.join("ucl-1.03/configure"))
.current_dir(&output)
.arg("--disable-debug")
.arg("--disable-dependency-tracking")
.arg(&format!("--prefix={}", output.display().to_string()))
.output()
.unwrap();
Command::new("make")
.current_dir(&output)
.arg("install")
.output()
.unwrap();
let mut builder = bindgen::Builder::default()
.clang_arg(format!("-I{}", include))
.header(WRAPPER_FILE)
.parse_callbacks(Box::new(bindgen::CargoCallbacks));
if cfg!(target_os = "windows") {
builder = builder.generate_comments(false);
}
builder
.generate()
.unwrap()
.write_to_file(output.join(BINDINGS_FILE))
.unwrap();
println!("cargo:rustc-link-lib=static={}", name);
println!("cargo:rustc-link-search=native={}", library);
println!("cargo:include={}", include);
}