#[path = "build/icons.rs"]
mod icons;
fn main() -> Result<(), Box<dyn std::error::Error>> {
use chrono::Utc;
use std::{env, fs, io::Write, path::Path};
println!("cargo:rerun-if-changed=build/build-info.txt");
println!("cargo:rerun-if-env-changed=BLP_BUILD_ID");
println!("cargo:rerun-if-env-changed=CARGO_PKG_VERSION");
println!("cargo:rerun-if-env-changed=CARGO_PKG_DESCRIPTION");
println!("cargo:rerun-if-env-changed=CARGO_BIN_NAME");
println!("cargo:rerun-if-env-changed=CARGO_PKG_AUTHORS");
let icons_report = icons::run_icons()?;
let build_id = env::var("BLP_BUILD_ID").unwrap_or_default();
if build_id.is_empty() {
return Ok(()); }
let log_path = Path::new("build/build-info.txt");
if let Some(dir) = log_path.parent() {
fs::create_dir_all(dir)?;
}
let mut out = fs::OpenOptions::new()
.create(true)
.append(true)
.open(log_path)?;
let pkg_name = env::var("CARGO_PKG_NAME").unwrap_or_default();
let pkg_version = env::var("CARGO_PKG_VERSION").unwrap_or_default();
let target_os = env::var("CARGO_CFG_TARGET_OS").unwrap_or_default();
let features: Vec<String> = env::vars()
.filter(|(k, _)| k.starts_with("CARGO_FEATURE_"))
.map(|(k, _)| {
k.trim_start_matches("CARGO_FEATURE_")
.to_lowercase()
})
.collect();
writeln!(out)?;
writeln!(out)?;
writeln!(out, "===== 🛠️ Build @ {} =====", Utc::now())?;
writeln!(out, "🆔 Build ID : {}", build_id)?;
writeln!(out, "📦 Package : {} v{}", pkg_name, pkg_version)?;
writeln!(out, "🧭 Target OS: {}", target_os)?;
writeln!(out, "🧩 Features : {:?}", features)?;
writeln!(out, "----- 🖼️ Icons -----")?;
match icons_report {
Some(report) => {
writeln!(out, "{report}")?;
}
None => {
writeln!(out, "⏭️ Icons: skipped (feature `ui` is disabled)")?;
}
}
Ok(())
}