]> git.proxmox.com Git - libgit2.git/blob - cmake/FindGSSAPI.cmake
New upstream version 1.4.3+dfsg.1
[libgit2.git] / cmake / FindGSSAPI.cmake
1 # - Try to find GSSAPI
2 # Once done this will define
3 #
4 # KRB5_CONFIG - Path to krb5-config
5 # GSSAPI_ROOT_DIR - Set this variable to the root installation of GSSAPI
6 #
7 # Read-Only variables:
8 # GSSAPI_FLAVOR_MIT - set to TRUE if MIT Kerberos has been found
9 # GSSAPI_FLAVOR_HEIMDAL - set to TRUE if Heimdal Kerberos has been found
10 # GSSAPI_FOUND - system has GSSAPI
11 # GSSAPI_INCLUDE_DIR - the GSSAPI include directory
12 # GSSAPI_LIBRARIES - Link these to use GSSAPI
13 # GSSAPI_DEFINITIONS - Compiler switches required for using GSSAPI
14 #
15 #=============================================================================
16 # Copyright (c) 2013 Andreas Schneider <asn@cryptomilk.org>
17 #
18 # Distributed under the OSI-approved BSD License (the "License");
19 # see accompanying file Copyright.txt for details.
20 #
21 # This software is distributed WITHOUT ANY WARRANTY; without even the
22 # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
23 # See the License for more information.
24 #=============================================================================
25 #
26
27 find_path(GSSAPI_ROOT_DIR
28 NAMES include/gssapi.h include/gssapi/gssapi.h
29 HINTS ${_GSSAPI_ROOT_HINTS}
30 PATHS ${_GSSAPI_ROOT_PATHS})
31 mark_as_advanced(GSSAPI_ROOT_DIR)
32
33 if(UNIX)
34 find_program(KRB5_CONFIG
35 NAMES krb5-config
36 PATHS ${GSSAPI_ROOT_DIR}/bin /opt/local/bin)
37 mark_as_advanced(KRB5_CONFIG)
38
39 if(KRB5_CONFIG)
40 # Check if we have MIT KRB5
41 execute_process(
42 COMMAND ${KRB5_CONFIG} --vendor
43 RESULT_VARIABLE _GSSAPI_VENDOR_RESULT
44 OUTPUT_VARIABLE _GSSAPI_VENDOR_STRING)
45
46 if(_GSSAPI_VENDOR_STRING MATCHES ".*Massachusetts.*")
47 set(GSSAPI_FLAVOR_MIT TRUE)
48 else()
49 execute_process(
50 COMMAND ${KRB5_CONFIG} --libs gssapi
51 RESULT_VARIABLE _GSSAPI_LIBS_RESULT
52 OUTPUT_VARIABLE _GSSAPI_LIBS_STRING)
53
54 if(_GSSAPI_LIBS_STRING MATCHES ".*roken.*")
55 set(GSSAPI_FLAVOR_HEIMDAL TRUE)
56 endif()
57 endif()
58
59 # Get the include dir
60 execute_process(
61 COMMAND ${KRB5_CONFIG} --cflags gssapi
62 RESULT_VARIABLE _GSSAPI_INCLUDE_RESULT
63 OUTPUT_VARIABLE _GSSAPI_INCLUDE_STRING)
64 string(REGEX REPLACE "(\r?\n)+$" "" _GSSAPI_INCLUDE_STRING "${_GSSAPI_INCLUDE_STRING}")
65 string(REGEX REPLACE " *-I" "" _GSSAPI_INCLUDEDIR "${_GSSAPI_INCLUDE_STRING}")
66 endif()
67
68 if(NOT GSSAPI_FLAVOR_MIT AND NOT GSSAPI_FLAVOR_HEIMDAL)
69 # Check for HEIMDAL
70 find_package(PkgConfig)
71 if(PKG_CONFIG_FOUND)
72 pkg_check_modules(_GSSAPI heimdal-gssapi)
73 endif()
74
75 if(_GSSAPI_FOUND)
76 set(GSSAPI_FLAVOR_HEIMDAL TRUE)
77 else()
78 find_path(_GSSAPI_ROKEN
79 NAMES roken.h
80 PATHS ${GSSAPI_ROOT_DIR}/include ${_GSSAPI_INCLUDEDIR})
81 if(_GSSAPI_ROKEN)
82 set(GSSAPI_FLAVOR_HEIMDAL TRUE)
83 endif()
84 endif()
85 endif()
86 endif()
87
88 find_path(GSSAPI_INCLUDE_DIR
89 NAMES gssapi.h gssapi/gssapi.h
90 PATHS ${GSSAPI_ROOT_DIR}/include ${_GSSAPI_INCLUDEDIR})
91
92 if(GSSAPI_FLAVOR_MIT)
93 find_library(GSSAPI_LIBRARY
94 NAMES gssapi_krb5
95 PATHS ${GSSAPI_ROOT_DIR}/lib ${_GSSAPI_LIBDIR})
96
97 find_library(KRB5_LIBRARY
98 NAMES krb5
99 PATHS ${GSSAPI_ROOT_DIR}/lib ${_GSSAPI_LIBDIR})
100
101 find_library(K5CRYPTO_LIBRARY
102 NAMES k5crypto
103 PATHS ${GSSAPI_ROOT_DIR}/lib ${_GSSAPI_LIBDIR})
104
105 find_library(COM_ERR_LIBRARY
106 NAMES com_err
107 PATHS ${GSSAPI_ROOT_DIR}/lib ${_GSSAPI_LIBDIR})
108
109 if(GSSAPI_LIBRARY)
110 set(GSSAPI_LIBRARIES ${GSSAPI_LIBRARIES} ${GSSAPI_LIBRARY})
111 endif()
112
113 if(KRB5_LIBRARY)
114 set(GSSAPI_LIBRARIES ${GSSAPI_LIBRARIES} ${KRB5_LIBRARY})
115 endif()
116
117 if(K5CRYPTO_LIBRARY)
118 set(GSSAPI_LIBRARIES ${GSSAPI_LIBRARIES} ${K5CRYPTO_LIBRARY})
119 endif()
120
121 if(COM_ERR_LIBRARY)
122 set(GSSAPI_LIBRARIES ${GSSAPI_LIBRARIES} ${COM_ERR_LIBRARY})
123 endif()
124 endif()
125
126 if(GSSAPI_FLAVOR_HEIMDAL)
127 find_library(GSSAPI_LIBRARY
128 NAMES gssapi
129 PATHS ${GSSAPI_ROOT_DIR}/lib ${_GSSAPI_LIBDIR})
130
131 find_library(KRB5_LIBRARY
132 NAMES krb5
133 PATHS ${GSSAPI_ROOT_DIR}/lib ${_GSSAPI_LIBDIR})
134
135 find_library(HCRYPTO_LIBRARY
136 NAMES hcrypto
137 PATHS ${GSSAPI_ROOT_DIR}/lib ${_GSSAPI_LIBDIR})
138
139 find_library(COM_ERR_LIBRARY
140 NAMES com_err
141 PATHS ${GSSAPI_ROOT_DIR}/lib ${_GSSAPI_LIBDIR})
142
143 find_library(HEIMNTLM_LIBRARY
144 NAMES heimntlm
145 PATHS ${GSSAPI_ROOT_DIR}/lib ${_GSSAPI_LIBDIR})
146
147 find_library(HX509_LIBRARY
148 NAMES hx509
149 PATHS ${GSSAPI_ROOT_DIR}/lib ${_GSSAPI_LIBDIR})
150
151 find_library(ASN1_LIBRARY
152 NAMES asn1
153 PATHS ${GSSAPI_ROOT_DIR}/lib ${_GSSAPI_LIBDIR})
154
155 find_library(WIND_LIBRARY
156 NAMES wind
157 PATHS ${GSSAPI_ROOT_DIR}/lib ${_GSSAPI_LIBDIR})
158
159 find_library(ROKEN_LIBRARY
160 NAMES roken
161 PATHS ${GSSAPI_ROOT_DIR}/lib ${_GSSAPI_LIBDIR})
162
163 if(GSSAPI_LIBRARY)
164 set(GSSAPI_LIBRARIES ${GSSAPI_LIBRARIES} ${GSSAPI_LIBRARY})
165 endif()
166
167 if(KRB5_LIBRARY)
168 set(GSSAPI_LIBRARIES ${GSSAPI_LIBRARIES} ${KRB5_LIBRARY})
169 endif()
170
171 if(HCRYPTO_LIBRARY)
172 set(GSSAPI_LIBRARIES ${GSSAPI_LIBRARIES} ${HCRYPTO_LIBRARY})
173 endif()
174
175 if(COM_ERR_LIBRARY)
176 set(GSSAPI_LIBRARIES ${GSSAPI_LIBRARIES} ${COM_ERR_LIBRARY})
177 endif()
178
179 if(HEIMNTLM_LIBRARY)
180 set(GSSAPI_LIBRARIES ${GSSAPI_LIBRARIES} ${HEIMNTLM_LIBRARY})
181 endif()
182
183 if(HX509_LIBRARY)
184 set(GSSAPI_LIBRARIES ${GSSAPI_LIBRARIES} ${HX509_LIBRARY})
185 endif()
186
187 if(ASN1_LIBRARY)
188 set(GSSAPI_LIBRARIES ${GSSAPI_LIBRARIES} ${ASN1_LIBRARY})
189 endif()
190
191 if(WIND_LIBRARY)
192 set(GSSAPI_LIBRARIES ${GSSAPI_LIBRARIES} ${WIND_LIBRARY})
193 endif()
194
195 if(ROKEN_LIBRARY)
196 set(GSSAPI_LIBRARIES ${GSSAPI_LIBRARIES} ${WIND_LIBRARY})
197 endif()
198 endif()
199
200 include(FindPackageHandleStandardArgs)
201 find_package_handle_standard_args(GSSAPI DEFAULT_MSG GSSAPI_LIBRARIES GSSAPI_INCLUDE_DIR)
202
203 if(GSSAPI_INCLUDE_DIRS AND GSSAPI_LIBRARIES)
204 set(GSSAPI_FOUND TRUE)
205 endif(GSSAPI_INCLUDE_DIRS AND GSSAPI_LIBRARIES)
206
207 # show the GSSAPI_INCLUDE_DIRS and GSSAPI_LIBRARIES variables only in the advanced view
208 mark_as_advanced(GSSAPI_INCLUDE_DIRS GSSAPI_LIBRARIES)