use std::env;
use std::path::{Path, PathBuf};
fn main() {
println!("cargo:rerun-if-changed=build.rs");
println!("cargo:rerun-if-changed=lib/");
let manifest_dir = env::var("CARGO_MANIFEST_DIR").unwrap_or_default();
let lib_dir = Path::new(&manifest_dir).join("lib");
let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap_or_default());
let (lib_file, link_name) = if cfg!(target_os = "windows") {
("overdrive.dll", "overdrive")
} else if cfg!(target_os = "macos") {
("liboverdrive.dylib", "overdrive")
} else {
("liboverdrive.so", "overdrive")
};
if lib_dir.exists() && cfg!(feature = "ffi") {
println!("cargo:rustc-link-search=native={}", lib_dir.display());
println!("cargo:rustc-link-lib=dylib={}", link_name);
}
let lib_path = lib_dir.join(lib_file);
if lib_path.exists() {
let mut target_dir = out_dir.clone();
for _ in 0..3 {
target_dir = match target_dir.parent() {
Some(p) => p.to_path_buf(),
None => break,
};
}
let dest = target_dir.join(lib_file);
if !dest.exists() {
if let Err(e) = std::fs::copy(&lib_path, &dest) {
eprintln!(
"cargo:warning=Could not copy {} to {}: {}",
lib_path.display(),
dest.display(),
e
);
} else {
eprintln!(
"cargo:warning=Copied {} to {}",
lib_file,
dest.display()
);
}
}
} else {
eprintln!(
"cargo:warning=OverDrive native library not found at {}",
lib_path.display()
);
eprintln!(
"cargo:warning=Download {} from: https://github.com/ALL-FOR-ONE-TECH/OverDrive-DB_IncodeSDK/releases/latest",
lib_file
);
eprintln!(
"cargo:warning=Place it in the lib/ directory next to Cargo.toml"
);
}
}