use std::{env, path::PathBuf};
use pyconfig::search_pythons;
static PYTHON_VERSION: &str = "3.13.15";
fn main() {
let pythons = search_pythons()
.expect("Not found any pythons! Please install python 3.13.15!");
let python = pythons
.iter()
.find(|python| python.version == PYTHON_VERSION)
.expect("Not found python with version 3.13.15!");
let bindings = bindgen::Builder::default()
.header("cpp/bindings.h")
.clang_arg(format!("-I{}", python.include_path.display()))
.allowlist_function("^Py.*")
.allowlist_type("^Py.*")
.allowlist_var("^Py.*")
.clang_arg("-std=c11")
.parse_callbacks(Box::new(
bindgen::CargoCallbacks::new()
))
.generate()
.expect("Error while generate bindings.");
let out = PathBuf::from(
env::var("OUT_DIR").unwrap()
);
bindings
.write_to_file(out.join("bindings.rs"))
.unwrap();
println!("cargo:rustc-link-search=native={}", python.libs_path.display());
println!("cargo:rustc-link-lib=python313");
println!("cargo:rerun-if-changed=cpp/bindings.h");
println!("cargo:rerun-if-changed=src/lib.rs");
println!("cargo:rerun-if-changed=build.rs");
}