diff 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 diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpam-sys/libpam-sys-impls/src/lib.rs	Wed Jul 30 17:53:31 2025 -0400
@@ -0,0 +1,53 @@
+//! 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::*;