|
6 | 6 |
|
7 | 7 | #![doc(html_root_url = "https://doc.rust-lang.org/nightly/nightly-rustc/")]
|
8 | 8 | #![feature(once_cell)]
|
| 9 | +#![feature(decl_macro)] |
9 | 10 | #![recursion_limit = "256"]
|
10 | 11 | #![allow(rustc::potential_query_instability)]
|
11 | 12 | #![deny(rustc::untranslatable_diagnostic)]
|
@@ -753,20 +754,41 @@ fn print_crate_info(
|
753 | 754 | }
|
754 | 755 |
|
755 | 756 | /// Prints version information
|
756 |
| -pub fn version(binary: &str, matches: &getopts::Matches) { |
| 757 | +/// |
| 758 | +/// NOTE: this is a macro to support drivers built at a different time than the main `rustc_driver` crate. |
| 759 | +pub macro version($binary: literal, $matches: expr) { |
| 760 | + fn unw(x: Option<&str>) -> &str { |
| 761 | + x.unwrap_or("unknown") |
| 762 | + } |
| 763 | + $crate::version_at_macro_invocation( |
| 764 | + $binary, |
| 765 | + $matches, |
| 766 | + unw(option_env!("CFG_VERSION")), |
| 767 | + unw(option_env!("CFG_VER_HASH")), |
| 768 | + unw(option_env!("CFG_VER_DATE")), |
| 769 | + unw(option_env!("CFG_RELEASE")), |
| 770 | + ) |
| 771 | +} |
| 772 | + |
| 773 | +#[doc(hidden)] // use the macro instead |
| 774 | +pub fn version_at_macro_invocation( |
| 775 | + binary: &str, |
| 776 | + matches: &getopts::Matches, |
| 777 | + version: &str, |
| 778 | + commit_hash: &str, |
| 779 | + commit_date: &str, |
| 780 | + release: &str, |
| 781 | +) { |
757 | 782 | let verbose = matches.opt_present("verbose");
|
758 | 783 |
|
759 |
| - println!("{} {}", binary, util::version_str().unwrap_or("unknown version")); |
| 784 | + println!("{} {}", binary, version); |
760 | 785 |
|
761 | 786 | if verbose {
|
762 |
| - fn unw(x: Option<&str>) -> &str { |
763 |
| - x.unwrap_or("unknown") |
764 |
| - } |
765 | 787 | println!("binary: {}", binary);
|
766 |
| - println!("commit-hash: {}", unw(util::commit_hash_str())); |
767 |
| - println!("commit-date: {}", unw(util::commit_date_str())); |
| 788 | + println!("commit-hash: {}", commit_hash); |
| 789 | + println!("commit-date: {}", commit_date); |
768 | 790 | println!("host: {}", config::host_triple());
|
769 |
| - println!("release: {}", unw(util::release_str())); |
| 791 | + println!("release: {}", release); |
770 | 792 |
|
771 | 793 | let debug_flags = matches.opt_strs("Z");
|
772 | 794 | let backend_name = debug_flags.iter().find_map(|x| x.strip_prefix("codegen-backend="));
|
@@ -1082,7 +1104,7 @@ pub fn handle_options(args: &[String]) -> Option<getopts::Matches> {
|
1082 | 1104 | }
|
1083 | 1105 |
|
1084 | 1106 | if matches.opt_present("version") {
|
1085 |
| - version("rustc", &matches); |
| 1107 | + version!("rustc", &matches); |
1086 | 1108 | return None;
|
1087 | 1109 | }
|
1088 | 1110 |
|
@@ -1227,7 +1249,7 @@ pub fn report_ice(info: &panic::PanicInfo<'_>, bug_report_url: &str) {
|
1227 | 1249 | format!("we would appreciate a bug report: {}", bug_report_url).into(),
|
1228 | 1250 | format!(
|
1229 | 1251 | "rustc {} running on {}",
|
1230 |
| - util::version_str().unwrap_or("unknown_version"), |
| 1252 | + util::version_str!().unwrap_or("unknown_version"), |
1231 | 1253 | config::host_triple()
|
1232 | 1254 | )
|
1233 | 1255 | .into(),
|
|
0 commit comments