فهرست منبع

Fix FindOpenSSL on mingw. This has been reported to be working by ctrlaltca libero.it on cmake mailing list.

Mathieu Malaterre 16 سال پیش
والد
کامیت
7c9e5ba37f
1فایلهای تغییر یافته به همراه70 افزوده شده و 63 حذف شده
  1. 70 63
      Modules/FindOpenSSL.cmake

+ 70 - 63
Modules/FindOpenSSL.cmake

@@ -20,79 +20,86 @@
 # (To distributed this file outside of CMake, substitute the full
 #  License text for the above reference.)
 
-IF(OPENSSL_LIBRARIES)
-   SET(OpenSSL_FIND_QUIETLY TRUE)
-ENDIF(OPENSSL_LIBRARIES)
-
-IF(SSL_EAY_DEBUG AND SSL_EAY_RELEASE)
-   SET(LIB_FOUND 1)
-ENDIF(SSL_EAY_DEBUG AND SSL_EAY_RELEASE)
-
 # http://www.slproweb.com/products/Win32OpenSSL.html
 FIND_PATH(OPENSSL_INCLUDE_DIR openssl/ssl.h
   PATHS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;Inno Setup: App Path]/include"
 )
 
-IF(WIN32 AND MSVC)
-   # /MD and /MDd are the standard values - if somone 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
-
-   FIND_LIBRARY(LIB_EAY_DEBUG NAMES libeay32MDd libeay32
-     PATHS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;Inno Setup: App Path]/lib/VC"
-     )
-   FIND_LIBRARY(LIB_EAY_RELEASE NAMES libeay32MD libeay32
-     PATHS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;Inno Setup: App Path]/lib/VC"
-     )
-   FIND_LIBRARY(SSL_EAY_DEBUG NAMES ssleay32MDd ssl ssleay32
-     PATHS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;Inno Setup: App Path]/lib/VC"
-     )
-   FIND_LIBRARY(SSL_EAY_RELEASE NAMES ssleay32MD ssl ssleay32
-     PATHS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;Inno Setup: App Path]/lib/VC"
-     )
+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_IDE)
-      IF(SSL_EAY_DEBUG AND SSL_EAY_RELEASE)
-         SET(OPENSSL_LIBRARIES optimized ${SSL_EAY_RELEASE} ${LIB_EAY_RELEASE} debug ${SSL_EAY_DEBUG} ${LIB_EAY_DEBUG})
-      ELSE(SSL_EAY_DEBUG AND SSL_EAY_RELEASE)
-         SET(OPENSSL_LIBRARIES NOTFOUND)
-         MESSAGE(STATUS "Could not find the debug and release version of openssl")
-      ENDIF(SSL_EAY_DEBUG AND SSL_EAY_RELEASE)
-   ELSE(MSVC_IDE)
-      STRING(TOLOWER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_TOLOWER)
-      IF(CMAKE_BUILD_TYPE_TOLOWER MATCHES debug)
-         SET(OPENSSL_LIBRARIES ${SSL_EAY_DEBUG} ${LIB_EAY_DEBUG})
-      ELSE(CMAKE_BUILD_TYPE_TOLOWER MATCHES debug)
-         SET(OPENSSL_LIBRARIES ${SSL_EAY_RELEASE} ${LIB_EAY_RELEASE})
-      ENDIF(CMAKE_BUILD_TYPE_TOLOWER MATCHES debug)
-   ENDIF(MSVC_IDE)
-   MARK_AS_ADVANCED(SSL_EAY_DEBUG SSL_EAY_RELEASE)
-   MARK_AS_ADVANCED(LIB_EAY_DEBUG LIB_EAY_RELEASE)
-ELSE(WIN32 AND MSVC)
+    # 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
+      PATHS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;Inno Setup: App Path]/lib/VC"
+      )
+    FIND_LIBRARY(LIB_EAY_RELEASE NAMES libeay32MD libeay32
+      PATHS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;Inno Setup: App Path]/lib/VC"
+      )
+    FIND_LIBRARY(SSL_EAY_DEBUG NAMES ssleay32MDd ssleay32 ssl
+      PATHS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;Inno Setup: App Path]/lib/VC"
+      )
+    FIND_LIBRARY(SSL_EAY_RELEASE NAMES ssleay32MD ssleay32 ssl
+      PATHS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;Inno Setup: App Path]/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()
+    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
+      PATHS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;Inno Setup: App Path]/lib/MinGW"
+      )
+    FIND_LIBRARY(SSL_EAY NAMES ssleay32
+      PATHS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;Inno Setup: App Path]/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
+      PATHS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;Inno Setup: App Path]/lib"
+      )
+    FIND_LIBRARY(SSL_EAY NAMES ssleay32
+      PATHS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;Inno Setup: App Path]/lib"
+      )
+    MARK_AS_ADVANCED(SSL_EAY LIB_EAY)
+    set( OPENSSL_LIBRARIES ${SSL_EAY} ${LIB_EAY} )
+  ENDIF(MSVC)
+ELSE(WIN32 AND NOT CYGWIN)
 
-   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_SSL_LIBRARIES NAMES ssl ssleay32 ssleay32MD)
+  FIND_LIBRARY(OPENSSL_CRYPTO_LIBRARIES NAMES crypto)
+  MARK_AS_ADVANCED(OPENSSL_CRYPTO_LIBRARIES OPENSSL_SSL_LIBRARIES)
 
-   SET(OPENSSL_LIBRARIES ${OPENSSL_SSL_LIBRARIES} ${OPENSSL_CRYPTO_LIBRARIES})
+  SET(OPENSSL_LIBRARIES ${OPENSSL_SSL_LIBRARIES} ${OPENSSL_CRYPTO_LIBRARIES})
 
-ENDIF(WIN32 AND MSVC)
+ENDIF(WIN32 AND NOT CYGWIN)
 
-IF(OPENSSL_INCLUDE_DIR AND OPENSSL_LIBRARIES)
-   SET(OPENSSL_FOUND TRUE)
-ELSE(OPENSSL_INCLUDE_DIR AND OPENSSL_LIBRARIES)
-   SET(OPENSSL_FOUND FALSE)
-ENDIF (OPENSSL_INCLUDE_DIR AND OPENSSL_LIBRARIES)
-
-IF (OPENSSL_FOUND)
-   IF (NOT OpenSSL_FIND_QUIETLY)
-      MESSAGE(STATUS "Found OpenSSL: ${OPENSSL_LIBRARIES}")
-   ENDIF (NOT OpenSSL_FIND_QUIETLY)
-ELSE (OPENSSL_FOUND)
-   IF (OpenSSL_FIND_REQUIRED)
-      MESSAGE(FATAL_ERROR "Could NOT find OpenSSL")
-   ENDIF (OpenSSL_FIND_REQUIRED)
-ENDIF (OPENSSL_FOUND)
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(OpenSSL DEFAULT_MSG
+  OPENSSL_LIBRARIES 
+  OPENSSL_INCLUDE_DIR
+)
 
 MARK_AS_ADVANCED(OPENSSL_INCLUDE_DIR OPENSSL_LIBRARIES)