use std::env;
use std::path::{Path, PathBuf};
use std::process::Command;
fn make(path: &str) {
let out_dir = env::var("OUT_DIR").unwrap();
let status = Command::new("gcc")
.args(["src/wrapper.c", "-c", "-fPIC", &format!("-I{path}"), "-o"])
.arg(format!("{out_dir}/wrapper.o"))
.status()
.unwrap();
if !status.success() {
panic!(
"make wrapper returns {:?}, maybe LO_INCLUDE_PATH is empty",
status.code().unwrap()
);
}
Command::new("ar")
.args(["crus", "libwrapper.a", "wrapper.o"])
.current_dir(Path::new(&out_dir))
.status()
.unwrap();
println!("cargo:rustc-link-search=native={out_dir}");
}
#[cfg(not(feature = "unstable"))]
fn generate_binding(path: &str) {
let bindings = bindgen::Builder::default()
.header("src/wrapper.h")
.layout_tests(false)
.clang_arg(format!("-I{path}"))
.generate()
.expect("Unable to generate bindings");
let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
bindings
.write_to_file(out_path.join("bindings.rs"))
.expect("Couldn't write bindings!");
}
#[cfg(feature = "unstable")]
fn generate_binding(path: &str) {
let bindings = bindgen::Builder::default()
.header("src/wrapper.h")
.layout_tests(false)
.clang_arg("-D LOK_USE_UNSTABLE_API")
.clang_arg(format!("-I{}", path))
.generate()
.expect("Unable to generate bindings");
let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
bindings
.write_to_file(out_path.join("bindings.rs"))
.expect("Couldn't write bindings!");
}
fn main() {
let lo_include_path =
std::env::var("LO_INCLUDE_PATH").unwrap_or_else(|_| "/usr/include/LibreOfficeKit".into());
make(&lo_include_path);
generate_binding(&lo_include_path);
println!("cargo:rustc-link-lib=static=wrapper");
}