a17a91cdbf
This PR fixes the build on all platforms and all Rust version down to the minimum Rust version supported by libc: Rust 1.13.0. The `build.rs` is extended with logic to detect the newer Rust features used by `libc` since Rust 1.13.0: * Rust 1.19.0: `untagged_unions`. APIs using untagged unions are gated on `cfg(libc_unions)` and not available on older Rust versions. * Rust 1.25.0: `repr(align)`. Because `repr(align)` cannot be parsed by older Rust versions, all uses of `repr(align)` are split into `align.rs` and `no_align.rs` modules, which are gated on the `cfg(libc_align)` at the top level. These modules sometimes contain macros that are expanded at the top level to avoid privacy issues (`pub(crate)` is not available in older Rust versions). Closes #1242 . * Rust : `const` `mem::size_of`. These uses are worked around with hardcoded constants on older Rust versions. Also, `repr(packed)` structs cannot automatically `derive()` some traits like `Debug`. These have been moved into `s_no_extra_traits!` and the lint of missing `Debug` implementations on public items is silenced for these. We can manually implement the `extra_traits` for these in a follow up PR. This is tracked in #1243. Also, `extra_traits` does not enable `align` manually anymore. Since `f64::to_bits` is not available in older Rust versions, its usage has been replaced with a `transmute` to an `u64` which is what that method does under the hood. Closes #1232 .
34 lines
933 B
TOML
34 lines
933 B
TOML
[package]
|
|
name = "libc"
|
|
version = "0.2.48"
|
|
authors = ["The Rust Project Developers"]
|
|
license = "MIT OR Apache-2.0"
|
|
readme = "README.md"
|
|
repository = "https://github.com/rust-lang/libc"
|
|
homepage = "https://github.com/rust-lang/libc"
|
|
documentation = "http://doc.rust-lang.org/libc"
|
|
keywords = ["libc", "ffi", "bindings", "operating", "system" ]
|
|
categories = ["external-ffi-bindings", "no-std", "os"]
|
|
build = "build.rs"
|
|
exclude = ["/ci/*", "/.travis.yml", "/appveyor.yml"]
|
|
description = """
|
|
Raw FFI bindings to platform libraries like libc.
|
|
"""
|
|
|
|
[badges]
|
|
travis-ci = { repository = "rust-lang/libc" }
|
|
appveyor = { repository = "rust-lang/libc", project_name = "rust-lang-libs/libc" }
|
|
|
|
[dependencies]
|
|
rustc-std-workspace-core = { version = "1.0.0", optional = true }
|
|
|
|
[features]
|
|
default = ["use_std"]
|
|
use_std = []
|
|
align = []
|
|
rustc-dep-of-std = ['align', 'rustc-std-workspace-core']
|
|
extra_traits = []
|
|
|
|
[workspace]
|
|
members = ["libc-test"]
|