use version_check::{Channel, Version};
const MSRV_MINOR: u16 = 36;
const CURRENT_MINOR: u16 = 60;
fn main() {
let msrv = Version::from_mmp(1, MSRV_MINOR, 0);
let mut minor_used = match Version::read() {
Some(version) => version,
None => {
println!("cargo:warning=Unable to determine rustc version. Assuming rustc {}.", msrv);
msrv
}
}
.to_mmp()
.1;
let channel = Channel::read();
match channel {
Some(channel) if channel.is_beta() => minor_used -= 1,
Some(channel) if channel.supports_features() => minor_used -= 2,
_ => {}
}
#[allow(unused_assignments, unused_mut)]
let mut explicit_msrv_set = false;
macro_rules! old_stable_compilers {
($($msrv_str:literal $minor:literal),+,) => {$(
#[allow(unused_assignments)]
#[cfg(feature = $msrv_str)]
{
explicit_msrv_set = true;
}
if $minor < minor_used {
#[cfg(feature = $msrv_str)]
println!(r#"cargo:rustc-cfg=reexport="1.{}""#, $minor + 1);
println!(r#"cargo:rustc-cfg=since="1.{}""#, $minor + 1);
} else {
#[cfg(feature = $msrv_str)]
println!(r#"cargo:rustc-cfg=shim="1.{}""#, $minor + 1);
println!(r#"cargo:rustc-cfg=before="1.{}""#, $minor + 1);
}
)*};
}
old_stable_compilers![
"msrv-1-36" 36,
"msrv-1-37" 37,
"msrv-1-38" 38,
"msrv-1-39" 39,
"msrv-1-40" 40,
"msrv-1-41" 41,
"msrv-1-42" 42,
"msrv-1-43" 43,
"msrv-1-44" 44,
"msrv-1-45" 45,
"msrv-1-46" 46,
"msrv-1-47" 47,
"msrv-1-48" 48,
"msrv-1-49" 49,
"msrv-1-50" 50,
"msrv-1-51" 51,
"msrv-1-52" 52,
"msrv-1-53" 53,
"msrv-1-54" 54,
"msrv-1-55" 55,
"msrv-1-56" 56,
"msrv-1-57" 57,
"msrv-1-58" 58,
"msrv-1-59" 59,
];
if !explicit_msrv_set {
for minor in (MSRV_MINOR + 1)..=CURRENT_MINOR {
println!(r#"cargo:rustc-cfg=shim="1.{}""#, minor);
}
}
}