use std::process::Command;
fn main() {
let target = std::env::var("TARGET").unwrap_or_else(|_| "unknown".to_string());
let pkg_version = env!("CARGO_PKG_VERSION");
let commit = Command::new("git")
.args(["rev-parse", "--short", "HEAD"])
.output()
.ok()
.and_then(|o| if o.status.success() { String::from_utf8(o.stdout).ok() } else { None })
.map(|s| s.trim().to_string())
.unwrap_or_else(|| "release".to_string());
let is_dirty = Command::new("git")
.args(["status", "--porcelain"])
.output()
.ok()
.and_then(|o| if o.status.success() { Some(!o.stdout.is_empty()) } else { None })
.unwrap_or(false);
let commit_str = if is_dirty && commit != "release" {
format!("{}-dirty", commit)
} else {
commit.clone()
};
let commit_count: u64 = Command::new("git")
.args(["rev-list", "--count", "HEAD"])
.output()
.ok()
.and_then(|o| if o.status.success() { String::from_utf8(o.stdout).ok() } else { None })
.and_then(|s| s.trim().parse::<u64>().ok())
.unwrap_or(1);
let out_dir = std::env::var("OUT_DIR").unwrap_or_else(|_| ".".to_string());
let counter_file = std::path::Path::new(&out_dir).join(".build_counter");
let previous_count = std::fs::read_to_string(&counter_file)
.or_else(|_| std::fs::read_to_string(".build_counter"))
.ok()
.and_then(|s| s.trim().parse::<u64>().ok())
.unwrap_or(0);
let build_number = std::cmp::max(commit_count, previous_count + 1);
let _ = std::fs::write(&counter_file, build_number.to_string());
let timestamp = chrono::Utc::now().format("%Y-%m-%d %H:%M:%S UTC").to_string();
let semver_full = format!("{}+build.{}.git.{}", pkg_version, build_number, commit);
println!("cargo:rustc-env=BRUM_BUILD_NUMBER={}", build_number);
println!("cargo:rustc-env=BRUM_BUILD_COMMIT={}", commit_str);
println!("cargo:rustc-env=BRUM_BUILD_TIMESTAMP={}", timestamp);
println!("cargo:rustc-env=BRUM_BUILD_TARGET={}", target);
println!("cargo:rustc-env=BRUM_SEMVER_FULL={}", semver_full);
println!("cargo:rerun-if-changed=.git/HEAD");
println!("cargo:rerun-if-changed=.git/index");
#[cfg(windows)]
{
let is_desktop = std::env::var("CARGO_FEATURE_DESKTOP_APP").is_ok()
|| std::env::var("TAURI_ENV_TARGET_TRIPLE").is_ok()
|| std::env::var("TAURI_ENV_ARCH").is_ok()
|| std::env::var("TAURI_FAMILY").is_ok();
if !is_desktop {
let mut res = winres::WindowsResource::new();
res.set_icon("assets/brum.ico");
res.set("ProductName", "Brum");
res.set("FileDescription", "Multi-Pane Web Environment (File Commander/Manager) - By Woofson");
res.set("LegalCopyright", "Copyright (c) 2026 Bolt J Woofson");
res.set("FileVersion", &format!("{}.{}", pkg_version, build_number));
res.set("ProductVersion", &semver_full);
let _ = res.compile();
}
}
}