use std::path::Path;
use std::process::Command;
fn git(args: &[&str]) -> Option<String> {
Command::new("git")
.args(args)
.output()
.ok()
.filter(|o| o.status.success())
.map(|o| String::from_utf8_lossy(&o.stdout).trim().to_string())
.filter(|s| !s.is_empty())
}
fn watch_if_exists(path: &str) {
if !path.is_empty() && Path::new(path).exists() {
println!("cargo:rerun-if-changed={path}");
}
}
fn main() {
let sha = std::env::var("FILAMENT_BUILD_SHA")
.ok()
.or_else(|| git(&["rev-parse", "--short", "HEAD"]));
let date = std::env::var("FILAMENT_BUILD_DATE").ok().or_else(|| {
Command::new("date")
.args(["-u", "+%Y-%m-%d"])
.output()
.ok()
.filter(|o| o.status.success())
.map(|o| String::from_utf8_lossy(&o.stdout).trim().to_string())
});
println!(
"cargo:rustc-env=FILAMENT_BUILD_INFO={} ({} {})",
env!("CARGO_PKG_VERSION"),
sha.unwrap_or_else(|| "dev".into()),
date.unwrap_or_else(|| "unstamped".into()),
);
if let Some(head) = git(&["rev-parse", "--git-path", "HEAD"]) {
watch_if_exists(&head);
}
if let Some(symref) = git(&["symbolic-ref", "-q", "HEAD"]) {
if let Some(ref_path) = git(&["rev-parse", "--git-path", &symref]) {
watch_if_exists(&ref_path);
}
}
if let Some(packed) = git(&["rev-parse", "--git-path", "packed-refs"]) {
watch_if_exists(&packed);
}
println!("cargo:rerun-if-env-changed=FILAMENT_BUILD_SHA");
println!("cargo:rerun-if-env-changed=FILAMENT_BUILD_DATE");
println!("cargo:rustc-check-cfg=cfg(l3)");
let os = std::env::var("CARGO_CFG_TARGET_OS").unwrap_or_default();
if matches!(os.as_str(), "linux" | "macos" | "windows") {
println!("cargo:rustc-cfg=l3");
}
}