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