version: show echoircd-<major> (5) in 002/004/351 and enrich RPL_VERSION with build/toolchain provenance
This commit is contained in:
parent
5c286a94cb
commit
42fe82556b
6 changed files with 71 additions and 9 deletions
42
build.rs
Normal file
42
build.rs
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
use std::process::Command;
|
||||
|
||||
// Capture build provenance (git rev/date, toolchain, target) into env vars the
|
||||
// crate reads via env! for the VERSION reply. Always emits every var, with an
|
||||
// "unknown" fallback, so a non-git build (e.g. a source tarball) still compiles.
|
||||
fn main() {
|
||||
println!("cargo:rerun-if-changed=.git/HEAD");
|
||||
println!("cargo:rerun-if-changed=.git/index");
|
||||
|
||||
let git = |args: &[&str]| {
|
||||
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())
|
||||
};
|
||||
|
||||
let hash = git(&["rev-parse", "--short=7", "HEAD"]).unwrap_or_else(|| "unknown".into());
|
||||
let dirty = match git(&["status", "--porcelain", "--untracked-files=no"]) {
|
||||
Some(s) if !s.is_empty() => "-dirty",
|
||||
_ => "",
|
||||
};
|
||||
let date = git(&["log", "-1", "--format=%cd", "--date=short"]).unwrap_or_else(|| "unknown".into());
|
||||
|
||||
let rustc = Command::new(std::env::var("RUSTC").unwrap_or_else(|_| "rustc".into()))
|
||||
.arg("--version")
|
||||
.output()
|
||||
.ok()
|
||||
.map(|o| String::from_utf8_lossy(&o.stdout).trim().to_string())
|
||||
.and_then(|s| s.split_whitespace().nth(1).map(str::to_string))
|
||||
.unwrap_or_else(|| "unknown".into());
|
||||
|
||||
let target = std::env::var("TARGET").unwrap_or_else(|_| "unknown".into());
|
||||
|
||||
println!("cargo:rustc-env=ECHOIRCD_GIT_HASH={hash}");
|
||||
println!("cargo:rustc-env=ECHOIRCD_GIT_DIRTY={dirty}");
|
||||
println!("cargo:rustc-env=ECHOIRCD_COMMIT_DATE={date}");
|
||||
println!("cargo:rustc-env=ECHOIRCD_RUSTC={rustc}");
|
||||
println!("cargo:rustc-env=ECHOIRCD_TARGET={target}");
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue