#![allow(unused_assignments)]
use std::{
env,
process::Command,
time::{SystemTime, UNIX_EPOCH},
};
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("cargo:rerun-if-changed=Cargo.toml");
println!("cargo:rerun-if-changed=build.rs");
println!(
"cargo:rustc-env=APHRODITE_VERSION={}",
env::var("CARGO_PKG_VERSION").unwrap_or_default()
);
if let Ok(output) = Command::new("git").args(["rev-parse", "--short", "HEAD"]).output() {
if output.status.success() {
let hash = String::from_utf8_lossy(&output.stdout).trim().to_string();
if !hash.is_empty() {
println!("cargo:rustc-env=APHRODITE_GIT_HASH={}", hash);
}
}
}
let epoch_secs = env::var("SOURCE_DATE_EPOCH")
.ok()
.and_then(|s| s.parse::<u64>().ok())
.or_else(|| SystemTime::now().duration_since(UNIX_EPOCH).ok().map(|d| d.as_secs()));
if let Some(secs) = epoch_secs {
println!("cargo:rustc-env=APHRODITE_BUILD_DATE={}", format_iso8601(secs));
}
println!("cargo:rustc-env=APHRODITE_TARGET={}", env::var("TARGET").unwrap_or_default());
if let Ok(output) = Command::new("rustc").arg("--version").output() {
if output.status.success() {
let version = String::from_utf8_lossy(&output.stdout).trim().to_string();
if !version.is_empty() {
println!("cargo:rustc-env=APHRODITE_RUSTC_VERSION={}", version);
}
}
}
println!("cargo:rustc-env=APHRODITE_PROFILE={}", env::var("PROFILE").unwrap_or_default());
Ok(())
}
fn format_iso8601(secs:u64) -> String {
let days = (secs / 86400) as i64;
let rem = secs % 86400;
let (hour, minute, second) = (rem / 3600, (rem % 3600) / 60, rem % 60);
let z = days + 719468;
let era = if z >= 0 { z } else { z - 146096 } / 146097;
let doe = (z - era * 146097) as u64;
let yoe = (doe - doe / 1460 + doe / 36524 - doe / 146096) / 365;
let y = yoe as i64 + era * 400;
let doy = doe - (365 * yoe + yoe / 4 - yoe / 100);
let mp = (5 * doy + 2) / 153;
let d = doy - (153 * mp + 2) / 5 + 1;
let m = if mp < 10 { mp + 3 } else { mp - 9 };
let y = if m <= 2 { y + 1 } else { y };
format!("{y:04}-{m:02}-{d:02}T{hour:02}:{minute:02}:{second:02}Z")
}