summaryrefslogtreecommitdiff
path: root/libc/build.rs
diff options
context:
space:
mode:
Diffstat (limited to 'libc/build.rs')
-rw-r--r--libc/build.rs42
1 files changed, 36 insertions, 6 deletions
diff --git a/libc/build.rs b/libc/build.rs
index 1852ed2..9b13376 100644
--- a/libc/build.rs
+++ b/libc/build.rs
@@ -3,12 +3,42 @@ use std::process::Command;
use std::str;
fn main() {
- /*
- * If `core::ffi::c_void` exists, libc can just re-export it. Otherwise, it
- * must define an incompatible type to retain backwards-compatibility.
- */
- if rustc_minor_version().expect("Failed to get rustc version") >= 30 {
- println!("cargo:rustc-cfg=core_cvoid");
+ let rustc_minor_ver =
+ rustc_minor_version().expect("Failed to get rustc version");
+ let rustc_dep_of_std =
+ std::env::var("CARGO_FEATURE_RUSTC_DEP_OF_STD").is_ok();
+ let align_cargo_feature = std::env::var("CARGO_FEATURE_ALIGN").is_ok();
+
+ // Rust >= 1.15 supports private module use:
+ if rustc_minor_ver >= 15 || rustc_dep_of_std {
+ println!("cargo:rustc-cfg=libc_priv_mod_use");
+ }
+
+ // Rust >= 1.19 supports unions:
+ if rustc_minor_ver >= 19 || rustc_dep_of_std {
+ println!("cargo:rustc-cfg=libc_union");
+ }
+
+ // Rust >= 1.24 supports const mem::size_of:
+ if rustc_minor_ver >= 24 || rustc_dep_of_std {
+ println!("cargo:rustc-cfg=libc_const_size_of");
+ }
+
+ // Rust >= 1.25 supports repr(align):
+ if rustc_minor_ver >= 25 || rustc_dep_of_std || align_cargo_feature {
+ println!("cargo:rustc-cfg=libc_align");
+ }
+
+ // Rust >= 1.30 supports `core::ffi::c_void`, so libc can just re-export it.
+ // Otherwise, it defines an incompatible type to retaining
+ // backwards-compatibility.
+ if rustc_minor_ver >= 30 || rustc_dep_of_std {
+ println!("cargo:rustc-cfg=libc_core_cvoid");
+ }
+
+ // Rust >= 1.33 supports repr(packed(N))
+ if rustc_minor_ver >= 33 || rustc_dep_of_std {
+ println!("cargo:rustc-cfg=libc_packedN");
}
}