use std::env;
use std::path::PathBuf;
use std::process::Command;
fn main() {
let target_triple = env::var("TARGET").unwrap();
let out_dir = env::var("OUT_DIR").unwrap();
let out_path = PathBuf::from(&out_dir);
if std::env::var("DOCS_RS").is_ok() {
std::fs::write(out_path.join("bindings.rs"), "").unwrap();
return;
}
println!("cargo:rerun-if-changed=go.mod");
println!("cargo:rerun-if-changed=go.sum");
Command::new("go")
.args(["build", "--buildmode=c-archive", "-o"])
.arg(&format!("{}/librclone.a", out_dir))
.arg("github.com/rclone/rclone/librclone")
.status()
.expect("`go build` failed. Is `go` installed and latest version?");
println!("cargo:rustc-link-search=native={}", out_dir);
println!("cargo:rustc-link-lib=static=rclone");
if target_triple.ends_with("darwin") {
println!("cargo:rustc-link-lib=framework=CoreFoundation");
println!("cargo:rustc-link-lib=framework=IOKit");
println!("cargo:rustc-link-lib=framework=Security");
println!("cargo:rustc-link-lib=resolv");
}
let bindings = bindgen::Builder::default()
.header(format!("{}/librclone.h", out_dir))
.allowlist_function("RcloneRPC")
.allowlist_function("RcloneInitialize")
.allowlist_function("RcloneFinalize")
.allowlist_function("RcloneFreeString")
.parse_callbacks(Box::new(bindgen::CargoCallbacks::new()))
.generate()
.expect("Unable to generate bindings");
bindings
.write_to_file(out_path.join("bindings.rs"))
.expect("Couldn't write bindings!");
}