| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- # FindPAM.cmake - Find PAM (Pluggable Authentication Modules) library
- #
- # This module defines:
- # PAM_FOUND - True if PAM is found
- # PAM_INCLUDE_DIRS - Include directories for PAM
- # PAM_LIBRARIES - Libraries to link against
- # PAM_VERSION - Version of PAM (if available)
- # Try to find PAM using pkg-config first
- find_package(PkgConfig QUIET)
- if(PKG_CONFIG_FOUND)
- pkg_check_modules(PAM QUIET pam)
- endif()
- # If pkg-config didn't find it, try manual search
- if(NOT PAM_FOUND)
- # Find the header file
- find_path(PAM_INCLUDE_DIR
- NAMES security/pam_appl.h pam/pam_appl.h
- PATHS
- /usr/include
- /usr/local/include
- /opt/local/include
- /sw/include
- DOC "PAM include directory"
- )
- # Find the library
- find_library(PAM_LIBRARY
- NAMES pam libpam
- PATHS
- /usr/lib
- /usr/local/lib
- /opt/local/lib
- /sw/lib
- /usr/lib/x86_64-linux-gnu
- /usr/lib/aarch64-linux-gnu
- /usr/lib/arm-linux-gnueabihf
- DOC "PAM library"
- )
- # Set the variables
- if(PAM_INCLUDE_DIR AND PAM_LIBRARY)
- set(PAM_FOUND TRUE)
- set(PAM_INCLUDE_DIRS ${PAM_INCLUDE_DIR})
- set(PAM_LIBRARIES ${PAM_LIBRARY})
- endif()
- endif()
- # Try to get version information
- if(PAM_FOUND)
- # Try to extract version from header
- if(EXISTS "${PAM_INCLUDE_DIRS}/security/pam_appl.h")
- file(READ "${PAM_INCLUDE_DIRS}/security/pam_appl.h" PAM_HEADER_CONTENT)
- string(REGEX MATCH "PAM_VERSION_MAJOR[ ]+([0-9]+)" PAM_VERSION_MAJOR_MATCH "${PAM_HEADER_CONTENT}")
- string(REGEX MATCH "PAM_VERSION_MINOR[ ]+([0-9]+)" PAM_VERSION_MINOR_MATCH "${PAM_HEADER_CONTENT}")
- string(REGEX MATCH "PAM_VERSION_PATCH[ ]+([0-9]+)" PAM_VERSION_PATCH_MATCH "${PAM_HEADER_CONTENT}")
- if(PAM_VERSION_MAJOR_MATCH AND PAM_VERSION_MINOR_MATCH AND PAM_VERSION_PATCH_MATCH)
- string(REGEX REPLACE "PAM_VERSION_MAJOR[ ]+([0-9]+)" "\\1" PAM_VERSION_MAJOR "${PAM_VERSION_MAJOR_MATCH}")
- string(REGEX REPLACE "PAM_VERSION_MINOR[ ]+([0-9]+)" "\\1" PAM_VERSION_MINOR "${PAM_VERSION_MINOR_MATCH}")
- string(REGEX REPLACE "PAM_VERSION_PATCH[ ]+([0-9]+)" "\\1" PAM_VERSION_PATCH "${PAM_VERSION_PATCH_MATCH}")
- set(PAM_VERSION "${PAM_VERSION_MAJOR}.${PAM_VERSION_MINOR}.${PAM_VERSION_PATCH}")
- endif()
- endif()
- # Fallback: try to get version from pkg-config
- if(NOT PAM_VERSION AND PKG_CONFIG_FOUND)
- pkg_get_variable(PAM_VERSION pam version)
- endif()
- # If still no version, set a default
- if(NOT PAM_VERSION)
- set(PAM_VERSION "Unknown")
- endif()
- endif()
- # Handle the QUIETLY and REQUIRED arguments
- include(FindPackageHandleStandardArgs)
- find_package_handle_standard_args(PAM
- REQUIRED_VARS PAM_LIBRARIES PAM_INCLUDE_DIRS
- VERSION_VAR PAM_VERSION
- )
- # Create imported target if found
- if(PAM_FOUND AND NOT TARGET PAM::PAM)
- add_library(PAM::PAM UNKNOWN IMPORTED)
- set_target_properties(PAM::PAM PROPERTIES
- IMPORTED_LOCATION "${PAM_LIBRARIES}"
- INTERFACE_INCLUDE_DIRECTORIES "${PAM_INCLUDE_DIRS}"
- )
- endif()
- # Mark variables as advanced
- mark_as_advanced(PAM_INCLUDE_DIR PAM_LIBRARY)
|