From 567098d2ebd7ceb9355c6f4f909a47bfcddddb3f Mon Sep 17 00:00:00 2001 From: Wim Looman Date: Tue, 29 Jan 2019 10:06:25 +0100 Subject: [PATCH 1/2] Separate cfg-target-has-atomic feature --- futures-core/Cargo.toml | 1 + futures-core/src/lib.rs | 5 ++++- futures-core/src/task/__internal/mod.rs | 4 ++-- futures-util/Cargo.toml | 1 + futures-util/src/lib.rs | 5 ++++- futures-util/src/task/mod.rs | 2 +- futures/Cargo.toml | 1 + futures/src/lib.rs | 2 -- 8 files changed, 14 insertions(+), 7 deletions(-) diff --git a/futures-core/Cargo.toml b/futures-core/Cargo.toml index ffe8627d70..b1a9c6debb 100644 --- a/futures-core/Cargo.toml +++ b/futures-core/Cargo.toml @@ -18,6 +18,7 @@ name = "futures_core" default = ["std"] std = ["either/use_std"] nightly = [] +cfg-target-has-atomic = [] [dependencies] either = { version = "1.4", default-features = false, optional = true } diff --git a/futures-core/src/lib.rs b/futures-core/src/lib.rs index 78cbfca4d5..ef235a812a 100644 --- a/futures-core/src/lib.rs +++ b/futures-core/src/lib.rs @@ -1,7 +1,7 @@ //! Core traits and types for asynchronous operations in Rust. #![feature(futures_api)] -#![cfg_attr(feature = "nightly", feature(cfg_target_has_atomic))] +#![cfg_attr(feature = "cfg-target-has-atomic", feature(cfg_target_has_atomic))] #![cfg_attr(not(feature = "std"), no_std)] @@ -10,6 +10,9 @@ #![doc(html_root_url = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.12/futures_core")] +#[cfg(all(feature = "cfg-target-has-atomic", not(feature = "nightly")))] +compile_error!("The `cfg-target-has-atomic` feature requires the `nightly` feature as an explicit opt-in to unstable features"); + pub mod future; #[doc(hidden)] pub use self::future::{Future, FusedFuture, TryFuture}; diff --git a/futures-core/src/task/__internal/mod.rs b/futures-core/src/task/__internal/mod.rs index 822ff8fa68..24dd5d414f 100644 --- a/futures-core/src/task/__internal/mod.rs +++ b/futures-core/src/task/__internal/mod.rs @@ -1,10 +1,10 @@ #[cfg_attr( - feature = "nightly", + feature = "cfg-target-has-atomic", cfg(all(target_has_atomic = "cas", target_has_atomic = "ptr")) )] mod atomic_waker; #[cfg_attr( - feature = "nightly", + feature = "cfg-target-has-atomic", cfg(all(target_has_atomic = "cas", target_has_atomic = "ptr")) )] pub use self::atomic_waker::AtomicWaker; diff --git a/futures-util/Cargo.toml b/futures-util/Cargo.toml index 5c59ee3708..c6712e6fdd 100644 --- a/futures-util/Cargo.toml +++ b/futures-util/Cargo.toml @@ -21,6 +21,7 @@ compat = ["std", "futures_01"] io-compat = ["compat", "tokio-io"] bench = [] nightly = [] +cfg-target-has-atomic = [] [dependencies] futures-core-preview = { path = "../futures-core", version = "=0.3.0-alpha.12", default-features = false } diff --git a/futures-util/src/lib.rs b/futures-util/src/lib.rs index b27adb4add..77e40dbe1a 100644 --- a/futures-util/src/lib.rs +++ b/futures-util/src/lib.rs @@ -3,7 +3,7 @@ #![feature(futures_api, box_into_pin)] #![cfg_attr(feature = "std", feature(async_await, await_macro))] -#![cfg_attr(feature = "nightly", feature(cfg_target_has_atomic))] +#![cfg_attr(feature = "cfg-target-has-atomic", feature(cfg_target_has_atomic))] #![cfg_attr(not(feature = "std"), no_std)] #![warn(missing_docs, missing_debug_implementations)] @@ -11,6 +11,9 @@ #![doc(html_root_url = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.12/futures_util")] +#[cfg(all(feature = "cfg-target-has-atomic", not(feature = "nightly")))] +compile_error!("The `cfg-target-has-atomic` feature requires the `nightly` feature as an explicit opt-in to unstable features"); + #[macro_use] mod macros; diff --git a/futures-util/src/task/mod.rs b/futures-util/src/task/mod.rs index 5d87ed8f73..9991a96cde 100644 --- a/futures-util/src/task/mod.rs +++ b/futures-util/src/task/mod.rs @@ -12,7 +12,7 @@ mod local_waker_ref; pub use self::local_waker_ref::{local_waker_ref, local_waker_ref_from_nonlocal, LocalWakerRef}; #[cfg_attr( - feature = "nightly", + feature = "cfg-target-has-atomic", cfg(all(target_has_atomic = "cas", target_has_atomic = "ptr")) )] pub use futures_core::task::__internal::AtomicWaker; diff --git a/futures/Cargo.toml b/futures/Cargo.toml index 9e2342a38c..39461719c7 100644 --- a/futures/Cargo.toml +++ b/futures/Cargo.toml @@ -41,3 +41,4 @@ std = ["futures-core-preview/std", "futures-executor-preview/std", "futures-io-p default = ["std"] compat = ["std", "futures-util-preview/compat"] io-compat = ["compat", "futures-util-preview/io-compat"] +cfg-target-has-atomic = ["futures-core-preview/cfg-target-has-atomic", "futures-util-preview/cfg-target-has-atomic"] diff --git a/futures/src/lib.rs b/futures/src/lib.rs index 18d105d329..6b6f7ff371 100644 --- a/futures/src/lib.rs +++ b/futures/src/lib.rs @@ -30,8 +30,6 @@ #![doc(html_root_url = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.12/futures")] -#![cfg_attr(feature = "nightly", feature(cfg_target_has_atomic))] - #[doc(hidden)] pub use futures_util::core_reexport; #[doc(hidden)] pub use futures_core::future::Future; From 42c062f159744a0f3695096b84c38a245f3ab72e Mon Sep 17 00:00:00 2001 From: Wim Date: Tue, 29 Jan 2019 11:34:30 +0100 Subject: [PATCH 2/2] Fix missed feature usage --- futures/src/lib.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/futures/src/lib.rs b/futures/src/lib.rs index 6b6f7ff371..4d55d9538b 100644 --- a/futures/src/lib.rs +++ b/futures/src/lib.rs @@ -22,6 +22,7 @@ //! completion, but *do not block* the thread running them. #![feature(futures_api)] +#![cfg_attr(feature = "cfg-target-has-atomic", feature(cfg_target_has_atomic))] #![cfg_attr(not(feature = "std"), no_std)] @@ -30,6 +31,9 @@ #![doc(html_root_url = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.12/futures")] +#[cfg(all(feature = "cfg-target-has-atomic", not(feature = "nightly")))] +compile_error!("The `cfg-target-has-atomic` feature requires the `nightly` feature as an explicit opt-in to unstable features"); + #[doc(hidden)] pub use futures_util::core_reexport; #[doc(hidden)] pub use futures_core::future::Future; @@ -377,7 +381,7 @@ pub mod task { }; #[cfg_attr( - feature = "nightly", + feature = "target-has-atomic", cfg(all(target_has_atomic = "cas", target_has_atomic = "ptr")) )] pub use futures_util::task::AtomicWaker;