@@ -92,6 +92,62 @@ MACRO(RESET_SSL_VARIABLES)
9292 UNSET (HAVE_SHA512_DIGEST_LENGTH CACHE )
9393ENDMACRO ()
9494
95+ # Fetch OpenSSL version number.
96+ # OpenSSL < 3:
97+ # #define OPENSSL_VERSION_NUMBER 0x1000103fL
98+ # Encoded as MNNFFPPS: major minor fix patch status
99+ #
100+ # OpenSSL 3:
101+ # #define OPENSSL_VERSION_NUMBER
102+ # ( (OPENSSL_VERSION_MAJOR<<28)
103+ # |(OPENSSL_VERSION_MINOR<<20)
104+ # |(OPENSSL_VERSION_PATCH<<4)
105+ # |_OPENSSL_VERSION_PRE_RELEASE )
106+ MACRO (FIND_OPENSSL_VERSION)
107+ FOREACH (version_part
108+ OPENSSL_VERSION_MAJOR
109+ OPENSSL_VERSION_MINOR
110+ OPENSSL_VERSION_PATCH
111+ )
112+ FILE (STRINGS "${OPENSSL_INCLUDE_DIR} /openssl/opensslv.h" ${version_part}
113+ REGEX "^#[\t ]*define[\t ]+${version_part} [\t ]+([0-9]+).*" )
114+ STRING (REGEX REPLACE
115+ "^.*${version_part} [\t ]+([0-9]+).*" "\\ 1"
116+ ${version_part} "${${version_part} }" )
117+ ENDFOREACH ()
118+ IF (OPENSSL_VERSION_MAJOR VERSION_EQUAL 3)
119+ # OpenSSL 3
120+ SET (OPENSSL_MAJOR_VERSION "${OPENSSL_VERSION_MAJOR} " )
121+ SET (OPENSSL_MINOR_VERSION "${OPENSSL_VERSION_MINOR} " )
122+ SET (OPENSSL_FIX_VERSION "${OPENSSL_VERSION_PATCH} " )
123+ ELSE ()
124+ # Verify version number. Version information looks like:
125+ # #define OPENSSL_VERSION_NUMBER 0x1000103fL
126+ # Encoded as MNNFFPPS: major minor fix patch status
127+ FILE (STRINGS "${OPENSSL_INCLUDE_DIR} /openssl/opensslv.h"
128+ OPENSSL_VERSION_NUMBER
129+ REGEX "^#[ ]*define[\t ]+OPENSSL_VERSION_NUMBER[\t ]+0x[0-9].*"
130+ )
131+ STRING (REGEX REPLACE
132+ "^.*OPENSSL_VERSION_NUMBER[\t ]+0x([0-9]).*$" "\\ 1"
133+ OPENSSL_MAJOR_VERSION "${OPENSSL_VERSION_NUMBER} "
134+ )
135+ STRING (REGEX REPLACE
136+ "^.*OPENSSL_VERSION_NUMBER[\t ]+0x[0-9]([0-9][0-9]).*$" "\\ 1"
137+ OPENSSL_MINOR_VERSION "${OPENSSL_VERSION_NUMBER} "
138+ )
139+ STRING (REGEX REPLACE
140+ "^.*OPENSSL_VERSION_NUMBER[\t ]+0x[0-9][0-9][0-9]([0-9][0-9]).*$" "\\ 1"
141+ OPENSSL_FIX_VERSION "${OPENSSL_VERSION_NUMBER} "
142+ )
143+ ENDIF ()
144+ SET (OPENSSL_VERSION
145+ "${OPENSSL_MAJOR_VERSION} .${OPENSSL_MINOR_VERSION} .${OPENSSL_FIX_VERSION} "
146+ )
147+ SET (OPENSSL_VERSION ${OPENSSL_VERSION} CACHE INTERNAL "" )
148+ MESSAGE (STATUS "OPENSSL_VERSION (${WITH_SSL} ) is ${OPENSSL_VERSION} " )
149+ ENDMACRO (FIND_OPENSSL_VERSION)
150+
95151# MYSQL_CHECK_SSL
96152#
97153# Provides the following configure options:
@@ -194,30 +250,8 @@ MACRO (MYSQL_CHECK_SSL)
194250 ENDIF ()
195251
196252 IF (OPENSSL_INCLUDE_DIR)
197- # Verify version number. Version information looks like:
198- # #define OPENSSL_VERSION_NUMBER 0x1000103fL
199- # Encoded as MNNFFPPS: major minor fix patch status
200- FILE (STRINGS "${OPENSSL_INCLUDE_DIR} /openssl/opensslv.h"
201- OPENSSL_VERSION_NUMBER
202- REGEX "^#[ ]*define[\t ]+OPENSSL_VERSION_NUMBER[\t ]+0x[0-9].*"
203- )
204- STRING (REGEX REPLACE
205- "^.*OPENSSL_VERSION_NUMBER[\t ]+0x([0-9]).*$" "\\ 1"
206- OPENSSL_MAJOR_VERSION "${OPENSSL_VERSION_NUMBER} "
207- )
208- STRING (REGEX REPLACE
209- "^.*OPENSSL_VERSION_NUMBER[\t ]+0x[0-9]([0-9][0-9]).*$" "\\ 1"
210- OPENSSL_MINOR_VERSION "${OPENSSL_VERSION_NUMBER} "
211- )
212- STRING (REGEX REPLACE
213- "^.*OPENSSL_VERSION_NUMBER[\t ]+0x[0-9][0-9][0-9]([0-9][0-9]).*$" "\\ 1"
214- OPENSSL_FIX_VERSION "${OPENSSL_VERSION_NUMBER} "
215- )
253+ FIND_OPENSSL_VERSION()
216254 ENDIF ()
217- SET (OPENSSL_VERSION
218- "${OPENSSL_MAJOR_VERSION} .${OPENSSL_MINOR_VERSION} .${OPENSSL_FIX_VERSION} "
219- )
220- SET (OPENSSL_VERSION ${OPENSSL_VERSION} CACHE INTERNAL "" )
221255
222256 IF ("${OPENSSL_VERSION} " VERSION_GREATER "1.1.0" )
223257 ADD_DEFINITIONS (-DHAVE_TLSv13)
@@ -229,7 +263,8 @@ MACRO (MYSQL_CHECK_SSL)
229263 IF (OPENSSL_INCLUDE_DIR AND
230264 OPENSSL_LIBRARY AND
231265 CRYPTO_LIBRARY AND
232- OPENSSL_MAJOR_VERSION STREQUAL "1"
266+ (OPENSSL_MAJOR_VERSION STREQUAL "1" OR
267+ OPENSSL_MAJOR_VERSION STREQUAL "3" )
233268 )
234269 SET (OPENSSL_FOUND TRUE )
235270 ELSE ()
@@ -312,3 +347,16 @@ MACRO (MYSQL_CHECK_SSL)
312347 "Wrong option or path for WITH_SSL=${WITH_SSL} ." )
313348 ENDIF ()
314349ENDMACRO ()
350+
351+ # Downgrade OpenSSL 3 deprecation warnings.
352+ MACRO (DOWNGRADE_OPENSSL3_DEPRECATION_WARNINGS)
353+ IF (OPENSSL_MAJOR_VERSION VERSION_EQUAL 3)
354+ IF (MY_COMPILER_IS_GNU_OR_CLANG)
355+ ADD_COMPILE_FLAGS(${ARGV}
356+ COMPILE_FLAGS "-Wno-error=deprecated-declarations" )
357+ ELSEIF (WIN32 )
358+ ADD_COMPILE_FLAGS(${ARGV}
359+ COMPILE_FLAGS "/wd4996" )
360+ ENDIF ()
361+ ENDIF ()
362+ ENDMACRO ()
0 commit comments