| include(FindPackageHandleStandardArgs) |
| |
| # Utilize pkg-config if available to check for modules |
| find_package(PkgConfig QUIET) |
| if(PKG_CONFIG_FOUND) |
| pkg_check_modules(GSSAPI QUIET krb5-gssapi) |
| pkg_check_modules(KERBEROS QUIET krb5) |
| endif() |
| |
| # Use pkg-config or attempt to manually locate |
| if(GSSAPI_FOUND AND KERBEROS_FOUND) |
| set(GSSAPI_INCLUDE_DIR ${GSSAPI_INCLUDEDIR}) |
| mark_as_advanced(GSSAPI_INCLUDEDIR GSSAPI_INCLUDE_DIR GSSAPI_LIBRARIES) |
| set(KERBEROS_INCLUDE_DIR ${KERBEROS_INCLUDEDIR}) |
| mark_as_advanced(KERBEROS_INCLUDEDIR KERBEROS_INCLUDE_DIR KERBEROS_LIBRARIES) |
| else() |
| # Setup the hints and patch for the Kerberos SDK location |
| set(_KERBEROS_ROOT_PATHS "${PROJECT_SOURCE_DIR}/lib/kerberos/") |
| set(_KERBEROS_ROOT_HINTS ${KERBEROS_ROOT_DIR} $ENV{KERBEROS_ROOT_DIR} |
| $ENV{KERBEROS_ROOT_DIR}/MIT/Kerberos) |
| if(WIN32) |
| if(CMAKE_CL_64) |
| set(_KERBEROS_SDK_PROGRAMFILES "$ENV{PROGRAMW6432}") |
| else() |
| set(_PF86 "PROGRAMFILES(X86)") |
| set(_KERBEROS_SDK_PROGRAMFILES "$ENV{${_PF86}}") |
| endif() |
| set(_KERBEROS_SDK "MIT/Kerberos") |
| set(_KERBEROS_ROOT_PATHS "${_KERBEROS_ROOT_PATHS}" |
| "${_KERBEROS_SDK_PROGRAMFILES}/${_KERBEROS_SDK}") |
| endif() |
| set(_KERBEROS_ROOT_HINTS_AND_PATHS |
| HINTS ${_KERBEROS_ROOT_HINTS} |
| PATHS ${_KERBEROS_ROOT_PATHS}) |
| |
| # Locate GSSAPI |
| find_path(GSSAPI_INCLUDE_DIR |
| NAMES gssapi/gssapi.h |
| HINTS ${_KERBEROS_INCLUDEDIR} ${_KERBEROS_ROOT_HINTS_AND_PATHS} |
| PATH_SUFFIXES include) |
| find_library(GSSAPI_LIBRARIES |
| NAMES gssapi_krb5 gssapi32 gssapi64 |
| HINTS ${_KERBEROS_LIBDIR} ${_KERBEROS_ROOT_HINTS_AND_PATHS} |
| PATH_SUFFIXES lib lib/i386 lib/amd64) |
| mark_as_advanced(GSSAPI_INCLUDE_DIR GSSAPI_LIBRARIES) |
| |
| # Locate Kerberos |
| find_path(KERBEROS_INCLUDE_DIR |
| NAMES krb5.h |
| HINTS ${_KERBEROS_INCLUDEDIR} ${_KERBEROS_ROOT_HINTS_AND_PATHS} |
| PATH_SUFFIXES include) |
| find_library(KERBEROS_LIBRARIES |
| NAMES krb5 libkrb5 krb5_32 krb5_64 |
| HINTS ${_KERBEROS_LIBDIR} ${_KERBEROS_ROOT_HINTS_AND_PATHS} |
| PATH_SUFFIXES lib lib/i386 lib/amd64) |
| mark_as_advanced(KERBEROS_INCLUDE_DIR KERBEROS_LIBRARIES) |
| endif() |
| |
| # Set the fail message appropriately for OS |
| if(NOT WIN32) |
| set(_GSSAPI_LIBRARY "gssapi_krb5") |
| set(_KERBEROS_LIBRARY "krb5") |
| else() |
| if(CMAKE_CL_64) |
| set(_GSSAPI_LIBRARY "gssapi64") |
| set(_KERBEROS_LIBRARY "krb5_64") |
| else() |
| set(_GSSAPI_LIBRARY "gssapi32") |
| set(_KERBEROS_LIBRARY "krb5_32") |
| endif() |
| endif() |
| set(KERBERBOS_FAIL_MESSAGE "Could NOT find ${_GSSAPI_LIBRARY} and/or ${_KERBEROS_LIBRARY}, try to set the path to the Kerberos root folder in the system variable KERBEROS_ROOT_DIR") |
| |
| # Determine if Kerberos was fully located (GSSAPI dependent) |
| set(KERBEROS_INCLUDE_DIR ${KERBEROS_INCLUDE_DIR} ${GSSAPI_INCLUDE_DIR}) |
| set(KERBEROS_LIBRARIES ${KERBEROS_LIBRARIES} ${GSSAPI_LIBRARIES}) |
| message(STATUS "Kerberos: ${KERBEROS_INCLUDE_DIR} ${KERBEROS_LIBRARIES}") |
| find_package_handle_standard_args(Kerberos |
| ${KERBERBOS_FAIL_MESSAGE} |
| KERBEROS_LIBRARIES |
| KERBEROS_INCLUDE_DIR) |