summaryrefslogtreecommitdiff
path: root/build.rs
diff options
context:
space:
mode:
authorAaron Hill <aa1ronham@gmail.com>2019-10-29 08:25:59 -0400
committerAaron Hill <aa1ronham@gmail.com>2019-10-29 08:25:59 -0400
commit476b6759762514c353b8f3d6375d86d747084340 (patch)
treea51c73aa35f8a170347368fd4ef4579d997e60fc /build.rs
parentb0ba2de7676af63ba4c13d7184b3f630735e7e7b (diff)
downloadrust-libc-476b6759762514c353b8f3d6375d86d747084340.tar.gz
Panic if const-extern-fn is not used on nightly
Diffstat (limited to 'build.rs')
-rw-r--r--build.rs16
1 files changed, 12 insertions, 4 deletions
diff --git a/build.rs b/build.rs
index fb1aae9be4..dddc029e22 100644
--- a/build.rs
+++ b/build.rs
@@ -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> {