fn main() {
let sha = resolve_git_sha();
println!("cargo:rustc-env=APR_GIT_SHA={sha}");
let git_head = std::path::Path::new("../../.git/HEAD");
if git_head.exists() {
println!("cargo:rerun-if-changed=../../.git/HEAD");
println!("cargo:rerun-if-changed=../../.git/refs/heads/");
}
println!("cargo:rerun-if-env-changed=APR_GIT_SHA_OVERRIDE");
println!("cargo:rerun-if-changed=.git-sha");
}
fn resolve_git_sha() -> String {
if let Ok(s) = std::env::var("APR_GIT_SHA_OVERRIDE") {
let s = s.trim();
if !s.is_empty() {
return s.to_string();
}
}
let output = std::process::Command::new("git")
.args(["rev-parse", "--short", "HEAD"])
.output();
if let Ok(o) = output {
if o.status.success() {
let s = String::from_utf8_lossy(&o.stdout).trim().to_string();
if !s.is_empty() {
return s;
}
}
}
if let Ok(contents) = std::fs::read_to_string(".git-sha") {
let s = contents.trim().to_string();
if !s.is_empty() {
return s;
}
}
let version = std::env::var("CARGO_PKG_VERSION").unwrap_or_else(|_| "0.0.0".to_string());
format!("v{version}+no-git")
}