Skip to content

Commit

Permalink
std: Move the bitflags! macro to a gated crate
Browse files Browse the repository at this point in the history
In accordance with [collections reform part 2][rfc] this macro has been moved to
an external [bitflags crate][crate] which is [available though
crates.io][cratesio]. Inside the standard distribution the macro has been moved
to a crate called `rustc_bitflags` for current users to continue using.

[rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0509-collections-reform-part-2.md
[crate]: https://github.com/rust-lang/bitflags
[cratesio]: http://crates.io/crates/bitflags

The major user of `bitflags!` in terms of a public-facing possibly-stable API
today is the `FilePermissions` structure inside of `std::io`. This user,
however, will likely no longer use `bitflags!` after I/O reform has landed. To
prevent breaking APIs today, this structure remains as-is.

Current users of the `bitflags!` macro should add this to their `Cargo.toml`:

    bitflags = "0.1"

and this to their crate root:

    #[macro_use] extern crate bitflags;

Due to the removal of a public macro, this is a:

[breaking-change]
  • Loading branch information
alexcrichton authored and steveklabnik committed Jan 17, 2015
1 parent 0296838 commit 34fa70f
Show file tree
Hide file tree
Showing 7 changed files with 24 additions and 8 deletions.
7 changes: 5 additions & 2 deletions mk/crates.mk
Expand Up @@ -52,7 +52,7 @@
TARGET_CRATES := libc std flate arena term \
serialize getopts collections test rand \
log regex graphviz core rbml alloc \
unicode
unicode rustc_bitflags
RUSTC_CRATES := rustc rustc_typeck rustc_borrowck rustc_resolve rustc_driver \
rustc_trans rustc_back rustc_llvm rustc_privacy
HOST_CRATES := syntax $(RUSTC_CRATES) rustdoc fmt_macros
Expand All @@ -64,7 +64,8 @@ DEPS_libc := core
DEPS_unicode := core
DEPS_alloc := core libc native:jemalloc
DEPS_std := core libc rand alloc collections unicode \
native:rust_builtin native:backtrace native:rustrt_native
native:rust_builtin native:backtrace native:rustrt_native \
rustc_bitflags
DEPS_graphviz := std
DEPS_syntax := std term serialize log fmt_macros arena libc
DEPS_rustc_driver := arena flate getopts graphviz libc rustc rustc_back rustc_borrowck \
Expand All @@ -83,6 +84,7 @@ DEPS_rustc_llvm := native:rustllvm libc std
DEPS_rustc_back := std syntax rustc_llvm flate log libc
DEPS_rustdoc := rustc rustc_driver native:hoedown serialize getopts \
test
DEPS_rustc_bitflags := core
DEPS_flate := std native:miniz
DEPS_arena := std
DEPS_graphviz := std
Expand Down Expand Up @@ -114,6 +116,7 @@ ONLY_RLIB_alloc := 1
ONLY_RLIB_rand := 1
ONLY_RLIB_collections := 1
ONLY_RLIB_unicode := 1
ONLY_RLIB_rustc_bitflags := 1

################################################################################
# You should not need to edit below this line
Expand Down
1 change: 1 addition & 0 deletions src/librustc/lib.rs
Expand Up @@ -44,6 +44,7 @@ extern crate rbml;
extern crate collections;
#[macro_use] extern crate log;
#[macro_use] extern crate syntax;
#[macro_use] #[no_link] extern crate rustc_bitflags;

extern crate "serialize" as rustc_serialize; // used by deriving

Expand Down
14 changes: 12 additions & 2 deletions src/libstd/bitflags.rs → src/librustc_bitflags/lib.rs
Expand Up @@ -8,10 +8,16 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#![crate_name = "rustc_bitflags"]
#![unstable]
#![staged_api]
#![crate_type = "rlib"]
#![no_std]

//! A typesafe bitmask flag generator.

#[cfg(test)] #[macro_use] extern crate std;

/// The `bitflags!` macro generates a `struct` that holds a set of C-style
/// bitmask flags. It is useful for creating typesafe wrappers for C APIs.
///
Expand All @@ -21,6 +27,8 @@
/// # Example
///
/// ```{.rust}
/// #[macro_use] extern crate rustc_bitflags;
///
/// bitflags! {
/// flags Flags: u32 {
/// const FLAG_A = 0b00000001,
Expand All @@ -45,6 +53,8 @@
/// The generated `struct`s can also be extended with type and trait implementations:
///
/// ```{.rust}
/// #[macro_use] extern crate rustc_bitflags;
///
/// use std::fmt;
///
/// bitflags! {
Expand Down Expand Up @@ -273,8 +283,8 @@ macro_rules! bitflags {
#[cfg(test)]
#[allow(non_upper_case_globals)]
mod tests {
use hash::{self, SipHasher};
use option::Option::{Some, None};
use std::hash::{self, SipHasher};
use std::option::Option::{Some, None};

bitflags! {
#[doc = "> The first principle is that you must not fool yourself — and"]
Expand Down
1 change: 1 addition & 0 deletions src/librustc_llvm/lib.rs
Expand Up @@ -28,6 +28,7 @@
#![allow(unknown_features)] #![feature(int_uint)]

extern crate libc;
#[macro_use] #[no_link] extern crate rustc_bitflags;

pub use self::OtherAttribute::*;
pub use self::SpecialAttribute::*;
Expand Down
1 change: 1 addition & 0 deletions src/librustc_resolve/lib.rs
Expand Up @@ -23,6 +23,7 @@

#[macro_use] extern crate log;
#[macro_use] extern crate syntax;
#[macro_use] #[no_link] extern crate rustc_bitflags;

extern crate rustc;

Expand Down
7 changes: 3 additions & 4 deletions src/libstd/lib.rs
Expand Up @@ -111,7 +111,7 @@
#![feature(box_syntax)]
#![feature(old_impl_check)]
#![feature(optin_builtin_traits)]
#![allow(unknown_features)] #![feature(int_uint)]
#![feature(int_uint)]

// Don't link to std. We are std.
#![no_std]
Expand All @@ -136,6 +136,8 @@ extern crate alloc;
extern crate unicode;
extern crate libc;

#[macro_use] #[no_link] extern crate rustc_bitflags;

// Make std testable by not duplicating lang items. See #2912
#[cfg(test)] extern crate "std" as realstd;
#[cfg(test)] pub use realstd::marker;
Expand Down Expand Up @@ -181,9 +183,6 @@ pub use unicode::char;
#[macro_use]
mod macros;

#[macro_use]
pub mod bitflags;

mod rtdeps;

/* The Prelude. */
Expand Down
1 change: 1 addition & 0 deletions src/libsyntax/lib.rs
Expand Up @@ -35,6 +35,7 @@ extern crate serialize;
extern crate term;
extern crate libc;
#[macro_use] extern crate log;
#[macro_use] #[no_link] extern crate rustc_bitflags;

extern crate "serialize" as rustc_serialize; // used by deriving

Expand Down

0 comments on commit 34fa70f

Please sign in to comment.