use std::process::Command;
fn main() {
emit_git_rerun_paths();
let sha =
git_output(&["rev-parse", "--short=12", "HEAD"]).unwrap_or_else(|| "unknown".to_string());
println!("cargo:rustc-env=MUR_GIT_SHA={sha}");
println!("cargo:rerun-if-env-changed=MUR_EMBED_RELEASE_MARKER");
println!("cargo:rerun-if-env-changed=MUR_APPLE_TEAM_ID");
let marker = std::env::var("MUR_EMBED_RELEASE_MARKER").is_ok();
let team_id = std::env::var("MUR_APPLE_TEAM_ID").unwrap_or_default();
if marker && team_id.is_empty() {
panic!("MUR_EMBED_RELEASE_MARKER=1 requires MUR_APPLE_TEAM_ID to be set");
}
println!(
"cargo:rustc-env=MUR_EMBEDDED_RELEASE={}",
if marker { "1" } else { "0" }
);
println!("cargo:rustc-env=MUR_APPLE_TEAM_ID={team_id}");
}
fn emit_git_rerun_paths() {
let Some(git_dir) = git_output(&["rev-parse", "--absolute-git-dir"]) else {
return;
};
let git_dir = std::path::PathBuf::from(git_dir);
let mut tracked = vec![git_dir.join("HEAD")];
let reflog = git_dir.join("logs").join("HEAD");
if reflog.is_file() {
tracked.push(reflog);
} else if let (Some(common), Some(branch_ref)) = (
git_output(&["rev-parse", "--path-format=absolute", "--git-common-dir"]),
git_output(&["symbolic-ref", "-q", "HEAD"]),
) {
let common = std::path::PathBuf::from(common);
tracked.push(common.join(branch_ref));
tracked.push(common.join("packed-refs"));
}
for path in tracked.iter().filter(|p| p.exists()) {
println!("cargo:rerun-if-changed={}", path.display());
}
}
fn git_output(args: &[&str]) -> Option<String> {
Command::new("git")
.args(args)
.output()
.ok()
.filter(|o| o.status.success())
.and_then(|o| String::from_utf8(o.stdout).ok())
.map(|s| s.trim().to_string())
.filter(|s| !s.is_empty())
}