|
13 | 13 | //! This build script was originally taken from the Rocket web framework:
|
14 | 14 | //! https://github.com/SergioBenitez/Rocket
|
15 | 15 |
|
16 |
| -use ansi_term::Colour::Red; |
17 |
| -use rustc_version::{version_meta, version_meta_for, Channel, Version, VersionMeta}; |
18 | 16 | use std::env;
|
19 | 17 |
|
20 | 18 | fn main() {
|
21 |
| - check_rustc_version(); |
22 |
| - |
23 | 19 | // Forward the profile to the main compilation
|
24 | 20 | println!("cargo:rustc-env=PROFILE={}", env::var("PROFILE").unwrap());
|
25 | 21 | // Don't rebuild even if nothing changed
|
26 | 22 | println!("cargo:rerun-if-changed=build.rs");
|
27 | 23 | }
|
28 |
| - |
29 |
| -fn check_rustc_version() { |
30 |
| - let string = include_str!("min_version.txt"); |
31 |
| - let min_version_meta = version_meta_for(string).expect("Could not parse version string in min_version.txt"); |
32 |
| - let current_version_meta = version_meta().expect("Could not retrieve current rustc version information from ENV"); |
33 |
| - |
34 |
| - let min_version = min_version_meta.clone().semver; |
35 |
| - let min_date_str = min_version_meta |
36 |
| - .clone() |
37 |
| - .commit_date |
38 |
| - .expect("min_version.txt does not contain a rustc commit date"); |
39 |
| - |
40 |
| - // Dev channel (rustc built from git) does not have any date or commit information in rustc -vV |
41 |
| - // `current_version_meta.commit_date` would crash, so we return early here. |
42 |
| - if current_version_meta.channel == Channel::Dev { |
43 |
| - return; |
44 |
| - } |
45 |
| - |
46 |
| - let current_version = current_version_meta.clone().semver; |
47 |
| - let current_date_str = current_version_meta |
48 |
| - .clone() |
49 |
| - .commit_date |
50 |
| - .expect("current rustc version information does not contain a rustc commit date"); |
51 |
| - |
52 |
| - let print_version_err = |version: &Version, date: &str| { |
53 |
| - eprintln!( |
54 |
| - "> {} {}. {} {}.\n", |
55 |
| - "Installed rustc version is:", |
56 |
| - format!("{} ({})", version, date), |
57 |
| - "Minimum required rustc version:", |
58 |
| - format!("{} ({})", min_version, min_date_str) |
59 |
| - ); |
60 |
| - }; |
61 |
| - |
62 |
| - if !correct_channel(¤t_version_meta) { |
63 |
| - eprintln!( |
64 |
| - "\n{} {}", |
65 |
| - Red.bold().paint("error:"), |
66 |
| - "Clippy requires a nightly version of Rust." |
67 |
| - ); |
68 |
| - print_version_err(¤t_version, &*current_date_str); |
69 |
| - eprintln!( |
70 |
| - "{}{}{}", |
71 |
| - "See the README (", "https://github.com/rust-lang-nursery/rust-clippy#usage", ") for more information." |
72 |
| - ); |
73 |
| - panic!("Aborting compilation due to incompatible compiler.") |
74 |
| - } |
75 |
| - |
76 |
| - let current_date = str_to_ymd(¤t_date_str).unwrap(); |
77 |
| - let min_date = str_to_ymd(&min_date_str).unwrap(); |
78 |
| - |
79 |
| - if current_date < min_date { |
80 |
| - eprintln!( |
81 |
| - "\n{} {}", |
82 |
| - Red.bold().paint("error:"), |
83 |
| - "Clippy does not support this version of rustc nightly." |
84 |
| - ); |
85 |
| - eprintln!( |
86 |
| - "> {}{}{}", |
87 |
| - "Use `", "rustup update", "` or your preferred method to update Rust." |
88 |
| - ); |
89 |
| - print_version_err(¤t_version, &*current_date_str); |
90 |
| - panic!("Aborting compilation due to incompatible compiler.") |
91 |
| - } |
92 |
| -} |
93 |
| - |
94 |
| -fn correct_channel(version_meta: &VersionMeta) -> bool { |
95 |
| - match version_meta.channel { |
96 |
| - Channel::Stable | Channel::Beta => false, |
97 |
| - Channel::Nightly | Channel::Dev => true, |
98 |
| - } |
99 |
| -} |
100 |
| - |
101 |
| -/// Convert a string of %Y-%m-%d to a single u32 maintaining ordering. |
102 |
| -fn str_to_ymd(ymd: &str) -> Option<u32> { |
103 |
| - let ymd: Vec<u32> = ymd.split("-").filter_map(|s| s.parse::<u32>().ok()).collect(); |
104 |
| - if ymd.len() != 3 { |
105 |
| - return None; |
106 |
| - } |
107 |
| - |
108 |
| - let (y, m, d) = (ymd[0], ymd[1], ymd[2]); |
109 |
| - Some((y << 9) | (m << 5) | d) |
110 |
| -} |
0 commit comments