use std::fs;
use std::path::Path;
use std::process::Command;
fn main() {
let python_version = if Path::new("python-repo/.git").exists() {
Command::new("git")
.args(["describe", "--tags", "--always"])
.current_dir("python-repo")
.output()
.ok()
.and_then(|output| {
if output.status.success() { String::from_utf8(output.stdout).ok() } else { None }
})
.map_or_else(read_metadata_version, |s| s.trim().to_string())
} else {
read_metadata_version()
};
println!("cargo:rustc-env=PYTHON_SOURCE_VERSION={python_version}");
println!("cargo:rerun-if-changed=python-repo/.git/HEAD");
println!("cargo:rerun-if-changed=Cargo.toml");
}
fn read_metadata_version() -> String {
let cargo_toml = fs::read_to_string("Cargo.toml").unwrap_or_default();
cargo_toml
.lines()
.skip_while(|line| !line.contains("[package.metadata.python_source]"))
.skip(1)
.find(|line| line.trim().starts_with("version"))
.and_then(|line| line.split('=').nth(1))
.map_or_else(|| "unknown".to_string(), |v| v.trim().trim_matches('"').to_string())
}