diff --git a/build.rs b/build.rs index f41c9813b..e2deb9b8a 100644 --- a/build.rs +++ b/build.rs @@ -9,7 +9,7 @@ use std::{path::PathBuf, process::Command}; use rayon::prelude::*; -// use version_check as rustc; +use version_check as rustc; struct TreeSitterParser { name: &'static str, @@ -360,6 +360,10 @@ fn main() { parsers.par_iter().for_each(|p| p.build()); commit_info(); + + if let Some((version, _, _)) = rustc::triple() { + println!("cargo:rustc-env=DFT_RUSTC_VERSION={}", version); + } } fn commit_info() { diff --git a/src/version.rs b/src/version.rs index 84e435808..b075a8f87 100644 --- a/src/version.rs +++ b/src/version.rs @@ -10,15 +10,28 @@ pub(crate) struct CommitInfo { pub(crate) struct VersionInfo { pub(crate) version: &'static str, pub(crate) commit_info: Option, + pub(crate) rustc_version: Option<&'static str>, } impl fmt::Display for VersionInfo { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "{}", self.version)?; - if let Some(ref ci) = &self.commit_info { - write!(f, " ({} {})", ci.short_commit_hash, ci.commit_date)?; + match (&self.commit_info, self.rustc_version) { + (Some(commit_info), Some(rustc_version)) => write!( + f, + " ({} {}, built with rustc {})", + commit_info.short_commit_hash, commit_info.commit_date, rustc_version + )?, + (Some(commit_info), None) => write!( + f, + " ({} {})", + commit_info.short_commit_hash, commit_info.commit_date + )?, + (None, Some(rustc_version)) => write!(f, " (built with rustc {})", rustc_version)?, + (None, None) => {} } + Ok(()) } } @@ -40,8 +53,11 @@ pub(crate) const fn version() -> VersionInfo { _ => None, }; + let rustc_version = option_env!("DFT_RUSTC_VERSION"); + VersionInfo { version, commit_info, + rustc_version, } }