Blame cmake/Modules/FindGSSAPI.cmake

Packit ae9e2a
# - Try to find GSSAPI
Packit ae9e2a
# Once done this will define
Packit ae9e2a
#
Packit ae9e2a
#  KRB5_CONFIG - Path to krb5-config
Packit ae9e2a
#  GSSAPI_ROOT_DIR - Set this variable to the root installation of GSSAPI
Packit ae9e2a
#
Packit ae9e2a
# Read-Only variables:
Packit ae9e2a
#  GSSAPI_FLAVOR_MIT - set to TURE if MIT Kerberos has been found
Packit ae9e2a
#  GSSAPI_FLAVOR_HEIMDAL - set to TRUE if Heimdal Keberos has been found
Packit ae9e2a
#  GSSAPI_FOUND - system has GSSAPI
Packit ae9e2a
#  GSSAPI_INCLUDE_DIR - the GSSAPI include directory
Packit ae9e2a
#  GSSAPI_LIBRARIES - Link these to use GSSAPI
Packit ae9e2a
#  GSSAPI_DEFINITIONS - Compiler switches required for using GSSAPI
Packit ae9e2a
#
Packit ae9e2a
#=============================================================================
Packit ae9e2a
#  Copyright (c) 2013 Andreas Schneider <asn@cryptomilk.org>
Packit ae9e2a
#
Packit ae9e2a
#  Distributed under the OSI-approved BSD License (the "License");
Packit ae9e2a
#  see accompanying file Copyright.txt for details.
Packit ae9e2a
#
Packit ae9e2a
#  This software is distributed WITHOUT ANY WARRANTY; without even the
Packit ae9e2a
#  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Packit ae9e2a
#  See the License for more information.
Packit ae9e2a
#=============================================================================
Packit ae9e2a
#
Packit ae9e2a
Packit ae9e2a
find_path(GSSAPI_ROOT_DIR
Packit ae9e2a
    NAMES
Packit ae9e2a
        include/gssapi.h
Packit ae9e2a
        include/gssapi/gssapi.h
Packit ae9e2a
    HINTS
Packit ae9e2a
        ${_GSSAPI_ROOT_HINTS}
Packit ae9e2a
    PATHS
Packit ae9e2a
        ${_GSSAPI_ROOT_PATHS}
Packit ae9e2a
)
Packit ae9e2a
mark_as_advanced(GSSAPI_ROOT_DIR)
Packit ae9e2a
Packit ae9e2a
if (UNIX)
Packit ae9e2a
    find_program(KRB5_CONFIG
Packit ae9e2a
        NAMES
Packit ae9e2a
            krb5-config
Packit ae9e2a
        PATHS
Packit ae9e2a
            ${GSSAPI_ROOT_DIR}/bin
Packit ae9e2a
            /opt/local/bin)
Packit ae9e2a
    mark_as_advanced(KRB5_CONFIG)
Packit ae9e2a
Packit ae9e2a
    if (KRB5_CONFIG)
Packit ae9e2a
        # Check if we have MIT KRB5
Packit ae9e2a
        execute_process(
Packit ae9e2a
            COMMAND
Packit ae9e2a
                ${KRB5_CONFIG} --vendor
Packit ae9e2a
            RESULT_VARIABLE
Packit ae9e2a
                _GSSAPI_VENDOR_RESULT
Packit ae9e2a
            OUTPUT_VARIABLE
Packit ae9e2a
                _GSSAPI_VENDOR_STRING)
Packit ae9e2a
Packit ae9e2a
        if (_GSSAPI_VENDOR_STRING MATCHES ".*Massachusetts.*")
Packit ae9e2a
            set(GSSAPI_FLAVOR_MIT TRUE)
Packit ae9e2a
        else()
Packit ae9e2a
            execute_process(
Packit ae9e2a
                COMMAND
Packit ae9e2a
                    ${KRB5_CONFIG} --libs gssapi
Packit ae9e2a
                RESULT_VARIABLE
Packit ae9e2a
                    _GSSAPI_LIBS_RESULT
Packit ae9e2a
                OUTPUT_VARIABLE
Packit ae9e2a
                    _GSSAPI_LIBS_STRING)
Packit ae9e2a
Packit ae9e2a
            if (_GSSAPI_LIBS_STRING MATCHES ".*roken.*")
Packit ae9e2a
                set(GSSAPI_FLAVOR_HEIMDAL TRUE)
Packit ae9e2a
            endif()
Packit ae9e2a
        endif()
Packit ae9e2a
Packit ae9e2a
        # Get the include dir
Packit ae9e2a
        execute_process(
Packit ae9e2a
            COMMAND
Packit ae9e2a
                ${KRB5_CONFIG} --cflags gssapi
Packit ae9e2a
            RESULT_VARIABLE
Packit ae9e2a
                _GSSAPI_INCLUDE_RESULT
Packit ae9e2a
            OUTPUT_VARIABLE
Packit ae9e2a
                _GSSAPI_INCLUDE_STRING)
