Skip to content

Prepare for being included via crates.io into std #1134

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Nov 22, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
[package]

name = "libc"
version = "0.2.43"
version = "0.2.44"
authors = ["The Rust Project Developers"]
license = "MIT OR Apache-2.0"
readme = "README.md"
Expand All @@ -19,10 +18,14 @@ exclude = ["/ci/*", "/.travis.yml", "/appveyor.yml"]
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']
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know if this should enable use_std as well to be sure - it should be enabled by default anyways as long as libstd doesn't use default-features=false.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nah this specifically actually doesn't want use_std because std isn't built yet! (this'll be a dependency of std)


[workspace]
members = ["libc-test"]
2 changes: 1 addition & 1 deletion libc-test/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -441,7 +441,7 @@ fn main() {
// which is absent in glibc, has to be defined.
"__timeval" if linux => true,

// Fixed on stdbuild with repr(packed(4))
// Fixed on feature=align with repr(packed(4))
// Once repr_packed stabilizes we can fix this unconditionally
// and remove this check.
"kevent" | "shmid_ds" if apple && x86_64 => true,
Expand Down
21 changes: 16 additions & 5 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -150,22 +150,33 @@
)
)]
// Attributes needed when building as part of the standard library
#![cfg_attr(feature = "stdbuild", feature(staged_api, cfg_target_vendor))]
#![cfg_attr(feature = "stdbuild", feature(link_cfg, repr_packed))]
#![cfg_attr(feature = "stdbuild", allow(warnings))]
#![cfg_attr(feature = "rustc-dep-of-std", feature(staged_api, cfg_target_vendor))]
#![cfg_attr(feature = "rustc-dep-of-std", feature(link_cfg, repr_packed))]
#![cfg_attr(feature = "rustc-dep-of-std", feature(no_core))]
#![cfg_attr(feature = "rustc-dep-of-std", no_core)]
#![cfg_attr(feature = "rustc-dep-of-std", allow(warnings))]
#![cfg_attr(
feature = "stdbuild",
feature = "rustc-dep-of-std",
unstable(
feature = "libc",
reason = "use `libc` from crates.io",
issue = "27783"
)
)]
#![cfg_attr(not(feature = "use_std"), no_std)]
#![cfg_attr(not(any(feature = "use_std", feature = "rustc-dep-of-std")), no_std)]

#[cfg(all(not(cross_platform_docs), feature = "use_std"))]
extern crate std as core;

#[cfg(feature = "rustc-dep-of-std")]
extern crate rustc_std_workspace_core as core;
#[cfg(feature = "rustc-dep-of-std")]
#[allow(unused_imports)]
use core::iter;
#[cfg(feature = "rustc-dep-of-std")]
#[allow(unused_imports)]
use core::option;

#[macro_use]
mod macros;

Expand Down
4 changes: 2 additions & 2 deletions src/unix/bsd/apple/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -245,7 +245,7 @@ s! {
pub f_reserved: [::uint32_t; 8],
}

#[cfg_attr(feature = "stdbuild", repr(packed(4)))]
#[cfg_attr(feature = "rustc-dep-of-std", repr(packed(4)))]
pub struct kevent {
pub ident: ::uintptr_t,
pub filter: ::int16_t,
Expand Down Expand Up @@ -535,7 +535,7 @@ s! {
pub _key: ::key_t,
}

#[cfg_attr(feature = "stdbuild", repr(packed(4)))]
#[cfg_attr(feature = "rustc-dep-of-std", repr(packed(4)))]
pub struct shmid_ds {
pub shm_perm: ipc_perm,
pub shm_segsz: ::size_t,
Expand Down
7 changes: 4 additions & 3 deletions src/unix/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -318,17 +318,18 @@ cfg_if! {
// cargo build, don't pull in anything extra as the libstd dep
// already pulls in all libs.
} else if #[cfg(target_env = "musl")] {
#[cfg_attr(feature = "stdbuild",
#[cfg_attr(feature = "rustc-dep-of-std",
link(name = "c", kind = "static",
cfg(target_feature = "crt-static")))]
#[cfg_attr(feature = "stdbuild",
#[cfg_attr(feature = "rustc-dep-of-std",
link(name = "c", cfg(not(target_feature = "crt-static"))))]
extern {}
} else if #[cfg(target_os = "emscripten")] {
#[link(name = "c")]
extern {}
} else if #[cfg(all(target_os = "netbsd",
feature = "stdbuild", target_vendor = "rumprun"))] {
feature = "rustc-dep-of-std",
target_vendor = "rumprun"))] {
// Since we don't use -nodefaultlibs on Rumprun, libc is always pulled
// in automatically by the linker. We avoid passing it explicitly, as it
// causes some versions of binutils to crash with an assertion failure.
Expand Down
2 changes: 1 addition & 1 deletion src/windows.rs
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ pub const EILSEQ: ::c_int = 42;
pub const STRUNCATE: ::c_int = 80;

// inline comment below appeases style checker
#[cfg(all(target_env = "msvc", feature = "stdbuild"))] // " if "
#[cfg(all(target_env = "msvc", feature = "rustc-dep-of-std"))] // " if "
#[link(name = "msvcrt", cfg(not(target_feature = "crt-static")))]
#[link(name = "libcmt", cfg(target_feature = "crt-static"))]
extern {}
Expand Down