use std::process::Command;
fn main() {
let rustc = std::env::var("RUSTC").unwrap_or_else(|_| "rustc".to_owned());
let (release, hash) = rustc_version(&rustc);
let target = std::env::var("TARGET").unwrap_or_else(|_| "unknown-target".to_owned());
let panic = std::env::var("CARGO_CFG_PANIC").unwrap_or_else(|_| "unknown-panic".to_owned());
println!("cargo:rustc-env=CORDIS_RUSTC_RELEASE={release}");
println!("cargo:rustc-env=CORDIS_RUSTC_COMMIT_HASH={hash}");
println!("cargo:rustc-env=CORDIS_BUILD_TARGET={target}");
println!("cargo:rustc-env=CORDIS_BUILD_PANIC={panic}");
}
fn rustc_version(rustc: &str) -> (String, String) {
let output = Command::new(rustc)
.arg("-vV")
.output()
.ok()
.filter(|output| output.status.success())
.map(|output| String::from_utf8_lossy(&output.stdout).into_owned())
.unwrap_or_default();
let field = |name: &str| {
output
.lines()
.find_map(|line| line.strip_prefix(name))
.map(str::trim)
.filter(|value| !value.is_empty() && *value != "unknown")
.map(ToString::to_string)
};
(
field("release: ").unwrap_or_else(|| "unknown-release".to_owned()),
field("commit-hash: ").unwrap_or_else(|| "unknown-hash".to_owned()),
)
}