X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=build.rs;h=b5484bec3c8b8dca5dc0a00930d846e60533d4a7;hb=71c1e873907be8b50a54bce1be01fb5308ccbc0d;hp=1481f460fc3b4f08abe168ddb8f505eb5241b097;hpb=3c6503eb4b24897e9317b4af2faaf6b603be32dd;p=rust.git diff --git a/build.rs b/build.rs index 1481f460fc3..b5484bec3c8 100644 --- a/build.rs +++ b/build.rs @@ -1,113 +1,19 @@ -//! This build script ensures that clippy is not compiled with an -//! incompatible version of rust. It will panic with a descriptive -//! error message instead. -//! -//! We specifially want to ensure that clippy is only built with a -//! rustc version that is newer or equal to the one specified in the -//! `min_version.txt` file. -//! -//! `min_version.txt` is in the repo but also in the `.gitignore` to -//! make sure that it is not updated manually by accident. Only CI -//! should update that file. -//! -//! This build script was originally taken from the Rocket web framework: -//! https://github.com/SergioBenitez/Rocket - -extern crate ansi_term; -extern crate rustc_version; - -use ansi_term::Colour::Red; -use rustc_version::{version_meta, version_meta_for, Channel, Version, VersionMeta}; -use std::env; - fn main() { - check_rustc_version(); - // Forward the profile to the main compilation - println!("cargo:rustc-env=PROFILE={}", env::var("PROFILE").unwrap()); + println!("cargo:rustc-env=PROFILE={}", std::env::var("PROFILE").unwrap()); // Don't rebuild even if nothing changed println!("cargo:rerun-if-changed=build.rs"); -} - -fn check_rustc_version() { - let string = include_str!("min_version.txt"); - let min_version_meta = version_meta_for(string).expect("Could not parse version string in min_version.txt"); - let current_version_meta = version_meta().expect("Could not retrieve current rustc version information from ENV"); - - let min_version = min_version_meta.clone().semver; - let min_date_str = min_version_meta - .clone() - .commit_date - .expect("min_version.txt does not contain a rustc commit date"); - - // Dev channel (rustc built from git) does not have any date or commit information in rustc -vV - // `current_version_meta.commit_date` would crash, so we return early here. - if current_version_meta.channel == Channel::Dev { - return; - } - - let current_version = current_version_meta.clone().semver; - let current_date_str = current_version_meta - .clone() - .commit_date - .expect("current rustc version information does not contain a rustc commit date"); - - let print_version_err = |version: &Version, date: &str| { - eprintln!( - "> {} {}. {} {}.\n", - "Installed rustc version is:", - format!("{} ({})", version, date), - "Minimum required rustc version:", - format!("{} ({})", min_version, min_date_str) - ); - }; - - if !correct_channel(¤t_version_meta) { - eprintln!( - "\n{} {}", - Red.bold().paint("error:"), - "clippy requires a nightly version of Rust." - ); - print_version_err(¤t_version, &*current_date_str); - eprintln!( - "{}{}{}", - "See the README (", "https://github.com/rust-lang-nursery/rust-clippy#usage", ") for more information." - ); - panic!("Aborting compilation due to incompatible compiler.") - } - - let current_date = str_to_ymd(¤t_date_str).unwrap(); - let min_date = str_to_ymd(&min_date_str).unwrap(); - - if current_date < min_date { - eprintln!( - "\n{} {}", - Red.bold().paint("error:"), - "clippy does not support this version of rustc nightly." - ); - eprintln!( - "> {}{}{}", - "Use `", "rustup update", "` or your preferred method to update Rust." - ); - print_version_err(¤t_version, &*current_date_str); - panic!("Aborting compilation due to incompatible compiler.") - } -} - -fn correct_channel(version_meta: &VersionMeta) -> bool { - match version_meta.channel { - Channel::Stable | Channel::Beta => false, - Channel::Nightly | Channel::Dev => true, - } -} - -/// Convert a string of %Y-%m-%d to a single u32 maintaining ordering. -fn str_to_ymd(ymd: &str) -> Option { - let ymd: Vec = ymd.split("-").filter_map(|s| s.parse::().ok()).collect(); - if ymd.len() != 3 { - return None; - } - - let (y, m, d) = (ymd[0], ymd[1], ymd[2]); - Some((y << 9) | (m << 5) | d) + // forward git repo hashes we build at + println!( + "cargo:rustc-env=GIT_HASH={}", + rustc_tools_util::get_commit_hash().unwrap_or_default() + ); + println!( + "cargo:rustc-env=COMMIT_DATE={}", + rustc_tools_util::get_commit_date().unwrap_or_default() + ); + println!( + "cargo:rustc-env=RUSTC_RELEASE_CHANNEL={}", + rustc_tools_util::get_channel() + ); }