diff options
Diffstat (limited to 'cmake/macros')
-rw-r--r-- | cmake/macros/FindOpenSSL.cmake | 181 |
1 files changed, 108 insertions, 73 deletions
diff --git a/cmake/macros/FindOpenSSL.cmake b/cmake/macros/FindOpenSSL.cmake index a2357af0742..826ae096e89 100644 --- a/cmake/macros/FindOpenSSL.cmake +++ b/cmake/macros/FindOpenSSL.cmake @@ -1,88 +1,123 @@ +# - Try to find the OpenSSL encryption library +# Once done this will define # -# Find the OpenSSL client includes and library -# +# OPENSSL_ROOT_DIR - Set this variable to the root installation of OpenSSL +# +# Read-Only variables: +# OPENSSL_FOUND - system has the OpenSSL library +# OPENSSL_INCLUDE_DIR - the OpenSSL include directory +# OPENSSL_LIBRARIES - The libraries needed to use OpenSSL + +#============================================================================= +# Copyright 2006-2009 Kitware, Inc. +# Copyright 2006 Alexander Neundorf <neundorf@kde.org> +# Copyright 2009-2010 Mathieu Malaterre <mathieu.malaterre@gmail.com> +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distributed this file outside of CMake, substitute the full +# License text for the above reference.) -# This module defines -# OPENSSL_INCLUDE_DIR, where to find openssl.h -# OPENSSL_LIBRARIES, the libraries to link against to connect to MySQL -# OPENSSL_FOUND, if false, you cannot build anything that requires MySQL. +# http://www.slproweb.com/products/Win32OpenSSL.html +SET(_OPENSSL_ROOT_HINTS + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;Inno Setup: App Path]" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (64-bit)_is1;Inno Setup: App Path]" + ) +SET(_OPENSSL_ROOT_PATHS + "C:/OpenSSL/" + ) +FIND_PATH(OPENSSL_ROOT_DIR + NAMES include/openssl/ssl.h + HINTS ${_OPENSSL_ROOT_HINTS} + PATHS ${_OPENSSL_ROOT_PATHS} +) +MARK_AS_ADVANCED(OPENSSL_ROOT_DIR) -# also defined, but not for general use are -# OPENSSL_LIBRARY, where to find the MySQL library. +# Re-use the previous path: +FIND_PATH(OPENSSL_INCLUDE_DIR openssl/ssl.h + ${OPENSSL_ROOT_DIR}/include +) - set(OPENSSL_FOUND 0) +IF(WIN32 AND NOT CYGWIN) + # MINGW should go here too + IF(MSVC) + # /MD and /MDd are the standard values - if someone wants to use + # others, the libnames have to change here too + # use also ssl and ssleay32 in debug as fallback for openssl < 0.9.8b + # TODO: handle /MT and static lib + # In Visual C++ naming convention each of these four kinds of Windows libraries has it's standard suffix: + # * MD for dynamic-release + # * MDd for dynamic-debug + # * MT for static-release + # * MTd for static-debug - if( MSVC ) - if(PLATFORM EQUAL 64) - set(TMP_OPENSSL_INCLUDE_DIR - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (64-bit)_is1;InstallLocation]/include" + # Implementation details: + # We are using the libraries located in the VC subdir instead of the parent directory eventhough : + # libeay32MD.lib is identical to ../libeay32.lib, and + # ssleay32MD.lib is identical to ../ssleay32.lib + FIND_LIBRARY(LIB_EAY_DEBUG NAMES libeay32MDd libeay32 + ${OPENSSL_ROOT_DIR}/lib/VC ) - set(TMP_OPENSSL_LIBRARIES - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (64-bit)_is1;InstallLocation]/lib" + FIND_LIBRARY(LIB_EAY_RELEASE NAMES libeay32MD libeay32 + ${OPENSSL_ROOT_DIR}/lib/VC ) - else() - set(TMP_OPENSSL_INCLUDE_DIR - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;InstallLocation]/include" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;InstallLocation]/include" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;InstallLocation]/include" + FIND_LIBRARY(SSL_EAY_DEBUG NAMES ssleay32MDd ssleay32 ssl + ${OPENSSL_ROOT_DIR}/lib/VC ) - set(TMP_OPENSSL_LIBRARIES - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;InstallLocation]/lib" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;InstallLocation]/lib" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;InstallLocation]/lib" + FIND_LIBRARY(SSL_EAY_RELEASE NAMES ssleay32MD ssleay32 ssl + ${OPENSSL_ROOT_DIR}/lib/VC ) + if( CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE ) + set( OPENSSL_LIBRARIES + optimized ${SSL_EAY_RELEASE} ${LIB_EAY_RELEASE} + debug ${SSL_EAY_DEBUG} ${LIB_EAY_DEBUG} + ) + else() + set( OPENSSL_LIBRARIES ${SSL_EAY_RELEASE} ${LIB_EAY_RELEASE} ) endif() - endif() + MARK_AS_ADVANCED(SSL_EAY_DEBUG SSL_EAY_RELEASE) + MARK_AS_ADVANCED(LIB_EAY_DEBUG LIB_EAY_RELEASE) + ELSEIF(MINGW) + # same player, for MingW + FIND_LIBRARY(LIB_EAY NAMES libeay32 + ${OPENSSL_ROOT_DIR}/lib/MinGW + ) + FIND_LIBRARY(SSL_EAY NAMES ssleay32 + ${OPENSSL_ROOT_DIR}/lib/MinGW + ) + MARK_AS_ADVANCED(SSL_EAY LIB_EAY) + set( OPENSSL_LIBRARIES ${SSL_EAY} ${LIB_EAY} ) + ELSE(MSVC) + # Not sure what to pick for -say- intel, let's use the toplevel ones and hope someone report issues: + FIND_LIBRARY(LIB_EAY NAMES libeay32 + ${OPENSSL_ROOT_DIR}/lib + ) + FIND_LIBRARY(SSL_EAY NAMES ssleay32 + ${OPENSSL_ROOT_DIR}/lib + ) + MARK_AS_ADVANCED(SSL_EAY LIB_EAY) + set( OPENSSL_LIBRARIES ${SSL_EAY} ${LIB_EAY} ) + ENDIF(MSVC) +ELSE(WIN32 AND NOT CYGWIN) - find_path(OPENSSL_INCLUDE_DIR - NAMES - openssl/ssl.h - PATHS - ${TMP_OPENSSL_INCLUDE_DIR} - /usr/include - /usr/include/openssl - /usr/local/include - /usr/local/include/openssl - /usr/local/openssl/include - DOC - "Specify the directory containing openssl.h." - ) + FIND_LIBRARY(OPENSSL_SSL_LIBRARIES NAMES ssl ssleay32 ssleay32MD) + FIND_LIBRARY(OPENSSL_CRYPTO_LIBRARIES NAMES crypto) + MARK_AS_ADVANCED(OPENSSL_CRYPTO_LIBRARIES OPENSSL_SSL_LIBRARIES) - find_library(OPENSSL_LIBRARIES - NAMES - ssleay32 - ssl - PATHS - ${TMP_OPENSSL_LIBRARIES} - /usr/lib - /usr/lib/ssl - /usr/local/lib - /usr/local/lib/ssl - /usr/local/ssl/lib - DOC "Specify the OpenSSL library here." - ) + SET(OPENSSL_LIBRARIES ${OPENSSL_SSL_LIBRARIES} ${OPENSSL_CRYPTO_LIBRARIES}) - if( WIN32 ) - find_library(OPENSSL_EXTRA_LIBRARIES - NAMES - libeay32 - PATHS - ${TMP_OPENSSL_LIBRARIES} - DOC - "if more libraries are necessary to link in a OpenSSL client, specify them here." - ) - endif( WIN32 ) +ENDIF(WIN32 AND NOT CYGWIN) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(OpenSSL DEFAULT_MSG + OPENSSL_LIBRARIES + OPENSSL_INCLUDE_DIR +) - if( OPENSSL_LIBRARIES ) - if( OPENSSL_INCLUDE_DIR ) - set( OPENSSL_FOUND 1 ) - message(STATUS "Found OpenSSL library: ${OPENSSL_LIBRARIES}") - message(STATUS "Found OpenSSL headers: ${OPENSSL_INCLUDE_DIR}") - else ( OPENSSL_INCLUDE_DIR ) - message(FATAL_ERROR "Could not find OpenSSL headers! Please install the development-headers") - endif( OPENSSL_INCLUDE_DIR ) - else( OPENSSL_LIBRARIES ) - message(FATAL_ERROR "Could not find OpenSSL libraries! Please install the library before continuing") - endif( OPENSSL_LIBRARIES ) +MARK_AS_ADVANCED(OPENSSL_INCLUDE_DIR OPENSSL_LIBRARIES) - mark_as_advanced( OPENSSL_FOUND OPENSSL_LIBRARIES OPENSSL_EXTRA_LIBRARIES OPENSSL_INCLUDE_DIR ) |