use std::path::PathBuf;
fn main() {
let dir = match std::env::var_os("PBWIRE_LIB_DIR") {
Some(dir) => PathBuf::from(dir),
None => find_build_dir(),
};
let archive = dir.join("libpbwire.a");
let out = PathBuf::from(std::env::var_os("OUT_DIR").expect("OUT_DIR"));
std::fs::copy(&archive, out.join("libpbwire.a")).unwrap_or_else(|e| {
panic!("copy {}: {e} (run `make` in the repo root)", archive.display())
});
println!("cargo:rustc-link-search=native={}", out.display());
println!("cargo:rustc-link-lib=static=pbwire");
println!("cargo:rerun-if-env-changed=PBWIRE_LIB_DIR");
println!("cargo:rerun-if-changed={}", archive.display());
println!("cargo:rerun-if-changed=build.rs");
}
fn find_build_dir() -> PathBuf {
let mut dir = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
loop {
if dir.join("include/pbwire.h").is_file() {
return dir.join("build");
}
if !dir.pop() {
panic!(
"no pbwire checkout above {}; set PBWIRE_LIB_DIR",
env!("CARGO_MANIFEST_DIR")
);
}
}
}