blob: 9aeaef10ebfbf704fcc1b336057add69f8ad1d3c [file]
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)