Packit ae9e2a
        string(REGEX REPLACE "(\r?\n)+$" "" _GSSAPI_INCLUDE_STRING "${_GSSAPI_INCLUDE_STRING}")
Packit ae9e2a
        string(REGEX REPLACE " *-I" "" _GSSAPI_INCLUDEDIR "${_GSSAPI_INCLUDE_STRING}")
Packit ae9e2a
    endif()
Packit ae9e2a
Packit ae9e2a
    if (NOT GSSAPI_FLAVOR_MIT AND NOT GSSAPI_FLAVOR_HEIMDAL)
Packit ae9e2a
        # Check for HEIMDAL
Packit ae9e2a
        find_package(PkgConfig)
Packit ae9e2a
        if (PKG_CONFIG_FOUND)
Packit ae9e2a
            pkg_check_modules(_GSSAPI heimdal-gssapi)
Packit ae9e2a
        endif (PKG_CONFIG_FOUND)
Packit ae9e2a
Packit ae9e2a
        if (_GSSAPI_FOUND)
Packit ae9e2a
            set(GSSAPI_FLAVOR_HEIMDAL TRUE)
Packit ae9e2a
        else()
Packit ae9e2a
            find_path(_GSSAPI_ROKEN
Packit ae9e2a
                NAMES
Packit ae9e2a
                    roken.h
Packit ae9e2a
                PATHS
Packit ae9e2a
                    ${GSSAPI_ROOT_DIR}/include
Packit ae9e2a
                    ${_GSSAPI_INCLUDEDIR})
Packit ae9e2a
            if (_GSSAPI_ROKEN)
Packit ae9e2a
                set(GSSAPI_FLAVOR_HEIMDAL TRUE)
Packit ae9e2a
            endif()
Packit ae9e2a
        endif ()
Packit ae9e2a
    endif()
Packit ae9e2a
endif (UNIX)
Packit ae9e2a
Packit ae9e2a
find_path(GSSAPI_INCLUDE_DIR
Packit ae9e2a
    NAMES
Packit ae9e2a
        gssapi.h
Packit ae9e2a
        gssapi/gssapi.h
Packit ae9e2a
    PATHS
Packit ae9e2a
        ${GSSAPI_ROOT_DIR}/include
Packit ae9e2a
        ${_GSSAPI_INCLUDEDIR}
Packit ae9e2a
)
Packit ae9e2a
Packit ae9e2a
if (GSSAPI_FLAVOR_MIT)
Packit ae9e2a
    find_library(GSSAPI_LIBRARY
Packit ae9e2a
        NAMES
Packit ae9e2a
            gssapi_krb5
Packit ae9e2a
        PATHS
Packit ae9e2a
            ${GSSAPI_ROOT_DIR}/lib
Packit ae9e2a
            ${_GSSAPI_LIBDIR}
Packit ae9e2a
    )
Packit ae9e2a
Packit ae9e2a
    find_library(KRB5_LIBRARY
Packit ae9e2a
        NAMES
Packit ae9e2a
            krb5
Packit ae9e2a
        PATHS
Packit ae9e2a
            ${GSSAPI_ROOT_DIR}/lib
Packit ae9e2a
            ${_GSSAPI_LIBDIR}
Packit ae9e2a
    )
Packit ae9e2a
Packit ae9e2a
    find_library(K5CRYPTO_LIBRARY
Packit ae9e2a
        NAMES
Packit ae9e2a
            k5crypto
Packit ae9e2a
        PATHS
Packit ae9e2a
            ${GSSAPI_ROOT_DIR}/lib
Packit ae9e2a
            ${_GSSAPI_LIBDIR}
Packit ae9e2a
    )
Packit ae9e2a
Packit ae9e2a
    find_library(COM_ERR_LIBRARY
Packit ae9e2a
        NAMES
Packit ae9e2a
            com_err
Packit ae9e2a
        PATHS
Packit ae9e2a
            ${GSSAPI_ROOT_DIR}/lib
Packit ae9e2a
            ${_GSSAPI_LIBDIR}
Packit ae9e2a
    )
Packit ae9e2a
Packit ae9e2a
    if (GSSAPI_LIBRARY)
Packit ae9e2a
        set(GSSAPI_LIBRARIES
Packit ae9e2a
            ${GSSAPI_LIBRARIES}
Packit ae9e2a
            ${GSSAPI_LIBRARY}
Packit ae9e2a
        )
Packit ae9e2a
    endif (GSSAPI_LIBRARY)
Packit ae9e2a
Packit ae9e2a
    if (KRB5_LIBRARY)
