use std::env;
use std::path::Path;
fn main() {
if let Err(e) = setup_duckdb_binary() {
eprintln!("Warning: Failed to setup frozen DuckDB binary: {}", e);
eprintln!("Falling back to bundled DuckDB compilation");
eprintln!("To use frozen binary: source prebuilt/setup_env.sh");
}
}
fn setup_duckdb_binary() -> Result<(), Box<dyn std::error::Error>> {
if env::var("DUCKDB_LIB_DIR").is_ok() && env::var("DUCKDB_INCLUDE_DIR").is_ok() {
let lib_dir = env::var("DUCKDB_LIB_DIR")?;
let include_dir = env::var("DUCKDB_INCLUDE_DIR")?;
println!("cargo:rustc-env=DUCKDB_LIB_DIR={}", lib_dir);
println!("cargo:rustc-env=DUCKDB_INCLUDE_DIR={}", include_dir);
println!("cargo:rustc-link-search=native={}", lib_dir);
println!("cargo:rustc-link-lib=dylib=duckdb");
println!("cargo:include={}", include_dir);
println!("cargo:DUCKDB_LIB_DIR={}", lib_dir);
println!("cargo:DUCKDB_INCLUDE_DIR={}", include_dir);
println!("cargo:rerun-if-env-changed=DUCKDB_LIB_DIR");
println!("cargo:rerun-if-env-changed=DUCKDB_INCLUDE_DIR");
println!("cargo:warning=Using frozen DuckDB binary - 99% faster builds!");
return Ok(());
}
let prebuilt_dir = Path::new("prebuilt");
if prebuilt_dir.exists() {
let lib_dir = prebuilt_dir;
let include_dir = prebuilt_dir;
println!("cargo:rustc-env=DUCKDB_LIB_DIR={}", lib_dir.display());
println!("cargo:rustc-env=DUCKDB_INCLUDE_DIR={}", include_dir.display());
println!("cargo:rustc-link-search=native={}", lib_dir.display());
println!("cargo:rustc-link-lib=dylib=duckdb");
println!("cargo:include={}", include_dir.display());
println!("cargo:DUCKDB_LIB_DIR={}", lib_dir.display());
println!("cargo:DUCKDB_INCLUDE_DIR={}", include_dir.display());
println!("cargo:rerun-if-env-changed=DUCKDB_LIB_DIR");
println!("cargo:rerun-if-env-changed=DUCKDB_INCLUDE_DIR");
println!("cargo:warning=Using frozen DuckDB binary - 99% faster builds!");
return Ok(());
}
println!("cargo:warning=No frozen DuckDB binary found, using bundled compilation");
Ok(())
}