view libpam-sys/libpam-sys-impls/src/lib.rs @ 176:0730f5f2ee2a

Turn `libpam-sys-consts` back into `libpam-sys-impls`. This moves the constants into `libpam-sys` and makes `libpam-sys-impls` responsible solely for detecting the current PAM implementation.
author Paul Fisher <paul@pfish.zone>
date Wed, 30 Jul 2025 17:53:31 -0400
parents libpam-sys/libpam-sys-consts/src/lib.rs@e9354e655f38
children
line wrap: on
line source

//! Information about the PAM implementation you're using right now.
//!
//! This module contains constants and values that can be used at build-script,
//! compile, and run time to determine what PAM implementation you're using.
//!
//! ## Always available
//!
//! [`PamImpl::CURRENT`] will tell you what version of PAM you're using.
//! It can be imported in any Rust code, from build scripts to runtime.
//!
//! ## Compile time
//!
//! Use [`enable_pam_impl_cfg`] in your `build.rs` to generate custom `#[cfg]`s
//! for conditional compilation based on PAM implementation.
//!
//! ```
//! // Your package's build.rs:
//!
//! fn main() {
//!     // Also available at libpam_sys::pam_impl::enable_pam_impl_cfg().
//!     libpam_sys_impls::enable_pam_impl_cfg();
//!     // whatever else you do in your build script.
//! }
//! ```
//!
//! This will set the current `pam_impl` as well as registering all known
//! PAM implementations with `rustc-check-cfg` to get cfg-checking.
//!
//! The names that appear in the `cfg` variables are the same as the values
//! in the [`PamImpl`] enum.
//!
//! ```ignore
//! #[cfg(pam_impl = "OpenPam")]
//! fn openpam_specific_func(handle: *const libpam_sys::pam_handle) {
//!     let environ = libpam_sys::pam_getenvlist(handle);
//!     // ...
//!     libpam_sys::openpam_free_envlist()
//! }
//!
//! // This will give you a warning since "UnknownImpl" is not in the cfg.
//! #[cfg(not(pam_impl = "UnknownImpl"))]
//! fn do_something() {
//!     // ...
//! }
//! ```
//!
//! The [`pam_impl_name!`] macro will expand to this same value, currently
#![doc = concat!("`", env!("LIBPAMSYS_IMPL"), "`.")]

mod pam_impl;

#[doc(inline)]
pub use pam_impl::*;