use std::env;
use std::fs;
use std::path::PathBuf;
fn main() {
let manifest_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap());
let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap());
let sqlite_dir = manifest_dir.join("c").join("sqlite");
let sqlite_c = sqlite_dir.join("sqlite3.c");
let sqlite_h = sqlite_dir.join("sqlite3.h");
let vdbe_rust_c = manifest_dir.join("c").join("vdbe_rust.c");
println!("cargo:rerun-if-changed={}", sqlite_c.display());
println!("cargo:rerun-if-changed={}", sqlite_h.display());
println!("cargo:rerun-if-changed={}", vdbe_rust_c.display());
#[cfg(feature = "bundled")]
{
let combined_source = out_dir.join("sqlite3_combined.c");
let sqlite_content = fs::read_to_string(&sqlite_c).expect("Failed to read sqlite3.c");
let vdbe_rust_content =
fs::read_to_string(&vdbe_rust_c).expect("Failed to read vdbe_rust.c");
let combined = format!(
"// Combined SQLite amalgamation with VDBE Rust helpers\n\
// Auto-generated by build.rs\n\n\
{}\n\n\
// ---- vdbe_rust.c ----\n\
#define VDBE_RUST_AMALGAMATION 1\n\
{}\n",
sqlite_content, vdbe_rust_content
);
fs::write(&combined_source, combined).expect("Failed to write combined source");
let mut build = cc::Build::new();
build
.file(&combined_source)
.include(&sqlite_dir)
.define("SQLITE_PRIVATE", Some(""))
.define("SQLITE_ENABLE_COLUMN_METADATA", None)
.define("SQLITE_ENABLE_FTS5", None)
.define("SQLITE_ENABLE_RTREE", None)
.define("SQLITE_ENABLE_JSON1", None)
.define("SQLITE_THREADSAFE", Some("0"))
.define("SQLITE_OMIT_DEPRECATED", None)
.define("SQLITE_DQS", Some("0"))
.warnings(false);
if cfg!(target_os = "linux") {
build.define("_GNU_SOURCE", None);
}
build.compile("sqlite3");
}
}