Warning, /utilities/kgpg/cmake/FindGpgme.cmake is written in an unsupported language. File is not indexed.
0001 # - Try to find the gpgme library 0002 # 0003 # Algorithm: 0004 # - Windows: 0005 # On Windows, there's three gpgme variants: gpgme{,-glib,-qt}. 0006 # - The variant used determines the event loop integration possible: 0007 # - gpgme: no event loop integration possible, only synchronous operations supported 0008 # - gpgme-glib: glib event loop integration possible, only asynchronous operations supported 0009 # - gpgme-qt: qt event loop integration possible, only asynchronous operations supported 0010 # - GPGME_{VANILLA,GLIB,QT}_{FOUND,LIBRARIES} will be set for each of the above 0011 # - GPGME_INCLUDES is the same for all of the above 0012 # - GPGME_FOUND is set if any of the above was found 0013 # - *nix: 0014 # There's also three variants: gpgme{,-pthread,-pth}. 0015 # - The variant used determines the multithreaded use possible: 0016 # - gpgme: no multithreading support available 0017 # - gpgme-pthread: multithreading available using POSIX threads 0018 # - gpgme-pth: multithreading available using GNU PTH (cooperative multithreading) 0019 # - GPGME_{VANILLA,PTH,PTHREAD}_{FOUND,LIBRARIES} will be set for each of the above 0020 # - GPGME_INCLUDES is the same for all of the above 0021 # - GPGME_FOUND is set if any of the above was found 0022 # 0023 # GPGME_LIBRARY_DIR - the directory where the libraries are located 0024 0025 # 0026 # THIS IS ALMOST A 1:1 COPY OF FindAssuan.cmake in kdepim. 0027 # Any changes here likely apply there, too. 0028 # 0029 0030 find_package(PkgConfig) 0031 0032 #if this is built-in, please replace, if it isn't, export into a MacroToBool.cmake of it's own 0033 macro( macro_bool_to_bool FOUND_VAR ) 0034 foreach( _current_VAR ${ARGN} ) 0035 if ( ${FOUND_VAR} ) 0036 set( ${_current_VAR} TRUE ) 0037 else() 0038 set( ${_current_VAR} FALSE ) 0039 endif() 0040 endforeach() 0041 endmacro() 0042 0043 #HACK: local copy... 0044 MACRO(MACRO_BOOL_TO_01 FOUND_VAR ) 0045 FOREACH (_current_VAR ${ARGN}) 0046 IF(${FOUND_VAR}) 0047 SET(${_current_VAR} 1) 0048 ELSE(${FOUND_VAR}) 0049 SET(${_current_VAR} 0) 0050 ENDIF(${FOUND_VAR}) 0051 ENDFOREACH(_current_VAR) 0052 ENDMACRO(MACRO_BOOL_TO_01) 0053 0054 pkg_search_module(PC_GPGME gpgme) 0055 0056 if (PC_GPGME_FOUND) 0057 set(GPGME_INCLUDES ${PC_GPGME_INCLUDE_DIRS}) 0058 set(GPGME_LIBRARIES ${PC_GPGME_LINK_LIBRARIES}) 0059 set(GPGME_VERSION ${PC_GPGME_VERSION}) 0060 set(GPGME_LIBRARY_DIR ${PC_GPGME_LIBRARY_DIR}) 0061 elseif ( WIN32 ) 0062 0063 # On Windows, we don't have a gpgme-config script, so we need to 0064 # look for the stuff ourselves: 0065 0066 # in cmake, AND and OR have the same precedence, there's no 0067 # subexpressions, and expressions are evaluated short-circuit'ed 0068 # IOW: CMake if() suxx. 0069 # Starting with CMake 2.6.3 you can group if expressions with (), but we 0070 # don't require 2.6.3 but 2.6.2, we can't use it. Alex 0071 set( _seem_to_have_cached_gpgme false ) 0072 if ( GPGME_INCLUDES ) 0073 if ( GPGME_VANILLA_LIBRARIES OR GPGME_QT_LIBRARIES OR GPGME_GLIB_LIBRARIES ) 0074 set( _seem_to_have_cached_gpgme true ) 0075 endif() 0076 endif() 0077 0078 if ( _seem_to_have_cached_gpgme ) 0079 0080 macro_bool_to_bool( GPGME_VANILLA_LIBRARIES GPGME_VANILLA_FOUND ) 0081 macro_bool_to_bool( GPGME_GLIB_LIBRARIES GPGME_GLIB_FOUND ) 0082 macro_bool_to_bool( GPGME_QT_LIBRARIES GPGME_QT_FOUND ) 0083 # this would have been preferred: 0084 #set( GPGME_*_FOUND macro_bool_to_bool(GPGME_*_LIBRARIES) ) 0085 0086 if ( GPGME_VANILLA_FOUND OR GPGME_GLIB_FOUND OR GPGME_QT_FOUND ) 0087 set( GPGME_FOUND true ) 0088 else() 0089 set( GPGME_FOUND false ) 0090 endif() 0091 0092 else() 0093 0094 set( GPGME_FOUND false ) 0095 set( GPGME_VANILLA_FOUND false ) 0096 set( GPGME_GLIB_FOUND false ) 0097 set( GPGME_QT_FOUND false ) 0098 0099 find_path( GPGME_INCLUDES gpgme.h 0100 ${CMAKE_INCLUDE_PATH} 0101 ${CMAKE_INSTALL_PREFIX}/include 0102 ) 0103 0104 find_library( _gpgme_vanilla_library NAMES gpgme libgpgme gpgme-11 libgpgme-11 0105 PATHS 0106 ${CMAKE_LIBRARY_PATH} 0107 ${CMAKE_INSTALL_PREFIX}/lib 0108 ) 0109 0110 find_library( _gpgme_glib_library NAMES gpgme-glib libgpgme-glib gpgme-glib-11 libgpgme-glib-11 0111 PATHS 0112 ${CMAKE_LIBRARY_PATH} 0113 ${CMAKE_INSTALL_PREFIX}/lib 0114 ) 0115 0116 find_library( _gpgme_qt_library NAMES gpgme-qt libgpgme-qt gpgme-qt-11 libgpgme-qt-11 0117 PATHS 0118 ${CMAKE_LIBRARY_PATH} 0119 ${CMAKE_INSTALL_PREFIX}/lib 0120 ) 0121 0122 find_library( _gpg_error_library NAMES gpg-error libgpg-error gpg-error-0 libgpg-error-0 0123 PATHS 0124 ${CMAKE_LIBRARY_PATH} 0125 ${CMAKE_INSTALL_PREFIX}/lib 0126 ) 0127 0128 set( GPGME_INCLUDES ${GPGME_INCLUDES} ) 0129 0130 if ( _gpgme_vanilla_library AND _gpg_error_library ) 0131 set( GPGME_VANILLA_LIBRARIES ${_gpgme_vanilla_library} ${_gpg_error_library} ) 0132 set( GPGME_VANILLA_FOUND true ) 0133 set( GPGME_FOUND true ) 0134 endif() 0135 0136 if ( _gpgme_glib_library AND _gpg_error_library ) 0137 set( GPGME_GLIB_LIBRARIES ${_gpgme_glib_library} ${_gpg_error_library} ) 0138 set( GPGME_GLIB_FOUND true ) 0139 set( GPGME_FOUND true ) 0140 endif() 0141 0142 if ( _gpgme_qt_library AND _gpg_error_library ) 0143 set( GPGME_QT_LIBRARIES ${_gpgme_qt_library} ${_gpg_error_library} ) 0144 set( GPGME_QT_FOUND true ) 0145 set( GPGME_FOUND true ) 0146 endif() 0147 0148 endif() 0149 0150 # these are Unix-only: 0151 set( GPGME_PTHREAD_FOUND false ) 0152 set( GPGME_PTH_FOUND false ) 0153 set( HAVE_GPGME_PTHREAD 0 ) 0154 set( HAVE_GPGME_PTH 0 ) 0155 0156 macro_bool_to_01( GPGME_FOUND HAVE_GPGME ) 0157 macro_bool_to_01( GPGME_VANILLA_FOUND HAVE_GPGME_VANILLA ) 0158 macro_bool_to_01( GPGME_GLIB_FOUND HAVE_GPGME_GLIB ) 0159 macro_bool_to_01( GPGME_QT_FOUND HAVE_GPGME_QT ) 0160 0161 else() # not WIN32 0162 0163 # On *nix, we have the gpgme-config script which can tell us all we 0164 # need to know: 0165 0166 # see WIN32 case for an explanation of what this does: 0167 set( _seem_to_have_cached_gpgme false ) 0168 if ( GPGME_INCLUDES ) 0169 if ( GPGME_VANILLA_LIBRARIES OR GPGME_PTHREAD_LIBRARIES OR GPGME_PTH_LIBRARIES ) 0170 set( _seem_to_have_cached_gpgme true ) 0171 endif() 0172 endif() 0173 0174 if ( _seem_to_have_cached_gpgme ) 0175 0176 macro_bool_to_bool( GPGME_VANILLA_LIBRARIES GPGME_VANILLA_FOUND ) 0177 macro_bool_to_bool( GPGME_PTHREAD_LIBRARIES GPGME_PTHREAD_FOUND ) 0178 macro_bool_to_bool( GPGME_PTH_LIBRARIES GPGME_PTH_FOUND ) 0179 0180 if ( GPGME_VANILLA_FOUND OR GPGME_PTHREAD_FOUND OR GPGME_PTH_FOUND ) 0181 set( GPGME_FOUND true ) 0182 else() 0183 set( GPGME_FOUND false ) 0184 endif() 0185 0186 else() 0187 0188 set( GPGME_FOUND false ) 0189 set( GPGME_VANILLA_FOUND false ) 0190 set( GPGME_PTHREAD_FOUND false ) 0191 set( GPGME_PTH_FOUND false ) 0192 0193 find_program( _GPGMECONFIG_EXECUTABLE NAMES gpgme-config ) 0194 0195 # if gpgme-config has been found 0196 if ( _GPGMECONFIG_EXECUTABLE ) 0197 0198 message( STATUS "Found gpgme-config at ${_GPGMECONFIG_EXECUTABLE}" ) 0199 0200 exec_program( ${_GPGMECONFIG_EXECUTABLE} ARGS --version OUTPUT_VARIABLE GPGME_VERSION ) 0201 0202 set( _GPGME_MIN_VERSION "1.4.3" ) 0203 0204 if ( ${GPGME_VERSION} VERSION_LESS ${_GPGME_MIN_VERSION} ) 0205 0206 message( STATUS "The installed version of gpgme is too old: ${GPGME_VERSION} (required: >= ${_GPGME_MIN_VERSION})" ) 0207 0208 else() 0209 0210 message( STATUS "Found gpgme v${GPGME_VERSION}, checking for flavors..." ) 0211 0212 exec_program( ${_GPGMECONFIG_EXECUTABLE} ARGS --libs OUTPUT_VARIABLE _gpgme_config_vanilla_libs RETURN_VALUE _ret ) 0213 if ( _ret ) 0214 set( _gpgme_config_vanilla_libs ) 0215 endif() 0216 0217 exec_program( ${_GPGMECONFIG_EXECUTABLE} ARGS --thread=pthread --libs OUTPUT_VARIABLE _gpgme_config_pthread_libs RETURN_VALUE _ret ) 0218 if ( _ret ) 0219 set( _gpgme_config_pthread_libs ) 0220 endif() 0221 0222 exec_program( ${_GPGMECONFIG_EXECUTABLE} ARGS --thread=pth --libs OUTPUT_VARIABLE _gpgme_config_pth_libs RETURN_VALUE _ret ) 0223 if ( _ret ) 0224 set( _gpgme_config_pth_libs ) 0225 endif() 0226 0227 # append -lgpg-error to the list of libraries, if necessary 0228 foreach ( _flavour vanilla pthread pth ) 0229 if ( _gpgme_config_${_flavour}_libs AND NOT _gpgme_config_${_flavour}_libs MATCHES "lgpg-error" ) 0230 set( _gpgme_config_${_flavour}_libs "${_gpgme_config_${_flavour}_libs} -lgpg-error" ) 0231 endif() 0232 endforeach() 0233 0234 if ( _gpgme_config_vanilla_libs OR _gpgme_config_pthread_libs OR _gpgme_config_pth_libs ) 0235 0236 exec_program( ${_GPGMECONFIG_EXECUTABLE} ARGS --cflags OUTPUT_VARIABLE _GPGME_CFLAGS ) 0237 0238 if ( _GPGME_CFLAGS ) 0239 string( REGEX REPLACE "(\r?\n)+$" " " _GPGME_CFLAGS "${_GPGME_CFLAGS}" ) 0240 string( REGEX REPLACE " *-I" ";" GPGME_INCLUDES "${_GPGME_CFLAGS}" ) 0241 endif() 0242 0243 foreach ( _flavour vanilla pthread pth ) 0244 if ( _gpgme_config_${_flavour}_libs ) 0245 0246 set( _gpgme_library_dirs ) 0247 set( _gpgme_library_names ) 0248 string( TOUPPER "${_flavour}" _FLAVOUR ) 0249 0250 string( REGEX REPLACE " +" ";" _gpgme_config_${_flavour}_libs "${_gpgme_config_${_flavour}_libs}" ) 0251 0252 foreach( _flag ${_gpgme_config_${_flavour}_libs} ) 0253 if ( "${_flag}" MATCHES "^-L" ) 0254 string( REGEX REPLACE "^-L" "" _dir "${_flag}" ) 0255 file( TO_CMAKE_PATH "${_dir}" _dir ) 0256 set( _gpgme_library_dirs ${_gpgme_library_dirs} "${_dir}" ) 0257 elseif( "${_flag}" MATCHES "^-l" ) 0258 string( REGEX REPLACE "^-l" "" _name "${_flag}" ) 0259 set( _gpgme_library_names ${_gpgme_library_names} "${_name}" ) 0260 endif() 0261 endforeach() 0262 0263 set( GPGME_${_FLAVOUR}_FOUND true ) 0264 0265 foreach( _name ${_gpgme_library_names} ) 0266 set( _gpgme_${_name}_lib ) 0267 0268 # if -L options were given, look only there 0269 if ( _gpgme_library_dirs ) 0270 find_library( _gpgme_${_name}_lib NAMES ${_name} PATHS ${_gpgme_library_dirs} NO_DEFAULT_PATH ) 0271 endif() 0272 0273 # if not found there, look in system directories 0274 if ( NOT _gpgme_${_name}_lib ) 0275 find_library( _gpgme_${_name}_lib NAMES ${_name} ) 0276 endif() 0277 0278 # if still not found, then the whole flavor isn't found 0279 if ( NOT _gpgme_${_name}_lib ) 0280 if ( GPGME_${_FLAVOUR}_FOUND ) 0281 set( GPGME_${_FLAVOUR}_FOUND false ) 0282 set( _not_found_reason "dependent library ${_name} wasn't found" ) 0283 endif() 0284 endif() 0285 0286 set( GPGME_${_FLAVOUR}_LIBRARIES ${GPGME_${_FLAVOUR}_LIBRARIES} "${_gpgme_${_name}_lib}" ) 0287 endforeach() 0288 0289 #check_c_library_exists_explicit( gpgme gpgme_check_version "${_GPGME_CFLAGS}" "${GPGME_LIBRARIES}" GPGME_FOUND ) 0290 if ( GPGME_${_FLAVOUR}_FOUND ) 0291 message( STATUS " Found flavor '${_flavour}', checking whether it's usable...yes" ) 0292 else() 0293 message( STATUS " Found flavor '${_flavour}', checking whether it's usable...no" ) 0294 message( STATUS " (${_not_found_reason})" ) 0295 endif() 0296 endif() 0297 0298 endforeach( _flavour ) 0299 0300 # ensure that they are cached 0301 # This comment above doesn't make sense, the four following lines seem to do nothing. Alex 0302 set( GPGME_INCLUDES ${GPGME_INCLUDES} ) 0303 set( GPGME_VANILLA_LIBRARIES ${GPGME_VANILLA_LIBRARIES} ) 0304 set( GPGME_PTHREAD_LIBRARIES ${GPGME_PTHREAD_LIBRARIES} ) 0305 set( GPGME_PTH_LIBRARIES ${GPGME_PTH_LIBRARIES} ) 0306 0307 if ( GPGME_VANILLA_FOUND OR GPGME_PTHREAD_FOUND OR GPGME_PTH_FOUND ) 0308 set( GPGME_FOUND true ) 0309 else() 0310 set( GPGME_FOUND false ) 0311 endif() 0312 0313 endif() 0314 0315 endif() 0316 0317 endif() 0318 0319 endif() 0320 0321 # these are Windows-only: 0322 set( GPGME_GLIB_FOUND false ) 0323 set( GPGME_QT_FOUND false ) 0324 set( HAVE_GPGME_GLIB 0 ) 0325 set( HAVE_GPGME_QT 0 ) 0326 0327 macro_bool_to_01( GPGME_FOUND HAVE_GPGME ) 0328 macro_bool_to_01( GPGME_VANILLA_FOUND HAVE_GPGME_VANILLA ) 0329 macro_bool_to_01( GPGME_PTHREAD_FOUND HAVE_GPGME_PTHREAD ) 0330 macro_bool_to_01( GPGME_PTH_FOUND HAVE_GPGME_PTH ) 0331 0332 endif() # WIN32 | Unix 0333 0334 0335 set( _gpgme_flavours "" ) 0336 0337 if ( GPGME_VANILLA_FOUND ) 0338 set( _gpgme_flavours "${_gpgme_flavours} vanilla" ) 0339 endif() 0340 0341 if ( GPGME_GLIB_FOUND ) 0342 set( _gpgme_flavours "${_gpgme_flavours} Glib" ) 0343 endif() 0344 0345 if ( GPGME_QT_FOUND ) 0346 set( _gpgme_flavours "${_gpgme_flavours} Qt" ) 0347 endif() 0348 0349 if ( GPGME_PTHREAD_FOUND ) 0350 set( _gpgme_flavours "${_gpgme_flavours} pthread" ) 0351 endif() 0352 0353 if ( GPGME_PTH_FOUND ) 0354 set( _gpgme_flavours "${_gpgme_flavours} pth" ) 0355 endif() 0356 0357 # determine the library in one of the found flavors, can be reused e.g. by FindQgpgme.cmake, Alex 0358 foreach(_currentFlavour vanilla glib qt pth pthread) 0359 if(NOT GPGME_LIBRARY_DIR) 0360 get_filename_component(GPGME_LIBRARY_DIR "${_gpgme_${_currentFlavour}_lib}" PATH) 0361 endif() 0362 endforeach() 0363 0364 include(FindPackageHandleStandardArgs) 0365 find_package_handle_standard_args(Gpgme 0366 REQUIRED_VARS GPGME_LIBRARIES 0367 VERSION_VAR GPGME_VERSION 0368 ) 0369 0370 if ( WIN32 ) 0371 set( _gpgme_homepage "https://www.gpg4win.org" ) 0372 else() 0373 set( _gpgme_homepage "https://www.gnupg.org/related_software/gpgme" ) 0374 endif() 0375 0376 set_package_properties(Gpgme PROPERTIES 0377 DESCRIPTION "The GnuPG Made Easy (GPGME) library)" 0378 URL ${_gpgme_homepage})