File: FindOpenSSLbins.cmake

package info (click to toggle)
libwebsockets 4.3.5-3
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 31,404 kB
  • sloc: ansic: 194,409; javascript: 1,550; sh: 1,387; cpp: 505; java: 461; perl: 405; xml: 118; makefile: 76; awk: 5
file content (102 lines) | stat: -rw-r--r-- 3,738 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102

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)