//! OS-specific functionality.

#![stable(feature = "os", since = "1.0.0")]
#![allow(missing_docs, nonstandard_style, missing_debug_implementations)]

cfg_if::cfg_if! {
    if #[cfg(rustdoc)] {

        // When documenting libstd we want to show unix/windows/linux modules as
        // these are the "main modules" that are used across platforms. This
        // should help show platform-specific functionality in a hopefully
        // cross-platform way in the documentation

        #[stable(feature = "rust1", since = "1.0.0")]
        pub use crate::sys::unix_ext as unix;

        #[stable(feature = "rust1", since = "1.0.0")]
        pub use crate::sys::windows_ext as windows;

        #[doc(cfg(target_os = "linux"))]
        pub mod linux;
    } else {

        // If we're not documenting libstd then we just expose the main modules
        // as we otherwise would.

        #[cfg(any(target_os = "redox", unix, target_os = "vxworks"))]
        #[stable(feature = "rust1", since = "1.0.0")]
        pub use crate::sys::ext as unix;

        #[cfg(windows)]
        #[stable(feature = "rust1", since = "1.0.0")]
        pub use crate::sys::ext as windows;

        #[cfg(any(target_os = "linux", target_os = "l4re"))]
        pub mod linux;

    }
}

#[cfg(target_os = "android")]    pub mod android;
#[cfg(target_os = "dragonfly")]  pub mod dragonfly;
#[cfg(target_os = "freebsd")]    pub mod freebsd;
#[cfg(target_os = "haiku")]      pub mod haiku;
#[cfg(target_os = "ios")]        pub mod ios;
#[cfg(target_os = "macos")]      pub mod macos;
#[cfg(target_os = "netbsd")]     pub mod netbsd;
#[cfg(target_os = "openbsd")]    pub mod openbsd;
#[cfg(target_os = "solaris")]    pub mod solaris;
#[cfg(target_os = "emscripten")] pub mod emscripten;
#[cfg(target_os = "fuchsia")]    pub mod fuchsia;
#[cfg(target_os = "hermit")]     pub mod hermit;
#[cfg(target_os = "redox")]      pub mod redox;
#[cfg(target_os = "wasi")]       pub mod wasi;
#[cfg(target_os = "vxworks")]    pub mod vxworks;
#[cfg(all(target_vendor = "fortanix", target_env = "sgx"))] pub mod fortanix_sgx;

pub mod raw;