Packit ae9e2a
        set(GSSAPI_LIBRARIES
Packit ae9e2a
            ${GSSAPI_LIBRARIES}
Packit ae9e2a
            ${KRB5_LIBRARY}
Packit ae9e2a
        )
Packit ae9e2a
    endif (KRB5_LIBRARY)
Packit ae9e2a
Packit ae9e2a
    if (K5CRYPTO_LIBRARY)
Packit ae9e2a
        set(GSSAPI_LIBRARIES
Packit ae9e2a
            ${GSSAPI_LIBRARIES}
Packit ae9e2a
            ${K5CRYPTO_LIBRARY}
Packit ae9e2a
        )
Packit ae9e2a
    endif (K5CRYPTO_LIBRARY)
Packit ae9e2a
Packit ae9e2a
    if (COM_ERR_LIBRARY)
Packit ae9e2a
        set(GSSAPI_LIBRARIES
Packit ae9e2a
            ${GSSAPI_LIBRARIES}
Packit ae9e2a
            ${COM_ERR_LIBRARY}
Packit ae9e2a
        )
Packit ae9e2a
    endif (COM_ERR_LIBRARY)
Packit ae9e2a
endif (GSSAPI_FLAVOR_MIT)
Packit ae9e2a
Packit ae9e2a
if (GSSAPI_FLAVOR_HEIMDAL)
Packit ae9e2a
    find_library(GSSAPI_LIBRARY
Packit ae9e2a
        NAMES
Packit ae9e2a
            gssapi
Packit ae9e2a
        PATHS
Packit ae9e2a
            ${GSSAPI_ROOT_DIR}/lib
Packit ae9e2a
            ${_GSSAPI_LIBDIR}
Packit ae9e2a
    )
Packit ae9e2a
Packit ae9e2a
    find_library(KRB5_LIBRARY
Packit ae9e2a
        NAMES
Packit ae9e2a
            krb5
Packit ae9e2a
        PATHS
Packit ae9e2a
            ${GSSAPI_ROOT_DIR}/lib
Packit ae9e2a
            ${_GSSAPI_LIBDIR}
Packit ae9e2a
    )
Packit ae9e2a
Packit ae9e2a
    find_library(HCRYPTO_LIBRARY
Packit ae9e2a
        NAMES
Packit ae9e2a
            hcrypto
Packit ae9e2a
        PATHS
Packit ae9e2a
            ${GSSAPI_ROOT_DIR}/lib
Packit ae9e2a
            ${_GSSAPI_LIBDIR}
Packit ae9e2a
    )
Packit ae9e2a
Packit ae9e2a
    find_library(COM_ERR_LIBRARY
Packit ae9e2a
        NAMES
Packit ae9e2a
            com_err
Packit ae9e2a
        PATHS
Packit ae9e2a
            ${GSSAPI_ROOT_DIR}/lib
Packit ae9e2a
            ${_GSSAPI_LIBDIR}
Packit ae9e2a
    )
Packit ae9e2a
Packit ae9e2a
    find_library(HEIMNTLM_LIBRARY
Packit ae9e2a
        NAMES
Packit ae9e2a
            heimntlm
Packit ae9e2a
        PATHS
Packit ae9e2a
            ${GSSAPI_ROOT_DIR}/lib
Packit ae9e2a
            ${_GSSAPI_LIBDIR}
Packit ae9e2a
    )
Packit ae9e2a
Packit ae9e2a
    find_library(HX509_LIBRARY
Packit ae9e2a
        NAMES
Packit ae9e2a
            hx509
Packit ae9e2a
        PATHS
Packit ae9e2a
            ${GSSAPI_ROOT_DIR}/lib
Packit ae9e2a
            ${_GSSAPI_LIBDIR}
Packit ae9e2a
    )
Packit ae9e2a
Packit ae9e2a
    find_library(ASN1_LIBRARY
Packit ae9e2a
        NAMES
Packit ae9e2a
            asn1
Packit ae9e2a
        PATHS
Packit ae9e2a
            ${GSSAPI_ROOT_DIR}/lib
Packit ae9e2a
            ${_GSSAPI_LIBDIR}
Packit ae9e2a
    )
Packit ae9e2a
Packit ae9e2a
    find_library(WIND_LIBRARY
Packit ae9e2a
        NAMES
Packit ae9e2a
            wind
Packit ae9e2a
        PATHS
Packit ae9e2a
            ${GSSAPI_ROOT_DIR}/lib
Packit ae9e2a
            ${_GSSAPI_LIBDIR}
Packit ae9e2a
    )
Packit ae9e2a
Packit ae9e2a
    find_library(ROKEN_LIBRARY
Packit ae9e2a
        NAMES
Packit ae9e2a
            roken
Packit ae9e2a
        PATHS
Packit ae9e2a
            ${GSSAPI_ROOT_DIR}/lib
Packit ae9e2a
            ${_GSSAPI_LIBDIR}
Packit ae9e2a
    )
