1d4afb5ceSopenharmony_ci 2d4afb5ceSopenharmony_ciif(OPENSSL_FOUND) 3d4afb5ceSopenharmony_ci 4d4afb5ceSopenharmony_ci find_program(OPENSSL_EXECUTABLE openssl openssl.exe bin/openssl.exe 5d4afb5ceSopenharmony_ci HINTS ${_OPENSSL_ROOT_HINTS} 6d4afb5ceSopenharmony_ci PATH 7d4afb5ceSopenharmony_ci /usr/bin/ 8d4afb5ceSopenharmony_ci bin/ 9d4afb5ceSopenharmony_ci DOC "Openssl executable") 10d4afb5ceSopenharmony_ci 11d4afb5ceSopenharmony_ci mark_as_advanced(OPENSSL_EXECUTABLE) 12d4afb5ceSopenharmony_ci 13d4afb5ceSopenharmony_ci # On Windows, we need to copy the OpenSSL dlls 14d4afb5ceSopenharmony_ci # to the output directory. 15d4afb5ceSopenharmony_ci # BUT only if non-static libs (referencing dlls) are used 16d4afb5ceSopenharmony_ci # In this case 17d4afb5ceSopenharmony_ci # ** we only want to find dlls that are compatible with the libs 18d4afb5ceSopenharmony_ci # the assumption is that these are part of the same OpenSSL package 19d4afb5ceSopenharmony_ci # and typically reside in the same or in a close by directory as the executable 20d4afb5ceSopenharmony_ci # ** we do NOT want to find dlls in general dll directories such as C:\Windows\systemXX 21d4afb5ceSopenharmony_ci # because these IN GENERAL are not compatible with the libs 22d4afb5ceSopenharmony_ci if (WIN32 AND OPENSSL_VERSION) 23d4afb5ceSopenharmony_ci set(OPENSSL_BIN_FOUND 0) 24d4afb5ceSopenharmony_ci 25d4afb5ceSopenharmony_ci # we check for OpenSSL versioning, as described in https://wiki.openssl.org/index.php/Versioning 26d4afb5ceSopenharmony_ci string(REGEX MATCH "^([0-9]+)\\.([0-9]+)\\.(.*)$" REGEX_MATCH ${OPENSSL_VERSION}) 27d4afb5ceSopenharmony_ci 28d4afb5ceSopenharmony_ci if (NOT ${REGEX_MATCH} EQUAL "") 29d4afb5ceSopenharmony_ci 30d4afb5ceSopenharmony_ci message(DEBUG "Assuming OpenSSL release ${OPENSSL_VERSION} >= 1.1.0 for dll discovery") 31d4afb5ceSopenharmony_ci 32d4afb5ceSopenharmony_ci # the regex matched - so we assume OpenSSL release >= 1.1 33d4afb5ceSopenharmony_ci set(OVNR "${CMAKE_MATCH_1}") # OpenSSL version number 34d4afb5ceSopenharmony_ci set(ORNR "${CMAKE_MATCH_2}") # OpenSSL release number 35d4afb5ceSopenharmony_ci set(CRYPTO32_NAME "libcrypto-${OVNR}_${ORNR}.dll") 36d4afb5ceSopenharmony_ci set(CRYPTO64_NAME "libcrypto-${OVNR}_${ORNR}-x64.dll") 37d4afb5ceSopenharmony_ci message(VERBOSE "CRYPTO32_NAME=${CRYPTO32_NAME}") 38d4afb5ceSopenharmony_ci message(VERBOSE "CRYPTO64_NAME=${CRYPTO64_NAME}") 39d4afb5ceSopenharmony_ci set(SSL32_NAME "libssl-${OVNR}_${ORNR}.dll") 40d4afb5ceSopenharmony_ci set(SSL64_NAME "libssl-${OVNR}_${ORNR}-x64.dll") 41d4afb5ceSopenharmony_ci message(VERBOSE "SSL32_NAME=${SSL32_NAME}") 42d4afb5ceSopenharmony_ci message(VERBOSE "SSL64_NAME=${SSL64_NAME}") 43d4afb5ceSopenharmony_ci 44d4afb5ceSopenharmony_ci get_filename_component(OPENSSL_EXECUTABLE_PATH ${OPENSSL_EXECUTABLE} DIRECTORY) 45d4afb5ceSopenharmony_ci message(VERBOSE "OPENSSL_EXECUTABLE_PATH=${OPENSSL_EXECUTABLE_PATH}") 46d4afb5ceSopenharmony_ci set(OPENSSL_EXECUTABLE_BIN_PATH "") 47d4afb5ceSopenharmony_ci string(REGEX MATCH "^(.*)/tools/openssl$" REGEX_MATCH "${OPENSSL_EXECUTABLE_PATH}") 48d4afb5ceSopenharmony_ci message(DEBUG "REGEX_MATCH=\"${REGEX_MATCH}\"") 49d4afb5ceSopenharmony_ci message(DEBUG "CMAKE_MATCH_1=\"${CMAKE_MATCH_1}\"") 50d4afb5ceSopenharmony_ci if (NOT ${REGEX_MATCH} EQUAL "") 51d4afb5ceSopenharmony_ci set(OPENSSL_EXECUTABLE_BIN_PATH "${CMAKE_MATCH_1}/bin") # bin path of this openssl variant 52d4afb5ceSopenharmony_ci endif() 53d4afb5ceSopenharmony_ci message(VERBOSE "OPENSSL_EXECUTABLE_BIN_PATH=${OPENSSL_EXECUTABLE_BIN_PATH}") 54d4afb5ceSopenharmony_ci 55d4afb5ceSopenharmony_ci unset(LIBCRYPTO_BIN) # clear 56d4afb5ceSopenharmony_ci unset(LIBCRYPTO_BIN CACHE) # clear as well, because otherwise find_file might use it 57d4afb5ceSopenharmony_ci find_file(LIBCRYPTO_BIN 58d4afb5ceSopenharmony_ci NO_DEFAULT_PATH 59d4afb5ceSopenharmony_ci NAMES ${CRYPTO32_NAME} ${CRYPTO64_NAME} 60d4afb5ceSopenharmony_ci PATHS ${OPENSSL_EXECUTABLE_PATH} ${OPENSSL_EXECUTABLE_BIN_PATH} 61d4afb5ceSopenharmony_ci ) 62d4afb5ceSopenharmony_ci message(VERBOSE "LIBCRYPTO_BIN=${LIBCRYPTO_BIN}") 63d4afb5ceSopenharmony_ci 64d4afb5ceSopenharmony_ci unset(LIBSSL_BIN) # clear 65d4afb5ceSopenharmony_ci unset(LIBSSL_BIN CACHE) # clear as well, because otherwise find_file might use it 66d4afb5ceSopenharmony_ci find_file(LIBSSL_BIN 67d4afb5ceSopenharmony_ci NO_DEFAULT_PATH 68d4afb5ceSopenharmony_ci NAMES ${SSL32_NAME} ${SSL64_NAME} 69d4afb5ceSopenharmony_ci PATHS ${OPENSSL_EXECUTABLE_PATH} ${OPENSSL_EXECUTABLE_BIN_PATH} 70d4afb5ceSopenharmony_ci ) 71d4afb5ceSopenharmony_ci message(VERBOSE "LIBSSL_BIN=${LIBSSL_BIN}") 72d4afb5ceSopenharmony_ci 73d4afb5ceSopenharmony_ci else() # the version regex did not match 74d4afb5ceSopenharmony_ci 75d4afb5ceSopenharmony_ci # as a fallback, we check for "old" OpenSSL library (used before OpenSSL 1.1.0) 76d4afb5ceSopenharmony_ci 77d4afb5ceSopenharmony_ci find_file(LIBCRYPTO_BIN 78d4afb5ceSopenharmony_ci NAMES 79d4afb5ceSopenharmony_ci libeay32.dll 80d4afb5ceSopenharmony_ci HINTS 81d4afb5ceSopenharmony_ci ${_OPENSSL_ROOT_HINTS} 82d4afb5ceSopenharmony_ci PATH_SUFFIXES 83d4afb5ceSopenharmony_ci bin) 84d4afb5ceSopenharmony_ci 85d4afb5ceSopenharmony_ci find_file(LIBSSL_BIN 86d4afb5ceSopenharmony_ci NAMES 87d4afb5ceSopenharmony_ci ssleay32.dll 88d4afb5ceSopenharmony_ci HINTS 89d4afb5ceSopenharmony_ci ${_OPENSSL_ROOT_HINTS} 90d4afb5ceSopenharmony_ci PATH_SUFFIXES 91d4afb5ceSopenharmony_ci bin) 92d4afb5ceSopenharmony_ci 93d4afb5ceSopenharmony_ci endif() 94d4afb5ceSopenharmony_ci 95d4afb5ceSopenharmony_ci if(LIBCRYPTO_BIN AND LIBSSL_BIN) 96d4afb5ceSopenharmony_ci set(OPENSSL_BIN_FOUND 1) 97d4afb5ceSopenharmony_ci endif() 98d4afb5ceSopenharmony_ci 99d4afb5ceSopenharmony_ci endif(WIN32 AND OPENSSL_VERSION) 100d4afb5ceSopenharmony_ci 101d4afb5ceSopenharmony_ciendif(OPENSSL_FOUND) 102d4afb5ceSopenharmony_ci 103