1*6236dae4SAndroid Build Coastguard Worker#*************************************************************************** 2*6236dae4SAndroid Build Coastguard Worker# _ _ ____ _ 3*6236dae4SAndroid Build Coastguard Worker# Project ___| | | | _ \| | 4*6236dae4SAndroid Build Coastguard Worker# / __| | | | |_) | | 5*6236dae4SAndroid Build Coastguard Worker# | (__| |_| | _ <| |___ 6*6236dae4SAndroid Build Coastguard Worker# \___|\___/|_| \_\_____| 7*6236dae4SAndroid Build Coastguard Worker# 8*6236dae4SAndroid Build Coastguard Worker# Copyright (C) Daniel Stenberg, <[email protected]>, et al. 9*6236dae4SAndroid Build Coastguard Worker# 10*6236dae4SAndroid Build Coastguard Worker# This software is licensed as described in the file COPYING, which 11*6236dae4SAndroid Build Coastguard Worker# you should have received as part of this distribution. The terms 12*6236dae4SAndroid Build Coastguard Worker# are also available at https://curl.se/docs/copyright.html. 13*6236dae4SAndroid Build Coastguard Worker# 14*6236dae4SAndroid Build Coastguard Worker# You may opt to use, copy, modify, merge, publish, distribute and/or sell 15*6236dae4SAndroid Build Coastguard Worker# copies of the Software, and permit persons to whom the Software is 16*6236dae4SAndroid Build Coastguard Worker# furnished to do so, under the terms of the COPYING file. 17*6236dae4SAndroid Build Coastguard Worker# 18*6236dae4SAndroid Build Coastguard Worker# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 19*6236dae4SAndroid Build Coastguard Worker# KIND, either express or implied. 20*6236dae4SAndroid Build Coastguard Worker# 21*6236dae4SAndroid Build Coastguard Worker# SPDX-License-Identifier: curl 22*6236dae4SAndroid Build Coastguard Worker# 23*6236dae4SAndroid Build Coastguard Worker########################################################################### 24*6236dae4SAndroid Build Coastguard Worker# Find the GSS Kerberos library 25*6236dae4SAndroid Build Coastguard Worker# 26*6236dae4SAndroid Build Coastguard Worker# Input variables: 27*6236dae4SAndroid Build Coastguard Worker# 28*6236dae4SAndroid Build Coastguard Worker# - `GSS_ROOT_DIR`: Set this variable to the root installation of GSS. (also supported as environment) 29*6236dae4SAndroid Build Coastguard Worker# 30*6236dae4SAndroid Build Coastguard Worker# Result variables: 31*6236dae4SAndroid Build Coastguard Worker# 32*6236dae4SAndroid Build Coastguard Worker# - `GSS_FOUND`: System has the Heimdal library. 33*6236dae4SAndroid Build Coastguard Worker# - `GSS_FLAVOUR`: "GNU", "MIT" or "Heimdal" if anything found. 34*6236dae4SAndroid Build Coastguard Worker# - `GSS_INCLUDE_DIRS`: The GSS include directories. 35*6236dae4SAndroid Build Coastguard Worker# - `GSS_LIBRARIES`: The GSS library names. 36*6236dae4SAndroid Build Coastguard Worker# - `GSS_LIBRARY_DIRS`: The GSS library directories. 37*6236dae4SAndroid Build Coastguard Worker# - `GSS_LDFLAGS`: Required linker flags. 38*6236dae4SAndroid Build Coastguard Worker# - `GSS_CFLAGS`: Required compiler flags. 39*6236dae4SAndroid Build Coastguard Worker# - `GSS_VERSION`: This is set to version advertised by pkg-config or read from manifest. 40*6236dae4SAndroid Build Coastguard Worker# In case the library is found but no version info available it is set to "unknown" 41*6236dae4SAndroid Build Coastguard Worker 42*6236dae4SAndroid Build Coastguard Workerset(_gnu_modname "gss") 43*6236dae4SAndroid Build Coastguard Workerset(_mit_modname "mit-krb5-gssapi") 44*6236dae4SAndroid Build Coastguard Workerset(_heimdal_modname "heimdal-gssapi") 45*6236dae4SAndroid Build Coastguard Worker 46*6236dae4SAndroid Build Coastguard Workerinclude(CheckIncludeFile) 47*6236dae4SAndroid Build Coastguard Workerinclude(CheckIncludeFiles) 48*6236dae4SAndroid Build Coastguard Workerinclude(CheckTypeSize) 49*6236dae4SAndroid Build Coastguard Worker 50*6236dae4SAndroid Build Coastguard Workerset(_gss_root_hints 51*6236dae4SAndroid Build Coastguard Worker "${GSS_ROOT_DIR}" 52*6236dae4SAndroid Build Coastguard Worker "$ENV{GSS_ROOT_DIR}" 53*6236dae4SAndroid Build Coastguard Worker) 54*6236dae4SAndroid Build Coastguard Worker 55*6236dae4SAndroid Build Coastguard Worker# Try to find library using system pkg-config if user did not specify root dir 56*6236dae4SAndroid Build Coastguard Workerif(NOT GSS_ROOT_DIR AND NOT "$ENV{GSS_ROOT_DIR}") 57*6236dae4SAndroid Build Coastguard Worker if(CURL_USE_PKGCONFIG) 58*6236dae4SAndroid Build Coastguard Worker find_package(PkgConfig QUIET) 59*6236dae4SAndroid Build Coastguard Worker pkg_search_module(_GSS ${_gnu_modname} ${_mit_modname} ${_heimdal_modname}) 60*6236dae4SAndroid Build Coastguard Worker list(APPEND _gss_root_hints "${_GSS_PREFIX}") 61*6236dae4SAndroid Build Coastguard Worker endif() 62*6236dae4SAndroid Build Coastguard Worker if(WIN32) 63*6236dae4SAndroid Build Coastguard Worker list(APPEND _gss_root_hints "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MIT\\Kerberos;InstallDir]") 64*6236dae4SAndroid Build Coastguard Worker endif() 65*6236dae4SAndroid Build Coastguard Workerendif() 66*6236dae4SAndroid Build Coastguard Worker 67*6236dae4SAndroid Build Coastguard Workerif(NOT _GSS_FOUND) # Not found by pkg-config. Let us take more traditional approach. 68*6236dae4SAndroid Build Coastguard Worker find_file(_gss_configure_script 69*6236dae4SAndroid Build Coastguard Worker NAMES 70*6236dae4SAndroid Build Coastguard Worker "krb5-config" 71*6236dae4SAndroid Build Coastguard Worker HINTS 72*6236dae4SAndroid Build Coastguard Worker ${_gss_root_hints} 73*6236dae4SAndroid Build Coastguard Worker PATH_SUFFIXES 74*6236dae4SAndroid Build Coastguard Worker "bin" 75*6236dae4SAndroid Build Coastguard Worker NO_CMAKE_PATH 76*6236dae4SAndroid Build Coastguard Worker NO_CMAKE_ENVIRONMENT_PATH 77*6236dae4SAndroid Build Coastguard Worker ) 78*6236dae4SAndroid Build Coastguard Worker 79*6236dae4SAndroid Build Coastguard Worker # If not found in user-supplied directories, maybe system knows better 80*6236dae4SAndroid Build Coastguard Worker find_file(_gss_configure_script 81*6236dae4SAndroid Build Coastguard Worker NAMES 82*6236dae4SAndroid Build Coastguard Worker "krb5-config" 83*6236dae4SAndroid Build Coastguard Worker PATH_SUFFIXES 84*6236dae4SAndroid Build Coastguard Worker "bin" 85*6236dae4SAndroid Build Coastguard Worker ) 86*6236dae4SAndroid Build Coastguard Worker 87*6236dae4SAndroid Build Coastguard Worker if(_gss_configure_script) 88*6236dae4SAndroid Build Coastguard Worker execute_process( 89*6236dae4SAndroid Build Coastguard Worker COMMAND ${_gss_configure_script} "--cflags" "gssapi" 90*6236dae4SAndroid Build Coastguard Worker OUTPUT_VARIABLE _GSS_CFLAGS 91*6236dae4SAndroid Build Coastguard Worker RESULT_VARIABLE _gss_configure_failed 92*6236dae4SAndroid Build Coastguard Worker OUTPUT_STRIP_TRAILING_WHITESPACE 93*6236dae4SAndroid Build Coastguard Worker ) 94*6236dae4SAndroid Build Coastguard Worker message(STATUS "FindGSS CFLAGS: ${_GSS_CFLAGS}") 95*6236dae4SAndroid Build Coastguard Worker if(NOT _gss_configure_failed) # 0 means success 96*6236dae4SAndroid Build Coastguard Worker # Should also work in an odd case when multiple directories are given 97*6236dae4SAndroid Build Coastguard Worker string(STRIP "${_GSS_CFLAGS}" _GSS_CFLAGS) 98*6236dae4SAndroid Build Coastguard Worker string(REGEX REPLACE " +-I" ";" _GSS_CFLAGS "${_GSS_CFLAGS}") 99*6236dae4SAndroid Build Coastguard Worker string(REGEX REPLACE " +-([^I][^ \\t;]*)" ";-\\1" _GSS_CFLAGS "${_GSS_CFLAGS}") 100*6236dae4SAndroid Build Coastguard Worker 101*6236dae4SAndroid Build Coastguard Worker foreach(_flag IN LISTS _GSS_CFLAGS) 102*6236dae4SAndroid Build Coastguard Worker if(_flag MATCHES "^-I.*") 103*6236dae4SAndroid Build Coastguard Worker string(REGEX REPLACE "^-I" "" _val "${_flag}") 104*6236dae4SAndroid Build Coastguard Worker list(APPEND _GSS_INCLUDE_DIRS "${_val}") 105*6236dae4SAndroid Build Coastguard Worker else() 106*6236dae4SAndroid Build Coastguard Worker list(APPEND _GSS_CFLAGS "${_flag}") 107*6236dae4SAndroid Build Coastguard Worker endif() 108*6236dae4SAndroid Build Coastguard Worker endforeach() 109*6236dae4SAndroid Build Coastguard Worker endif() 110*6236dae4SAndroid Build Coastguard Worker 111*6236dae4SAndroid Build Coastguard Worker execute_process( 112*6236dae4SAndroid Build Coastguard Worker COMMAND ${_gss_configure_script} "--libs" "gssapi" 113*6236dae4SAndroid Build Coastguard Worker OUTPUT_VARIABLE _gss_lib_flags 114*6236dae4SAndroid Build Coastguard Worker RESULT_VARIABLE _gss_configure_failed 115*6236dae4SAndroid Build Coastguard Worker OUTPUT_STRIP_TRAILING_WHITESPACE 116*6236dae4SAndroid Build Coastguard Worker ) 117*6236dae4SAndroid Build Coastguard Worker message(STATUS "FindGSS LDFLAGS: ${_gss_lib_flags}") 118*6236dae4SAndroid Build Coastguard Worker 119*6236dae4SAndroid Build Coastguard Worker if(NOT _gss_configure_failed) # 0 means success 120*6236dae4SAndroid Build Coastguard Worker # This script gives us libraries and link directories. Blah. We have to deal with it. 121*6236dae4SAndroid Build Coastguard Worker string(STRIP "${_gss_lib_flags}" _gss_lib_flags) 122*6236dae4SAndroid Build Coastguard Worker string(REGEX REPLACE " +-(L|l)" ";-\\1" _gss_lib_flags "${_gss_lib_flags}") 123*6236dae4SAndroid Build Coastguard Worker string(REGEX REPLACE " +-([^Ll][^ \\t;]*)" ";-\\1" _gss_lib_flags "${_gss_lib_flags}") 124*6236dae4SAndroid Build Coastguard Worker 125*6236dae4SAndroid Build Coastguard Worker foreach(_flag IN LISTS _gss_lib_flags) 126*6236dae4SAndroid Build Coastguard Worker if(_flag MATCHES "^-l.*") 127*6236dae4SAndroid Build Coastguard Worker string(REGEX REPLACE "^-l" "" _val "${_flag}") 128*6236dae4SAndroid Build Coastguard Worker list(APPEND _GSS_LIBRARIES "${_val}") 129*6236dae4SAndroid Build Coastguard Worker elseif(_flag MATCHES "^-L.*") 130*6236dae4SAndroid Build Coastguard Worker string(REGEX REPLACE "^-L" "" _val "${_flag}") 131*6236dae4SAndroid Build Coastguard Worker list(APPEND _GSS_LIBRARY_DIRS "${_val}") 132*6236dae4SAndroid Build Coastguard Worker else() 133*6236dae4SAndroid Build Coastguard Worker list(APPEND _GSS_LDFLAGS "${_flag}") 134*6236dae4SAndroid Build Coastguard Worker endif() 135*6236dae4SAndroid Build Coastguard Worker endforeach() 136*6236dae4SAndroid Build Coastguard Worker endif() 137*6236dae4SAndroid Build Coastguard Worker 138*6236dae4SAndroid Build Coastguard Worker execute_process( 139*6236dae4SAndroid Build Coastguard Worker COMMAND ${_gss_configure_script} "--version" 140*6236dae4SAndroid Build Coastguard Worker OUTPUT_VARIABLE _GSS_VERSION 141*6236dae4SAndroid Build Coastguard Worker RESULT_VARIABLE _gss_configure_failed 142*6236dae4SAndroid Build Coastguard Worker OUTPUT_STRIP_TRAILING_WHITESPACE 143*6236dae4SAndroid Build Coastguard Worker ) 144*6236dae4SAndroid Build Coastguard Worker 145*6236dae4SAndroid Build Coastguard Worker # Older versions may not have the "--version" parameter. In this case we just do not care. 146*6236dae4SAndroid Build Coastguard Worker if(_gss_configure_failed) 147*6236dae4SAndroid Build Coastguard Worker set(_GSS_VERSION 0) 148*6236dae4SAndroid Build Coastguard Worker endif() 149*6236dae4SAndroid Build Coastguard Worker 150*6236dae4SAndroid Build Coastguard Worker execute_process( 151*6236dae4SAndroid Build Coastguard Worker COMMAND ${_gss_configure_script} "--vendor" 152*6236dae4SAndroid Build Coastguard Worker OUTPUT_VARIABLE _gss_vendor 153*6236dae4SAndroid Build Coastguard Worker RESULT_VARIABLE _gss_configure_failed 154*6236dae4SAndroid Build Coastguard Worker OUTPUT_STRIP_TRAILING_WHITESPACE 155*6236dae4SAndroid Build Coastguard Worker ) 156*6236dae4SAndroid Build Coastguard Worker 157*6236dae4SAndroid Build Coastguard Worker # Older versions may not have the "--vendor" parameter. In this case we just do not care. 158*6236dae4SAndroid Build Coastguard Worker if(_gss_configure_failed) 159*6236dae4SAndroid Build Coastguard Worker set(GSS_FLAVOUR "Heimdal") # most probably, should not really matter 160*6236dae4SAndroid Build Coastguard Worker else() 161*6236dae4SAndroid Build Coastguard Worker if(_gss_vendor MATCHES ".*H|heimdal.*") 162*6236dae4SAndroid Build Coastguard Worker set(GSS_FLAVOUR "Heimdal") 163*6236dae4SAndroid Build Coastguard Worker else() 164*6236dae4SAndroid Build Coastguard Worker set(GSS_FLAVOUR "MIT") 165*6236dae4SAndroid Build Coastguard Worker endif() 166*6236dae4SAndroid Build Coastguard Worker endif() 167*6236dae4SAndroid Build Coastguard Worker 168*6236dae4SAndroid Build Coastguard Worker else() # Either there is no config script or we are on a platform that does not provide one (Windows?) 169*6236dae4SAndroid Build Coastguard Worker 170*6236dae4SAndroid Build Coastguard Worker find_path(_GSS_INCLUDE_DIRS NAMES "gssapi/gssapi.h" 171*6236dae4SAndroid Build Coastguard Worker HINTS 172*6236dae4SAndroid Build Coastguard Worker ${_gss_root_hints} 173*6236dae4SAndroid Build Coastguard Worker PATH_SUFFIXES 174*6236dae4SAndroid Build Coastguard Worker "include" 175*6236dae4SAndroid Build Coastguard Worker "inc" 176*6236dae4SAndroid Build Coastguard Worker ) 177*6236dae4SAndroid Build Coastguard Worker 178*6236dae4SAndroid Build Coastguard Worker if(_GSS_INCLUDE_DIRS) # jay, we have found something 179*6236dae4SAndroid Build Coastguard Worker cmake_push_check_state() 180*6236dae4SAndroid Build Coastguard Worker set(CMAKE_REQUIRED_INCLUDES "${_GSS_INCLUDE_DIRS}") 181*6236dae4SAndroid Build Coastguard Worker check_include_files("gssapi/gssapi_generic.h;gssapi/gssapi_krb5.h" _gss_have_mit_headers) 182*6236dae4SAndroid Build Coastguard Worker 183*6236dae4SAndroid Build Coastguard Worker if(_gss_have_mit_headers) 184*6236dae4SAndroid Build Coastguard Worker set(GSS_FLAVOUR "MIT") 185*6236dae4SAndroid Build Coastguard Worker else() 186*6236dae4SAndroid Build Coastguard Worker # Prevent compiling the header - just check if we can include it 187*6236dae4SAndroid Build Coastguard Worker list(APPEND CMAKE_REQUIRED_DEFINITIONS "-D__ROKEN_H__") 188*6236dae4SAndroid Build Coastguard Worker check_include_file("roken.h" _gss_have_roken_h) 189*6236dae4SAndroid Build Coastguard Worker 190*6236dae4SAndroid Build Coastguard Worker check_include_file("heimdal/roken.h" _gss_have_heimdal_roken_h) 191*6236dae4SAndroid Build Coastguard Worker if(_gss_have_roken_h OR _gss_have_heimdal_roken_h) 192*6236dae4SAndroid Build Coastguard Worker set(GSS_FLAVOUR "Heimdal") 193*6236dae4SAndroid Build Coastguard Worker endif() 194*6236dae4SAndroid Build Coastguard Worker endif() 195*6236dae4SAndroid Build Coastguard Worker cmake_pop_check_state() 196*6236dae4SAndroid Build Coastguard Worker else() 197*6236dae4SAndroid Build Coastguard Worker # I am not convinced if this is the right way but this is what autotools do at the moment 198*6236dae4SAndroid Build Coastguard Worker find_path(_GSS_INCLUDE_DIRS NAMES "gssapi.h" 199*6236dae4SAndroid Build Coastguard Worker HINTS 200*6236dae4SAndroid Build Coastguard Worker ${_gss_root_hints} 201*6236dae4SAndroid Build Coastguard Worker PATH_SUFFIXES 202*6236dae4SAndroid Build Coastguard Worker "include" 203*6236dae4SAndroid Build Coastguard Worker "inc" 204*6236dae4SAndroid Build Coastguard Worker ) 205*6236dae4SAndroid Build Coastguard Worker 206*6236dae4SAndroid Build Coastguard Worker if(_GSS_INCLUDE_DIRS) 207*6236dae4SAndroid Build Coastguard Worker set(GSS_FLAVOUR "Heimdal") 208*6236dae4SAndroid Build Coastguard Worker else() 209*6236dae4SAndroid Build Coastguard Worker find_path(_GSS_INCLUDE_DIRS NAMES "gss.h" 210*6236dae4SAndroid Build Coastguard Worker HINTS 211*6236dae4SAndroid Build Coastguard Worker ${_gss_root_hints} 212*6236dae4SAndroid Build Coastguard Worker PATH_SUFFIXES 213*6236dae4SAndroid Build Coastguard Worker "include" 214*6236dae4SAndroid Build Coastguard Worker ) 215*6236dae4SAndroid Build Coastguard Worker 216*6236dae4SAndroid Build Coastguard Worker if(_GSS_INCLUDE_DIRS) 217*6236dae4SAndroid Build Coastguard Worker set(GSS_FLAVOUR "GNU") 218*6236dae4SAndroid Build Coastguard Worker endif() 219*6236dae4SAndroid Build Coastguard Worker endif() 220*6236dae4SAndroid Build Coastguard Worker endif() 221*6236dae4SAndroid Build Coastguard Worker 222*6236dae4SAndroid Build Coastguard Worker # If we have headers, check if we can link libraries 223*6236dae4SAndroid Build Coastguard Worker if(GSS_FLAVOUR) 224*6236dae4SAndroid Build Coastguard Worker set(_gss_libdir_suffixes "") 225*6236dae4SAndroid Build Coastguard Worker set(_gss_libdir_hints ${_gss_root_hints}) 226*6236dae4SAndroid Build Coastguard Worker get_filename_component(_gss_calculated_potential_root "${_GSS_INCLUDE_DIRS}" DIRECTORY) 227*6236dae4SAndroid Build Coastguard Worker list(APPEND _gss_libdir_hints ${_gss_calculated_potential_root}) 228*6236dae4SAndroid Build Coastguard Worker 229*6236dae4SAndroid Build Coastguard Worker if(WIN32) 230*6236dae4SAndroid Build Coastguard Worker if(CMAKE_SIZEOF_VOID_P EQUAL 8) 231*6236dae4SAndroid Build Coastguard Worker list(APPEND _gss_libdir_suffixes "lib/AMD64") 232*6236dae4SAndroid Build Coastguard Worker if(GSS_FLAVOUR STREQUAL "GNU") 233*6236dae4SAndroid Build Coastguard Worker set(_gss_libname "gss") 234*6236dae4SAndroid Build Coastguard Worker elseif(GSS_FLAVOUR STREQUAL "MIT") 235*6236dae4SAndroid Build Coastguard Worker set(_gss_libname "gssapi64") 236*6236dae4SAndroid Build Coastguard Worker else() 237*6236dae4SAndroid Build Coastguard Worker set(_gss_libname "libgssapi") 238*6236dae4SAndroid Build Coastguard Worker endif() 239*6236dae4SAndroid Build Coastguard Worker else() 240*6236dae4SAndroid Build Coastguard Worker list(APPEND _gss_libdir_suffixes "lib/i386") 241*6236dae4SAndroid Build Coastguard Worker if(GSS_FLAVOUR STREQUAL "GNU") 242*6236dae4SAndroid Build Coastguard Worker set(_gss_libname "gss") 243*6236dae4SAndroid Build Coastguard Worker elseif(GSS_FLAVOUR STREQUAL "MIT") 244*6236dae4SAndroid Build Coastguard Worker set(_gss_libname "gssapi32") 245*6236dae4SAndroid Build Coastguard Worker else() 246*6236dae4SAndroid Build Coastguard Worker set(_gss_libname "libgssapi") 247*6236dae4SAndroid Build Coastguard Worker endif() 248*6236dae4SAndroid Build Coastguard Worker endif() 249*6236dae4SAndroid Build Coastguard Worker else() 250*6236dae4SAndroid Build Coastguard Worker list(APPEND _gss_libdir_suffixes "lib;lib64") # those suffixes are not checked for HINTS 251*6236dae4SAndroid Build Coastguard Worker if(GSS_FLAVOUR STREQUAL "GNU") 252*6236dae4SAndroid Build Coastguard Worker set(_gss_libname "gss") 253*6236dae4SAndroid Build Coastguard Worker elseif(GSS_FLAVOUR STREQUAL "MIT") 254*6236dae4SAndroid Build Coastguard Worker set(_gss_libname "gssapi_krb5") 255*6236dae4SAndroid Build Coastguard Worker else() 256*6236dae4SAndroid Build Coastguard Worker set(_gss_libname "gssapi") 257*6236dae4SAndroid Build Coastguard Worker endif() 258*6236dae4SAndroid Build Coastguard Worker endif() 259*6236dae4SAndroid Build Coastguard Worker 260*6236dae4SAndroid Build Coastguard Worker find_library(_GSS_LIBRARIES NAMES ${_gss_libname} 261*6236dae4SAndroid Build Coastguard Worker HINTS 262*6236dae4SAndroid Build Coastguard Worker ${_gss_libdir_hints} 263*6236dae4SAndroid Build Coastguard Worker PATH_SUFFIXES 264*6236dae4SAndroid Build Coastguard Worker ${_gss_libdir_suffixes} 265*6236dae4SAndroid Build Coastguard Worker ) 266*6236dae4SAndroid Build Coastguard Worker endif() 267*6236dae4SAndroid Build Coastguard Worker endif() 268*6236dae4SAndroid Build Coastguard Workerelse() 269*6236dae4SAndroid Build Coastguard Worker # _GSS_MODULE_NAME set since CMake 3.16 270*6236dae4SAndroid Build Coastguard Worker if(_GSS_MODULE_NAME STREQUAL _gnu_modname OR _GSS_${_gnu_modname}_VERSION) 271*6236dae4SAndroid Build Coastguard Worker set(GSS_FLAVOUR "GNU") 272*6236dae4SAndroid Build Coastguard Worker if(NOT _GSS_VERSION) # for old CMake versions? 273*6236dae4SAndroid Build Coastguard Worker set(_GSS_VERSION ${_GSS_${_gnu_modname}_VERSION}) 274*6236dae4SAndroid Build Coastguard Worker endif() 275*6236dae4SAndroid Build Coastguard Worker elseif(_GSS_MODULE_NAME STREQUAL _mit_modname OR _GSS_${_mit_modname}_VERSION) 276*6236dae4SAndroid Build Coastguard Worker set(GSS_FLAVOUR "MIT") 277*6236dae4SAndroid Build Coastguard Worker if(NOT _GSS_VERSION) # for old CMake versions? 278*6236dae4SAndroid Build Coastguard Worker set(_GSS_VERSION ${_GSS_${_mit_modname}_VERSION}) 279*6236dae4SAndroid Build Coastguard Worker endif() 280*6236dae4SAndroid Build Coastguard Worker else() 281*6236dae4SAndroid Build Coastguard Worker set(GSS_FLAVOUR "Heimdal") 282*6236dae4SAndroid Build Coastguard Worker if(NOT _GSS_VERSION) # for old CMake versions? 283*6236dae4SAndroid Build Coastguard Worker set(_GSS_VERSION ${_GSS_${_heimdal_modname}_VERSION}) 284*6236dae4SAndroid Build Coastguard Worker endif() 285*6236dae4SAndroid Build Coastguard Worker endif() 286*6236dae4SAndroid Build Coastguard Worker message(STATUS "Found GSS/${GSS_FLAVOUR} (via pkg-config): ${_GSS_INCLUDE_DIRS} (found version \"${_GSS_VERSION}\")") 287*6236dae4SAndroid Build Coastguard Workerendif() 288*6236dae4SAndroid Build Coastguard Worker 289*6236dae4SAndroid Build Coastguard Workerset(GSS_INCLUDE_DIRS ${_GSS_INCLUDE_DIRS}) 290*6236dae4SAndroid Build Coastguard Workerset(GSS_LIBRARIES ${_GSS_LIBRARIES}) 291*6236dae4SAndroid Build Coastguard Workerset(GSS_LIBRARY_DIRS ${_GSS_LIBRARY_DIRS}) 292*6236dae4SAndroid Build Coastguard Workerset(GSS_LDFLAGS ${_GSS_LDFLAGS}) 293*6236dae4SAndroid Build Coastguard Workerset(GSS_CFLAGS ${_GSS_CFLAGS}) 294*6236dae4SAndroid Build Coastguard Workerset(GSS_VERSION ${_GSS_VERSION}) 295*6236dae4SAndroid Build Coastguard Worker 296*6236dae4SAndroid Build Coastguard Workerif(GSS_FLAVOUR) 297*6236dae4SAndroid Build Coastguard Worker if(NOT GSS_VERSION AND GSS_FLAVOUR STREQUAL "Heimdal") 298*6236dae4SAndroid Build Coastguard Worker if(CMAKE_SIZEOF_VOID_P EQUAL 8) 299*6236dae4SAndroid Build Coastguard Worker set(_heimdal_manifest_file "Heimdal.Application.amd64.manifest") 300*6236dae4SAndroid Build Coastguard Worker else() 301*6236dae4SAndroid Build Coastguard Worker set(_heimdal_manifest_file "Heimdal.Application.x86.manifest") 302*6236dae4SAndroid Build Coastguard Worker endif() 303*6236dae4SAndroid Build Coastguard Worker 304*6236dae4SAndroid Build Coastguard Worker if(EXISTS "${GSS_INCLUDE_DIRS}/${_heimdal_manifest_file}") 305*6236dae4SAndroid Build Coastguard Worker file(STRINGS "${GSS_INCLUDE_DIRS}/${_heimdal_manifest_file}" _heimdal_version_str 306*6236dae4SAndroid Build Coastguard Worker REGEX "^.*version=\"[0-9]\\.[^\"]+\".*$") 307*6236dae4SAndroid Build Coastguard Worker 308*6236dae4SAndroid Build Coastguard Worker string(REGEX MATCH "[0-9]\\.[^\"]+" GSS_VERSION "${_heimdal_version_str}") 309*6236dae4SAndroid Build Coastguard Worker endif() 310*6236dae4SAndroid Build Coastguard Worker 311*6236dae4SAndroid Build Coastguard Worker if(NOT GSS_VERSION) 312*6236dae4SAndroid Build Coastguard Worker set(GSS_VERSION "Heimdal Unknown") 313*6236dae4SAndroid Build Coastguard Worker endif() 314*6236dae4SAndroid Build Coastguard Worker elseif(NOT GSS_VERSION AND GSS_FLAVOUR STREQUAL "MIT") 315*6236dae4SAndroid Build Coastguard Worker get_filename_component(_mit_version "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MIT\\Kerberos\\SDK\\CurrentVersion;VersionString]" NAME 316*6236dae4SAndroid Build Coastguard Worker CACHE) 317*6236dae4SAndroid Build Coastguard Worker if(WIN32 AND _mit_version) 318*6236dae4SAndroid Build Coastguard Worker set(GSS_VERSION "${_mit_version}") 319*6236dae4SAndroid Build Coastguard Worker else() 320*6236dae4SAndroid Build Coastguard Worker set(GSS_VERSION "MIT Unknown") 321*6236dae4SAndroid Build Coastguard Worker endif() 322*6236dae4SAndroid Build Coastguard Worker elseif(NOT GSS_VERSION AND GSS_FLAVOUR STREQUAL "GNU") 323*6236dae4SAndroid Build Coastguard Worker if(GSS_INCLUDE_DIRS AND EXISTS "${GSS_INCLUDE_DIRS}/gss.h") 324*6236dae4SAndroid Build Coastguard Worker set(_version_regex "#[\t ]*define[\t ]+GSS_VERSION[\t ]+\"([^\"]*)\"") 325*6236dae4SAndroid Build Coastguard Worker file(STRINGS "${GSS_INCLUDE_DIRS}/gss.h" _version_str REGEX "${_version_regex}") 326*6236dae4SAndroid Build Coastguard Worker string(REGEX REPLACE "${_version_regex}" "\\1" _version_str "${_version_str}") 327*6236dae4SAndroid Build Coastguard Worker set(GSS_VERSION "${_version_str}") 328*6236dae4SAndroid Build Coastguard Worker unset(_version_regex) 329*6236dae4SAndroid Build Coastguard Worker unset(_version_str) 330*6236dae4SAndroid Build Coastguard Worker endif() 331*6236dae4SAndroid Build Coastguard Worker endif() 332*6236dae4SAndroid Build Coastguard Workerendif() 333*6236dae4SAndroid Build Coastguard Worker 334*6236dae4SAndroid Build Coastguard Workerinclude(FindPackageHandleStandardArgs) 335*6236dae4SAndroid Build Coastguard Workerfind_package_handle_standard_args(GSS 336*6236dae4SAndroid Build Coastguard Worker REQUIRED_VARS 337*6236dae4SAndroid Build Coastguard Worker GSS_FLAVOUR 338*6236dae4SAndroid Build Coastguard Worker GSS_LIBRARIES 339*6236dae4SAndroid Build Coastguard Worker VERSION_VAR 340*6236dae4SAndroid Build Coastguard Worker GSS_VERSION 341*6236dae4SAndroid Build Coastguard Worker FAIL_MESSAGE 342*6236dae4SAndroid Build Coastguard Worker "Could NOT find GSS, try to set the path to GSS root folder in the system variable GSS_ROOT_DIR" 343*6236dae4SAndroid Build Coastguard Worker) 344*6236dae4SAndroid Build Coastguard Worker 345*6236dae4SAndroid Build Coastguard Workermark_as_advanced( 346*6236dae4SAndroid Build Coastguard Worker _GSS_CFLAGS 347*6236dae4SAndroid Build Coastguard Worker _GSS_FOUND 348*6236dae4SAndroid Build Coastguard Worker _GSS_INCLUDE_DIRS 349*6236dae4SAndroid Build Coastguard Worker _GSS_LDFLAGS 350*6236dae4SAndroid Build Coastguard Worker _GSS_LIBRARIES 351*6236dae4SAndroid Build Coastguard Worker _GSS_LIBRARY_DIRS 352*6236dae4SAndroid Build Coastguard Worker _GSS_MODULE_NAME 353*6236dae4SAndroid Build Coastguard Worker _GSS_PREFIX 354*6236dae4SAndroid Build Coastguard Worker _GSS_VERSION 355*6236dae4SAndroid Build Coastguard Worker) 356