blob: 6481f39241298548a57e57c43b67ccbfc05ab826 [file] [log] [blame]
# ===================================================================
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# ===================================================================
cmake_minimum_required(VERSION 3.12)
set(GSSAPI_FOUND FALSE)
if(DEFINED GSSAPI_ROOT)
get_filename_component(GSSAPI_ROOT "${GSSAPI_ROOT}" REALPATH)
endif()
find_program(KRB5_CONFIG_EXECUTABLE NAMES "krb5-config"
PATH_SUFFIXES "bin" "${CMAKE_INSTALL_BINDIR}")
mark_as_advanced(KRB5_CONFIG_EXECUTABLE)
if("${KRB5_CONFIG_EXECUTABLE}" MATCHES "-NOTFOUND")
message(STATUS "Could NOT find GSSAPI (missing: krb5-config)")
else()
function(_krb5_config _varname _dedup)
execute_process(COMMAND "${KRB5_CONFIG_EXECUTABLE}" ${ARGN} "gssapi"
OUTPUT_VARIABLE output
RESULT_VARIABLE failed)
if(failed)
message(FATAL_ERROR "failed: ${KRB5_CONFIG_EXECUTABLE} ${ARGN} gssapi")
endif()
string(STRIP "${output}" output)
separate_arguments(output)
if(_dedup)
list(REMOVE_DUPLICATES output)
endif()
set(${_varname} ${output} PARENT_SCOPE)
endfunction(_krb5_config)
_krb5_config(GSSAPI_VERSION FALSE --version)
_krb5_config(GSSAPI_INCLUDES TRUE --cflags)
_krb5_config(GSSAPI_LIBRARIES TRUE --libs)
# The version "number" should look like "Kerberos N release X.Y.Z",
# try to extract those numbers first.
list(LENGTH GSSAPI_VERSION len)
if(${len} EQUAL 4)
# Use the second and fourth elements
list(GET GSSAPI_VERSION 1 krb)
list(GET GSSAPI_VERSION 3 rel)
set(GSSAPI_VERSION "${krb}:${rel}")
else()
# It's some other format, join it back
list(JOIN GSSAPI_VERSION " " GSSAPI_VERSION)
endif()
# Filter everything but include paths from --cflags
list(FILTER GSSAPI_INCLUDES INCLUDE REGEX "^-I")
# Figure out the import location. First, try with -L options in the libs.
function(_find_location _variable _filter)
set(tmp ${ARGN})
list(FILTER tmp INCLUDE REGEX "${_filter}")
list(LENGTH tmp len)
if(${len} EQUAL 0)
unset(${_variable} PARENT_SCOPE)
else()
list(GET tmp 0 first)
string(REGEX REPLACE "${_filter}" "" first "${first}")
set(${_variable} "${first}" PARENT_SCOPE)
endif()
endfunction(_find_location)
_find_location(_location "^-L" ${GSSAPI_LIBRARIES})
_find_location(_library "^-l" ${GSSAPI_LIBRARIES})
if(DEFINED _location)
find_library(_imported_location "${_library}"
PATHS "${_location}" NO_DEFAULT_PATH)
else()
find_library(_imported_location "${_library}")
endif()
include(FindPackageHandleStandardArgs)
list(LENGTH GSSAPI_INCLUDES len)
if(${len} EQUAL 0)
# When using default include locations, GSSAPI_INCLUDES may be empty.
find_package_handle_standard_args(GSSAPI
REQUIRED_VARS GSSAPI_LIBRARIES
VERSION_VAR GSSAPI_VERSION)
else()
# Remove option tags from the include paths.
list(TRANSFORM GSSAPI_INCLUDES REPLACE "^-I" "")
find_package_handle_standard_args(GSSAPI
REQUIRED_VARS GSSAPI_LIBRARIES GSSAPI_INCLUDES
VERSION_VAR GSSAPI_VERSION)
endif()
if(GSSAPI_FOUND)
add_library(KRB5::GSSAPI UNKNOWN IMPORTED)
set_target_properties(KRB5::GSSAPI PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${GSSAPI_INCLUDES}"
INTERFACE_LINK_LIBRARIES "${GSSAPI_LIBRARIES}"
IMPORTED_LOCATION "${_imported_location}")
endif(GSSAPI_FOUND)
endif() # krb5-config not found