Add libc_thread_local cfg and unstable feature
This commit is contained in:
parent
956ba42753
commit
3fa021d7ab
@ -26,8 +26,9 @@ rustc-std-workspace-core = { version = "1.0.0", optional = true }
|
|||||||
default = ["std"]
|
default = ["std"]
|
||||||
std = []
|
std = []
|
||||||
align = []
|
align = []
|
||||||
rustc-dep-of-std = ['align', 'rustc-std-workspace-core']
|
rustc-dep-of-std = ['align', 'rustc-std-workspace-core', 'unstable']
|
||||||
extra_traits = []
|
extra_traits = []
|
||||||
|
unstable = []
|
||||||
# use_std is deprecated, use `std` instead
|
# use_std is deprecated, use `std` instead
|
||||||
use_std = [ 'std' ]
|
use_std = [ 'std' ]
|
||||||
|
|
||||||
|
@ -35,6 +35,9 @@ libc = "0.2"
|
|||||||
* `extra_traits`: all `struct`s implemented in `libc` are `Copy` and `Clone`.
|
* `extra_traits`: all `struct`s implemented in `libc` are `Copy` and `Clone`.
|
||||||
This feature derives `Debug`, `Eq`, `Hash`, and `PartialEq`.
|
This feature derives `Debug`, `Eq`, `Hash`, and `PartialEq`.
|
||||||
|
|
||||||
|
* `unstable`: enable currently unstable bindings. Right now, this just allows
|
||||||
|
bindings to `#[thread_local]` statics on certain platforms. Requires nightly.
|
||||||
|
|
||||||
* **deprecated**: `use_std` is deprecated, and is equivalent to `std`.
|
* **deprecated**: `use_std` is deprecated, and is equivalent to `std`.
|
||||||
|
|
||||||
## Rust version support
|
## Rust version support
|
||||||
|
15
build.rs
15
build.rs
@ -5,18 +5,18 @@ use std::str;
|
|||||||
fn main() {
|
fn main() {
|
||||||
let rustc_minor_ver =
|
let rustc_minor_ver =
|
||||||
rustc_minor_version().expect("Failed to get rustc version");
|
rustc_minor_version().expect("Failed to get rustc version");
|
||||||
let rustc_dep_of_std =
|
let rustc_dep_of_std = env::var("CARGO_FEATURE_RUSTC_DEP_OF_STD").is_ok();
|
||||||
std::env::var("CARGO_FEATURE_RUSTC_DEP_OF_STD").is_ok();
|
let align_cargo_feature = env::var("CARGO_FEATURE_ALIGN").is_ok();
|
||||||
let align_cargo_feature = std::env::var("CARGO_FEATURE_ALIGN").is_ok();
|
let unstable_cargo_feature = env::var("CARGO_FEATURE_UNSTABLE").is_ok();
|
||||||
|
|
||||||
if std::env::var("CARGO_FEATURE_USE_STD").is_ok() {
|
if env::var("CARGO_FEATURE_USE_STD").is_ok() {
|
||||||
println!(
|
println!(
|
||||||
"cargo:warning=\"libc's use_std cargo feature is deprecated since libc 0.2.55; \
|
"cargo:warning=\"libc's use_std cargo feature is deprecated since libc 0.2.55; \
|
||||||
please consider using the `std` cargo feature instead\""
|
please consider using the `std` cargo feature instead\""
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if std::env::var("LIBC_CI").is_ok() {
|
if env::var("LIBC_CI").is_ok() {
|
||||||
if let Some(12) = which_freebsd() {
|
if let Some(12) = which_freebsd() {
|
||||||
println!("cargo:rustc-cfg=freebsd12");
|
println!("cargo:rustc-cfg=freebsd12");
|
||||||
}
|
}
|
||||||
@ -53,6 +53,11 @@ fn main() {
|
|||||||
if rustc_minor_ver >= 33 || rustc_dep_of_std {
|
if rustc_minor_ver >= 33 || rustc_dep_of_std {
|
||||||
println!("cargo:rustc-cfg=libc_packedN");
|
println!("cargo:rustc-cfg=libc_packedN");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// #[thread_local] is currently unstable
|
||||||
|
if unstable_cargo_feature || rustc_dep_of_std {
|
||||||
|
println!("cargo:rustc-cfg=libc_thread_local");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn rustc_minor_version() -> Option<u32> {
|
fn rustc_minor_version() -> Option<u32> {
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
feature = "rustc-dep-of-std",
|
feature = "rustc-dep-of-std",
|
||||||
feature(cfg_target_vendor, link_cfg, no_core)
|
feature(cfg_target_vendor, link_cfg, no_core)
|
||||||
)]
|
)]
|
||||||
|
#![cfg_attr(libc_thread_local, feature(thread_local))]
|
||||||
// Enable extra lints:
|
// Enable extra lints:
|
||||||
#![cfg_attr(feature = "extra_traits", deny(missing_debug_implementations))]
|
#![cfg_attr(feature = "extra_traits", deny(missing_debug_implementations))]
|
||||||
#![deny(missing_copy_implementations, safe_packed_borrows)]
|
#![deny(missing_copy_implementations, safe_packed_borrows)]
|
||||||
|
12
src/unix/bsd/freebsdlike/dragonfly/errno.rs
Normal file
12
src/unix/bsd/freebsdlike/dragonfly/errno.rs
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
// DragonFlyBSD's __error function is declared with "static inline", so it must
|
||||||
|
// be implemented in the libc crate, as a pointer to a static thread_local.
|
||||||
|
f! {
|
||||||
|
pub fn __error() -> *mut ::c_int {
|
||||||
|
&mut errno
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extern {
|
||||||
|
#[thread_local]
|
||||||
|
pub static mut errno: ::c_int;
|
||||||
|
}
|
@ -1036,18 +1036,9 @@ f! {
|
|||||||
(_CMSG_ALIGN(::mem::size_of::<::cmsghdr>()) +
|
(_CMSG_ALIGN(::mem::size_of::<::cmsghdr>()) +
|
||||||
_CMSG_ALIGN(length as usize)) as ::c_uint
|
_CMSG_ALIGN(length as usize)) as ::c_uint
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(libc_thread_local)]
|
|
||||||
pub fn __error() -> *mut ::c_int {
|
|
||||||
&mut errno
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern {
|
extern {
|
||||||
#[cfg(libc_thread_local)]
|
|
||||||
#[thread_local]
|
|
||||||
static mut errno: ::c_int;
|
|
||||||
|
|
||||||
pub fn setgrent();
|
pub fn setgrent();
|
||||||
pub fn mprotect(addr: *mut ::c_void, len: ::size_t, prot: ::c_int)
|
pub fn mprotect(addr: *mut ::c_void, len: ::size_t, prot: ::c_int)
|
||||||
-> ::c_int;
|
-> ::c_int;
|
||||||
@ -1069,3 +1060,10 @@ extern {
|
|||||||
pub fn fstatfs(fd: ::c_int, buf: *mut statfs) -> ::c_int;
|
pub fn fstatfs(fd: ::c_int, buf: *mut statfs) -> ::c_int;
|
||||||
pub fn uname(buf: *mut ::utsname) -> ::c_int;
|
pub fn uname(buf: *mut ::utsname) -> ::c_int;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cfg_if! {
|
||||||
|
if #[cfg(libc_thread_local)] {
|
||||||
|
mod errno;
|
||||||
|
pub use self::errno::*;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user