//! OS-specific functionality.

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

pub mod raw;

// # Important platforms

// We always want to show documentation for the most important platforms,
// so these are handled specially here.
//
// FIXME: On certain platforms compilation errors (due to empty `libc`),
// prevent this, so we substitute an unstable empty module.
#[cfg(doc)]
cfg_select! {
    any(
        all(target_arch = "wasm32", not(target_os = "wasi")),
        all(target_vendor = "fortanix", target_env = "sgx")
    ) => {
        #[unstable(issue = "none", feature = "std_internals")]
        pub mod darwin {}

        #[unstable(issue = "none", feature = "std_internals")]
        pub mod unix {}

        #[unstable(issue = "none", feature = "std_internals")]
        pub mod linux {}

        #[unstable(issue = "none", feature = "std_internals")]
        pub mod wasi {}

        #[unstable(issue = "none", feature = "std_internals")]
        pub mod windows {}
    }
    _ => {
        // important platforms
        pub mod darwin;
        pub mod linux;
        pub mod unix;
        pub mod wasi;
        pub mod wasip2;
        pub mod windows;
    }
}
#[cfg(not(doc))] // to prevent double module declarations
cfg_select! {
    target_family = "unix" => {
        pub mod unix;
        #[cfg(target_vendor = "apple")]
        pub mod darwin;
        #[cfg(target_os = "linux")]
        pub mod linux;
    }
    target_family = "wasm" => {
        #[cfg(any(target_env = "p1", target_env = "p2"))]
        pub mod wasi;
        #[cfg(target_env = "p2")]
        pub mod wasip2;
    }
    target_family = "windows" => {
        pub mod windows;
    }
    _ => { /* handled below */ }
}

// # Special modules

#[cfg(any(
    unix,
    target_os = "hermit",
    target_os = "trusty",
    target_os = "wasi",
    target_os = "motor",
    doc
))]
pub mod fd;

#[cfg(any(target_os = "linux", target_os = "android", target_os = "cygwin", doc))]
mod net;

// # Ordinary platforms
// `cfg(doc)` not handled specially

#[cfg(target_os = "aix")]
pub mod aix;
#[cfg(target_os = "android")]
pub mod android;
#[cfg(target_os = "cygwin")]
pub mod cygwin;
#[cfg(target_os = "dragonfly")]
pub mod dragonfly;
#[cfg(target_os = "emscripten")]
pub mod emscripten;
#[cfg(target_os = "espidf")]
pub mod espidf;
#[cfg(all(target_vendor = "fortanix", target_env = "sgx"))]
pub mod fortanix_sgx;
#[cfg(target_os = "freebsd")]
pub mod freebsd;
#[cfg(target_os = "fuchsia")]
pub mod fuchsia;
#[cfg(target_os = "haiku")]
pub mod haiku;
#[cfg(target_os = "hermit")]
pub mod hermit;
#[cfg(target_os = "horizon")]
pub mod horizon;
#[cfg(target_os = "hurd")]
pub mod hurd;
#[cfg(target_os = "illumos")]
pub mod illumos;
#[cfg(target_os = "ios")]
pub mod ios;
#[cfg(target_os = "l4re")]
pub mod l4re;
#[cfg(target_os = "macos")]
pub mod macos;
#[cfg(target_os = "motor")]
pub mod motor;
#[cfg(target_os = "netbsd")]
pub mod netbsd;
#[cfg(any(target_os = "nto", target_os = "qnx"))]
pub mod nto;
#[cfg(target_os = "nuttx")]
pub mod nuttx;
#[cfg(target_os = "openbsd")]
pub mod openbsd;
#[cfg(target_os = "redox")]
pub mod redox;
#[cfg(target_os = "rtems")]
pub mod rtems;
#[cfg(target_os = "solaris")]
pub mod solaris;
#[cfg(target_os = "solid_asp3")]
pub mod solid;
#[cfg(target_os = "trusty")]
pub mod trusty;
#[cfg(target_os = "uefi")]
pub mod uefi;
#[cfg(target_os = "vita")]
pub mod vita;
#[cfg(target_os = "vxworks")]
pub mod vxworks;
#[cfg(target_os = "xous")]
pub mod xous;
