xref: /aosp_15_r20/external/libwebsockets/cmake/FindOpenSSLbins.cmake (revision 1c60b9aca93fdbc9b5f19b2d2194c91294b22281)
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