103 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			CMake
		
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			CMake
		
	
	
	
| 
 | |
| if(OPENSSL_FOUND)
 | |
| 
 | |
| 	find_program(OPENSSL_EXECUTABLE openssl openssl.exe bin/openssl.exe
 | |
| 		HINTS ${_OPENSSL_ROOT_HINTS}
 | |
| 		PATH 
 | |
| 			/usr/bin/ 
 | |
| 			bin/
 | |
| 	  	DOC "Openssl executable")
 | |
| 
 | |
| 	mark_as_advanced(OPENSSL_EXECUTABLE)
 | |
| 	
 | |
| 	# On Windows, we need to copy the OpenSSL dlls 
 | |
| 	# to the output directory.
 | |
|   # BUT only if non-static libs (referencing dlls) are used
 | |
|   # In this case
 | |
|   # ** we only want to find dlls that are compatible with the libs
 | |
|   #    the assumption is that these are part of the same OpenSSL package
 | |
|   #    and typically reside in the same or in a close by directory as the executable
 | |
|   # ** we do NOT want to find dlls in general dll directories such as C:\Windows\systemXX
 | |
|   #    because these IN GENERAL are not compatible with the libs
 | |
| 	if (WIN32 AND OPENSSL_VERSION)
 | |
| 		set(OPENSSL_BIN_FOUND 0)
 | |
| 
 | |
|     # we check for OpenSSL versioning, as described in https://wiki.openssl.org/index.php/Versioning
 | |
|     string(REGEX MATCH "^([0-9]+)\\.([0-9]+)\\.(.*)$" REGEX_MATCH ${OPENSSL_VERSION})
 | |
| 
 | |
|     if (NOT ${REGEX_MATCH} EQUAL "")
 | |
| 
 | |
|       message(DEBUG "Assuming OpenSSL release ${OPENSSL_VERSION} >= 1.1.0 for dll discovery")
 | |
| 
 | |
|       # the regex matched - so we assume OpenSSL release >= 1.1
 | |
|       set(OVNR "${CMAKE_MATCH_1}") # OpenSSL version number
 | |
|       set(ORNR "${CMAKE_MATCH_2}") # OpenSSL release number
 | |
|       set(CRYPTO32_NAME "libcrypto-${OVNR}_${ORNR}.dll")
 | |
|       set(CRYPTO64_NAME "libcrypto-${OVNR}_${ORNR}-x64.dll")
 | |
|       message(VERBOSE "CRYPTO32_NAME=${CRYPTO32_NAME}")
 | |
|       message(VERBOSE "CRYPTO64_NAME=${CRYPTO64_NAME}")
 | |
|       set(SSL32_NAME "libssl-${OVNR}_${ORNR}.dll")
 | |
|       set(SSL64_NAME "libssl-${OVNR}_${ORNR}-x64.dll")
 | |
|       message(VERBOSE "SSL32_NAME=${SSL32_NAME}")
 | |
|       message(VERBOSE "SSL64_NAME=${SSL64_NAME}")
 | |
| 
 | |
|       get_filename_component(OPENSSL_EXECUTABLE_PATH ${OPENSSL_EXECUTABLE} DIRECTORY)
 | |
|       message(VERBOSE "OPENSSL_EXECUTABLE_PATH=${OPENSSL_EXECUTABLE_PATH}")
 | |
|       set(OPENSSL_EXECUTABLE_BIN_PATH "")
 | |
|       string(REGEX MATCH "^(.*)/tools/openssl$" REGEX_MATCH ${OPENSSL_EXECUTABLE_PATH})
 | |
|       message(DEBUG "REGEX_MATCH=\"${REGEX_MATCH}\"")
 | |
|       message(DEBUG "CMAKE_MATCH_1=\"${CMAKE_MATCH_1}\"")
 | |
|       if (NOT ${REGEX_MATCH} EQUAL "")
 | |
|         set(OPENSSL_EXECUTABLE_BIN_PATH "${CMAKE_MATCH_1}/bin") # bin path of this openssl variant
 | |
|       endif()
 | |
|       message(VERBOSE "OPENSSL_EXECUTABLE_BIN_PATH=${OPENSSL_EXECUTABLE_BIN_PATH}")
 | |
| 
 | |
|       unset(LIBCRYPTO_BIN)         # clear 
 | |
|       unset(LIBCRYPTO_BIN CACHE)   # clear as well, because otherwise find_file might use it
 | |
|       find_file(LIBCRYPTO_BIN
 | |
|         NO_DEFAULT_PATH
 | |
|         NAMES ${CRYPTO32_NAME} ${CRYPTO64_NAME}
 | |
|         PATHS ${OPENSSL_EXECUTABLE_PATH} ${OPENSSL_EXECUTABLE_BIN_PATH}
 | |
|       )
 | |
|       message(VERBOSE "LIBCRYPTO_BIN=${LIBCRYPTO_BIN}")
 | |
| 
 | |
|       unset(LIBSSL_BIN)         # clear 
 | |
|       unset(LIBSSL_BIN CACHE)   # clear as well, because otherwise find_file might use it
 | |
| 		  find_file(LIBSSL_BIN
 | |
|         NO_DEFAULT_PATH
 | |
|         NAMES ${SSL32_NAME} ${SSL64_NAME}
 | |
|         PATHS ${OPENSSL_EXECUTABLE_PATH} ${OPENSSL_EXECUTABLE_BIN_PATH}
 | |
|       )
 | |
|       message(VERBOSE "LIBSSL_BIN=${LIBSSL_BIN}")
 | |
| 
 | |
|     else() # the version regex did not match
 | |
|     
 | |
|     # as a fallback, we check for "old" OpenSSL library (used before OpenSSL 1.1.0)
 | |
| 
 | |
| 		find_file(LIBCRYPTO_BIN
 | |
| 			NAMES
 | |
| 			libeay32.dll
 | |
| 			HINTS
 | |
| 			${_OPENSSL_ROOT_HINTS}
 | |
| 			PATH_SUFFIXES
 | |
| 			bin)
 | |
| 		
 | |
| 		find_file(LIBSSL_BIN
 | |
| 			NAMES
 | |
| 			ssleay32.dll
 | |
| 			HINTS
 | |
| 			${_OPENSSL_ROOT_HINTS}
 | |
| 			PATH_SUFFIXES
 | |
| 			bin)
 | |
| 		
 | |
|     endif()
 | |
| 
 | |
| 		if(LIBCRYPTO_BIN AND LIBSSL_BIN)
 | |
|  			set(OPENSSL_BIN_FOUND 1)
 | |
| 		endif()
 | |
| 
 | |
| 	endif(WIN32 AND OPENSSL_VERSION)
 | |
| 		
 | |
| endif(OPENSSL_FOUND)
 | |
| 
 |