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