From 236b019980eb6e3eeb847705c4cbd795afc873b0 Mon Sep 17 00:00:00 2001 From: Brian Hinz Date: Wed, 19 Feb 2014 05:19:37 +0000 Subject: [PATCH] Fixes problems with cmake detection of GnuTLS. The current CMakeLists.txt uses check_function_exists to identify legacy versions of GnuTLS but cmake performs this test by linking a small test program. If libgnutls, libgcrypt, or libgpg-error are outside the default library search path, linking the test program fails even though gnutls and it's dependencies are installed. This patch makes it possible to specify the location of each of the three libraries independently and only as needed. git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@5160 3789f03b-4d11-0410-bbf8-ca57d06f2519 --- CMakeLists.txt | 12 +++++++++++ cmake/Modules/FindGcrypt.cmake | 36 +++++++++++++++++++++++++++++++ cmake/Modules/FindGpg_Error.cmake | 36 +++++++++++++++++++++++++++++++ 3 files changed, 84 insertions(+) create mode 100644 cmake/Modules/FindGcrypt.cmake create mode 100644 cmake/Modules/FindGpg_Error.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 46895666..0c78d15c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -303,8 +303,20 @@ endif() option(ENABLE_GNUTLS "Enable protocol encryption and advanced authentication" ON) if(ENABLE_GNUTLS) find_package(GnuTLS) + find_package(Gcrypt) + find_package(Gpg_Error) if (GNUTLS_FOUND) include_directories(${GNUTLS_INCLUDE_DIR}) + if (GCRYPT_FOUND) + include_directories(${GCRYPT_INCLUDE_DIR}) + set(GNUTLS_LIBRARIES ${GNUTLS_LIBRARIES};${GCRYPT_LIBRARIES}) + set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${GCRYPT_LIBRARIES}) + if (GPG_ERROR_FOUND) + include_directories(${GPG_ERROR_INCLUDE_DIR}) + set(GNUTLS_LIBRARIES ${GNUTLS_LIBRARIES};${GPG_ERROR_LIBRARIES}) + set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${GPG_ERROR_LIBRARIES}) + endif() + endif() add_definitions("-DHAVE_GNUTLS") add_definitions(${GNUTLS_DEFINITIONS}) diff --git a/cmake/Modules/FindGcrypt.cmake b/cmake/Modules/FindGcrypt.cmake new file mode 100644 index 00000000..2158081a --- /dev/null +++ b/cmake/Modules/FindGcrypt.cmake @@ -0,0 +1,36 @@ +# - Find gcrypt +# Find the native GCRYPT includes and library +# +# GCRYPT_FOUND - True if gcrypt found. +# GCRYPT_INCLUDE_DIR - where to find gcrypt.h, etc. +# GCRYPT_LIBRARIES - List of libraries when using gcrypt. + +if (GCRYPT_INCLUDE_DIR AND GCRYPT_LIBRARIES) + set(GCRYPT_FIND_QUIETLY TRUE) +endif (GCRYPT_INCLUDE_DIR AND GCRYPT_LIBRARIES) + +# Include dir +find_path(GCRYPT_INCLUDE_DIR + NAMES + gcrypt.h +) + +# Library +find_library(GCRYPT_LIBRARY + NAMES gcrypt +) + +# handle the QUIETLY and REQUIRED arguments and set GCRYPT_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(GCRYPT DEFAULT_MSG GCRYPT_LIBRARY GCRYPT_INCLUDE_DIR) + +IF(GCRYPT_FOUND) + SET( GCRYPT_LIBRARIES ${GCRYPT_LIBRARY} ) +ELSE(GCRYPT_FOUND) + SET( GCRYPT_LIBRARIES ) +ENDIF(GCRYPT_FOUND) + +# Lastly make it so that the GCRYPT_LIBRARY and GCRYPT_INCLUDE_DIR variables +# only show up under the advanced options in the gui cmake applications. +MARK_AS_ADVANCED( GCRYPT_LIBRARY GCRYPT_INCLUDE_DIR ) diff --git a/cmake/Modules/FindGpg_Error.cmake b/cmake/Modules/FindGpg_Error.cmake new file mode 100644 index 00000000..2f1d3725 --- /dev/null +++ b/cmake/Modules/FindGpg_Error.cmake @@ -0,0 +1,36 @@ +# - Find gpg-error +# Find the native GPG_ERROR includes and library +# +# GPG_ERROR_FOUND - True if gpg-error found. +# GPG_ERROR_INCLUDE_DIR - where to find gpg-error.h, etc. +# GPG_ERROR_LIBRARIES - List of libraries when using gpg-error. + +if (GPG_ERROR_INCLUDE_DIR AND GPG_ERROR_LIBRARIES) + set(GPG_ERROR_FIND_QUIETLY TRUE) +endif (GPG_ERROR_INCLUDE_DIR AND GPG_ERROR_LIBRARIES) + +# Include dir +find_path(GPG_ERROR_INCLUDE_DIR + NAMES + gpg-error.h +) + +# Library +find_library(GPG_ERROR_LIBRARY + NAMES gpg-error +) + +# handle the QUIETLY and REQUIRED arguments and set GPG_ERROR_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(GPG_ERROR DEFAULT_MSG GPG_ERROR_LIBRARY GPG_ERROR_INCLUDE_DIR) + +IF(GPG_ERROR_FOUND) + SET( GPG_ERROR_LIBRARIES ${GPG_ERROR_LIBRARY} ) +ELSE(GPG_ERROR_FOUND) + SET( GPG_ERROR_LIBRARIES ) +ENDIF(GPG_ERROR_FOUND) + +# Lastly make it so that the GPG_ERROR_LIBRARY and GPG_ERROR_INCLUDE_DIR variables +# only show up under the advanced options in the gui cmake applications. +MARK_AS_ADVANCED( GPG_ERROR_LIBRARY GPG_ERROR_INCLUDE_DIR ) -- 2.39.5