Packit ae9e2a
Packit ae9e2a
    if (GSSAPI_LIBRARY)
Packit ae9e2a
        set(GSSAPI_LIBRARIES
Packit ae9e2a
            ${GSSAPI_LIBRARIES}
Packit ae9e2a
            ${GSSAPI_LIBRARY}
Packit ae9e2a
        )
Packit ae9e2a
    endif (GSSAPI_LIBRARY)
Packit ae9e2a
Packit ae9e2a
    if (KRB5_LIBRARY)
Packit ae9e2a
        set(GSSAPI_LIBRARIES
Packit ae9e2a
            ${GSSAPI_LIBRARIES}
Packit ae9e2a
            ${KRB5_LIBRARY}
Packit ae9e2a
        )
Packit ae9e2a
    endif (KRB5_LIBRARY)
Packit ae9e2a
Packit ae9e2a
    if (HCRYPTO_LIBRARY)
Packit ae9e2a
        set(GSSAPI_LIBRARIES
Packit ae9e2a
            ${GSSAPI_LIBRARIES}
Packit ae9e2a
            ${HCRYPTO_LIBRARY}
Packit ae9e2a
        )
Packit ae9e2a
    endif (HCRYPTO_LIBRARY)
Packit ae9e2a
Packit ae9e2a
    if (COM_ERR_LIBRARY)
Packit ae9e2a
        set(GSSAPI_LIBRARIES
Packit ae9e2a
            ${GSSAPI_LIBRARIES}
Packit ae9e2a
            ${COM_ERR_LIBRARY}
Packit ae9e2a
        )
Packit ae9e2a
    endif (COM_ERR_LIBRARY)
Packit ae9e2a
Packit ae9e2a
    if (HEIMNTLM_LIBRARY)
Packit ae9e2a
        set(GSSAPI_LIBRARIES
Packit ae9e2a
            ${GSSAPI_LIBRARIES}
Packit ae9e2a
            ${HEIMNTLM_LIBRARY}
Packit ae9e2a
        )
Packit ae9e2a
    endif (HEIMNTLM_LIBRARY)
Packit ae9e2a
Packit ae9e2a
    if (HX509_LIBRARY)
Packit ae9e2a
        set(GSSAPI_LIBRARIES
Packit ae9e2a
            ${GSSAPI_LIBRARIES}
Packit ae9e2a
            ${HX509_LIBRARY}
Packit ae9e2a
        )
Packit ae9e2a
    endif (HX509_LIBRARY)
Packit ae9e2a
Packit ae9e2a
    if (ASN1_LIBRARY)
Packit ae9e2a
        set(GSSAPI_LIBRARIES
Packit ae9e2a
            ${GSSAPI_LIBRARIES}
Packit ae9e2a
            ${ASN1_LIBRARY}
Packit ae9e2a
        )
Packit ae9e2a
    endif (ASN1_LIBRARY)
Packit ae9e2a
Packit ae9e2a
    if (WIND_LIBRARY)
Packit ae9e2a
        set(GSSAPI_LIBRARIES
Packit ae9e2a
            ${GSSAPI_LIBRARIES}
Packit ae9e2a
            ${WIND_LIBRARY}
Packit ae9e2a
        )
Packit ae9e2a
    endif (WIND_LIBRARY)
Packit ae9e2a
Packit ae9e2a
    if (ROKEN_LIBRARY)
Packit ae9e2a
        set(GSSAPI_LIBRARIES
Packit ae9e2a
            ${GSSAPI_LIBRARIES}
Packit ae9e2a
            ${WIND_LIBRARY}
Packit ae9e2a
        )
Packit ae9e2a
    endif (ROKEN_LIBRARY)
Packit ae9e2a
endif (GSSAPI_FLAVOR_HEIMDAL)
Packit ae9e2a
Packit ae9e2a
include(FindPackageHandleStandardArgs)
Packit ae9e2a
find_package_handle_standard_args(GSSAPI DEFAULT_MSG GSSAPI_LIBRARIES GSSAPI_INCLUDE_DIR)
Packit ae9e2a
Packit ae9e2a
if (GSSAPI_INCLUDE_DIRS AND GSSAPI_LIBRARIES)
Packit ae9e2a
    set(GSSAPI_FOUND TRUE)
Packit ae9e2a
endif (GSSAPI_INCLUDE_DIRS AND GSSAPI_LIBRARIES)
Packit ae9e2a
Packit ae9e2a
# show the GSSAPI_INCLUDE_DIRS and GSSAPI_LIBRARIES variables only in the advanced view
Packit ae9e2a
mark_as_advanced(GSSAPI_INCLUDE_DIRS GSSAPI_LIBRARIES)