diff --git a/cranelift/codegen/build.rs b/cranelift/codegen/build.rs index c456908845..dd6cfc999c 100644 --- a/cranelift/codegen/build.rs +++ b/cranelift/codegen/build.rs @@ -17,6 +17,7 @@ use cranelift_codegen_meta as meta; use std::env; +use std::io::Read; use std::process; use std::time::Instant; @@ -97,4 +98,40 @@ fn main() { ) .unwrap() } + + let pkg_version = env::var("CARGO_PKG_VERSION").unwrap(); + let mut cmd = std::process::Command::new("git"); + cmd.arg("rev-parse") + .arg("HEAD") + .stdout(std::process::Stdio::piped()) + .current_dir(env::var("CARGO_MANIFEST_DIR").unwrap()); + let version = if let Ok(mut child) = cmd.spawn() { + let mut git_rev = String::new(); + child + .stdout + .as_mut() + .unwrap() + .read_to_string(&mut git_rev) + .unwrap(); + let status = child.wait().unwrap(); + if status.success() { + let git_rev = git_rev.trim().chars().take(9).collect::(); + format!("{}-{}", pkg_version, git_rev) + } else { + // not a git repo + pkg_version + } + } else { + // git not available + pkg_version + }; + std::fs::write( + std::path::Path::new(&out_dir).join("version.rs"), + format!( + "/// Version number of this crate. \n\ + pub const VERSION: &str = \"{}\";", + version + ), + ) + .unwrap(); } diff --git a/cranelift/codegen/src/lib.rs b/cranelift/codegen/src/lib.rs index e3be3e0aaf..5b80073b7f 100644 --- a/cranelift/codegen/src/lib.rs +++ b/cranelift/codegen/src/lib.rs @@ -121,5 +121,4 @@ mod souper_harvest; pub use crate::result::{CodegenError, CodegenResult}; -/// Version number of this crate. -pub const VERSION: &str = env!("CARGO_PKG_VERSION"); +include!(concat!(env!("OUT_DIR"), "/version.rs"));