diff options
author | Aaron Hill <aa1ronham@gmail.com> | 2019-10-29 08:25:59 -0400 |
---|---|---|
committer | Aaron Hill <aa1ronham@gmail.com> | 2019-10-29 08:25:59 -0400 |
commit | 476b6759762514c353b8f3d6375d86d747084340 (patch) | |
tree | a51c73aa35f8a170347368fd4ef4579d997e60fc /build.rs | |
parent | b0ba2de7676af63ba4c13d7184b3f630735e7e7b (diff) | |
download | rust-libc-476b6759762514c353b8f3d6375d86d747084340.tar.gz |
Panic if const-extern-fn is not used on nightly
Diffstat (limited to 'build.rs')
-rw-r--r-- | build.rs | 16 |
1 files changed, 12 insertions, 4 deletions
@@ -3,8 +3,8 @@ use std::process::Command; use std::str; fn main() { - let rustc_minor_ver = - rustc_minor_version().expect("Failed to get rustc version"); + let (rustc_minor_ver, is_nightly) = + rustc_minor_nightly().expect("Failed to get rustc version"); let rustc_dep_of_std = env::var("CARGO_FEATURE_RUSTC_DEP_OF_STD").is_ok(); let align_cargo_feature = env::var("CARGO_FEATURE_ALIGN").is_ok(); let const_extern_fn_cargo_feature = env::var("CARGO_FEATURE_CONST_EXTERN_FN").is_ok(); @@ -75,11 +75,14 @@ fn main() { } if const_extern_fn_cargo_feature { + if !is_nightly || rustc_minor_ver < 40 { + panic!("const-extern-fn requires a nightly compiler >= 1.40") + } println!("cargo:rustc-cfg=libc_const_extern_fn"); } } -fn rustc_minor_version() -> Option<u32> { +fn rustc_minor_nightly() -> Option<(u32, bool)> { macro_rules! otry { ($e:expr) => { match $e { @@ -98,7 +101,12 @@ fn rustc_minor_version() -> Option<u32> { return None; } - otry!(pieces.next()).parse().ok() + let minor = pieces.next(); + let nightly_raw = otry!(otry!(pieces.next()).split('-').nth(1)); + let nightly = nightly_raw.starts_with("dev") || nightly_raw.starts_with("nightly"); + let minor = otry!(otry!(minor).parse().ok()); + + Some((minor, nightly)) } fn which_freebsd() -> Option<i32> { |