|
65 | 65 | # pkg-config --cflags openssl11 |
66 | 66 | # -I/usr/include/openssl11 |
67 | 67 |
|
| 68 | +SET(MIN_OPENSSL_VERSION_REQUIRED "1.0.0") |
| 69 | + |
68 | 70 | SET(WITH_SSL_DOC "\nsystem (use the OS openssl library)") |
69 | 71 | SET(WITH_SSL_DOC "\nopenssl[0-9]+ (use alternative system library)") |
70 | 72 | STRING_APPEND(WITH_SSL_DOC "\nyes (synonym for system)") |
@@ -108,28 +110,55 @@ MACRO(RESET_SSL_VARIABLES) |
108 | 110 | UNSET(HAVE_SHA512_DIGEST_LENGTH CACHE) |
109 | 111 | ENDMACRO(RESET_SSL_VARIABLES) |
110 | 112 |
|
| 113 | +# Fetch OpenSSL version number. |
| 114 | +# OpenSSL < 3: |
| 115 | +# #define OPENSSL_VERSION_NUMBER 0x1000103fL |
| 116 | +# Encoded as MNNFFPPS: major minor fix patch status |
| 117 | +# |
| 118 | +# OpenSSL 3: |
| 119 | +# #define OPENSSL_VERSION_NUMBER |
| 120 | +# ( (OPENSSL_VERSION_MAJOR<<28) |
| 121 | +# |(OPENSSL_VERSION_MINOR<<20) |
| 122 | +# |(OPENSSL_VERSION_PATCH<<4) |
| 123 | +# |_OPENSSL_VERSION_PRE_RELEASE ) |
111 | 124 | MACRO(FIND_OPENSSL_VERSION) |
112 | | - # Verify version number. Version information looks like: |
113 | | - # #define OPENSSL_VERSION_NUMBER 0x1000103fL |
114 | | - # Encoded as MNNFFPPS: major minor fix patch status |
115 | | - FILE(STRINGS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h" |
116 | | - OPENSSL_VERSION_NUMBER |
117 | | - REGEX "^#[ ]*define[\t ]+OPENSSL_VERSION_NUMBER[\t ]+0x[0-9].*" |
118 | | - ) |
119 | | - STRING(REGEX REPLACE |
120 | | - "^.*OPENSSL_VERSION_NUMBER[\t ]+0x([0-9]).*$" "\\1" |
121 | | - OPENSSL_MAJOR_VERSION "${OPENSSL_VERSION_NUMBER}" |
122 | | - ) |
123 | | - STRING(REGEX REPLACE |
124 | | - "^.*OPENSSL_VERSION_NUMBER[\t ]+0x[0-9]([0-9][0-9]).*$" "\\1" |
125 | | - OPENSSL_MINOR_VERSION "${OPENSSL_VERSION_NUMBER}" |
126 | | - ) |
127 | | - STRING(REGEX REPLACE |
128 | | - "^.*OPENSSL_VERSION_NUMBER[\t ]+0x[0-9][0-9][0-9]([0-9][0-9]).*$" "\\1" |
129 | | - OPENSSL_FIX_VERSION "${OPENSSL_VERSION_NUMBER}" |
130 | | - ) |
131 | | - SET(OPENSSL_MAJOR_MINOR_FIX_VERSION "${OPENSSL_MAJOR_VERSION}") |
132 | | - STRING_APPEND(OPENSSL_MAJOR_MINOR_FIX_VERSION ".${OPENSSL_MINOR_VERSION}") |
| 125 | + FOREACH(version_part |
| 126 | + OPENSSL_VERSION_MAJOR |
| 127 | + OPENSSL_VERSION_MINOR |
| 128 | + OPENSSL_VERSION_PATCH |
| 129 | + ) |
| 130 | + FILE(STRINGS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h" ${version_part} |
| 131 | + REGEX "^#[\t ]*define[\t ]+${version_part}[\t ]+([0-9]+).*") |
| 132 | + STRING(REGEX REPLACE |
| 133 | + "^.*${version_part}[\t ]+([0-9]+).*" "\\1" |
| 134 | + ${version_part} "${${version_part}}") |
| 135 | + ENDFOREACH() |
| 136 | + IF(OPENSSL_VERSION_MAJOR VERSION_EQUAL 3) |
| 137 | + # OpenSSL 3 |
| 138 | + SET(OPENSSL_FIX_VERSION "${OPENSSL_VERSION_PATCH}") |
| 139 | + ELSE() |
| 140 | + # Verify version number. Version information looks like: |
| 141 | + # #define OPENSSL_VERSION_NUMBER 0x1000103fL |
| 142 | + # Encoded as MNNFFPPS: major minor fix patch status |
| 143 | + FILE(STRINGS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h" |
| 144 | + OPENSSL_VERSION_NUMBER |
| 145 | + REGEX "^#[ ]*define[\t ]+OPENSSL_VERSION_NUMBER[\t ]+0x[0-9].*" |
| 146 | + ) |
| 147 | + STRING(REGEX REPLACE |
| 148 | + "^.*OPENSSL_VERSION_NUMBER[\t ]+0x([0-9]).*$" "\\1" |
| 149 | + OPENSSL_VERSION_MAJOR "${OPENSSL_VERSION_NUMBER}" |
| 150 | + ) |
| 151 | + STRING(REGEX REPLACE |
| 152 | + "^.*OPENSSL_VERSION_NUMBER[\t ]+0x[0-9]([0-9][0-9]).*$" "\\1" |
| 153 | + OPENSSL_VERSION_MINOR "${OPENSSL_VERSION_NUMBER}" |
| 154 | + ) |
| 155 | + STRING(REGEX REPLACE |
| 156 | + "^.*OPENSSL_VERSION_NUMBER[\t ]+0x[0-9][0-9][0-9]([0-9][0-9]).*$" "\\1" |
| 157 | + OPENSSL_FIX_VERSION "${OPENSSL_VERSION_NUMBER}" |
| 158 | + ) |
| 159 | + ENDIF() |
| 160 | + SET(OPENSSL_MAJOR_MINOR_FIX_VERSION "${OPENSSL_VERSION_MAJOR}") |
| 161 | + STRING_APPEND(OPENSSL_MAJOR_MINOR_FIX_VERSION ".${OPENSSL_VERSION_MINOR}") |
133 | 162 | STRING_APPEND(OPENSSL_MAJOR_MINOR_FIX_VERSION ".${OPENSSL_FIX_VERSION}") |
134 | 163 | MESSAGE(STATUS |
135 | 164 | "OPENSSL_VERSION (${WITH_SSL}) is ${OPENSSL_MAJOR_MINOR_FIX_VERSION}") |
@@ -327,25 +356,37 @@ MACRO (MYSQL_CHECK_SSL) |
327 | 356 | HINTS ${OPENSSL_ROOT_DIR}/include |
328 | 357 | ) |
329 | 358 | MESSAGE(STATUS "OPENSSL_APPLINK_C ${OPENSSL_APPLINK_C}") |
| 359 | + IF(NOT OPENSSL_APPLINK_C) |
| 360 | + RESET_SSL_VARIABLES() |
| 361 | + FATAL_SSL_NOT_FOUND_ERROR( |
| 362 | + "Cannot find applink.c for WITH_SSL=${WITH_SSL}.") |
| 363 | + ENDIF() |
330 | 364 | ENDIF() |
331 | 365 |
|
332 | 366 | FIND_LIBRARY(OPENSSL_LIBRARY |
333 | 367 | NAMES ssl libssl ssleay32 ssleay32MD |
334 | | - HINTS ${OPENSSL_ROOT_DIR}/lib) |
| 368 | + HINTS ${OPENSSL_ROOT_DIR}/lib ${OPENSSL_ROOT_DIR}/lib64) |
335 | 369 | FIND_LIBRARY(CRYPTO_LIBRARY |
336 | 370 | NAMES crypto libcrypto libeay32 |
337 | | - HINTS ${OPENSSL_ROOT_DIR}/lib) |
| 371 | + HINTS ${OPENSSL_ROOT_DIR}/lib ${OPENSSL_ROOT_DIR}/lib64) |
338 | 372 |
|
339 | 373 | IF(OPENSSL_INCLUDE_DIR) |
340 | 374 | FIND_OPENSSL_VERSION() |
341 | 375 | ENDIF() |
| 376 | + IF (OPENSSL_MAJOR_MINOR_FIX_VERSION VERSION_LESS |
| 377 | + ${MIN_OPENSSL_VERSION_REQUIRED}) |
| 378 | + RESET_SSL_VARIABLES() |
| 379 | + FATAL_SSL_NOT_FOUND_ERROR( |
| 380 | + "Not a supported openssl version in WITH_SSL=${WITH_SSL}.") |
| 381 | + ENDIF() |
| 382 | + |
342 | 383 | IF("${OPENSSL_MAJOR_MINOR_FIX_VERSION}" VERSION_GREATER "1.1.0") |
343 | 384 | ADD_DEFINITIONS(-DHAVE_TLSv13) |
344 | 385 | ENDIF() |
| 386 | + |
345 | 387 | IF(OPENSSL_INCLUDE_DIR AND |
346 | | - OPENSSL_LIBRARY AND |
347 | | - CRYPTO_LIBRARY AND |
348 | | - OPENSSL_MAJOR_VERSION STREQUAL "1" |
| 388 | + OPENSSL_LIBRARY AND |
| 389 | + CRYPTO_LIBRARY |
349 | 390 | ) |
350 | 391 | SET(OPENSSL_FOUND TRUE) |
351 | 392 | IF(WITH_SSL_PATH) |
@@ -412,8 +453,8 @@ MACRO (MYSQL_CHECK_SSL) |
412 | 453 | MESSAGE(STATUS "OPENSSL_LIBRARY = ${OPENSSL_LIBRARY}") |
413 | 454 | MESSAGE(STATUS "CRYPTO_LIBRARY = ${CRYPTO_LIBRARY}") |
414 | 455 | MESSAGE(STATUS "OPENSSL_LIB_DIR = ${OPENSSL_LIB_DIR}") |
415 | | - MESSAGE(STATUS "OPENSSL_MAJOR_VERSION = ${OPENSSL_MAJOR_VERSION}") |
416 | | - MESSAGE(STATUS "OPENSSL_MINOR_VERSION = ${OPENSSL_MINOR_VERSION}") |
| 456 | + MESSAGE(STATUS "OPENSSL_VERSION_MAJOR = ${OPENSSL_VERSION_MAJOR}") |
| 457 | + MESSAGE(STATUS "OPENSSL_VERSION_MINOR = ${OPENSSL_VERSION_MINOR}") |
417 | 458 | MESSAGE(STATUS "OPENSSL_FIX_VERSION = ${OPENSSL_FIX_VERSION}") |
418 | 459 |
|
419 | 460 | INCLUDE(CheckSymbolExists) |
@@ -669,15 +710,21 @@ MACRO(MYSQL_CHECK_SSL_DLLS) |
669 | 710 | GET_FILENAME_COMPONENT(OPENSSL_NAME "${OPENSSL_LIBRARY}" NAME_WE) |
670 | 711 |
|
671 | 712 | # Different naming scheme for the matching .dll as of SSL 1.1 |
| 713 | + # OpenSSL 3.x Look for libcrypto-3-x64.dll or libcrypto-3.dll |
| 714 | + # OpenSSL 1.1 Look for libcrypto-1_1-x64.dll or libcrypto-1_1.dll |
| 715 | + # OpenSSL 1.0 Look for libeay32.dll |
672 | 716 | SET(SSL_MSVC_VERSION_SUFFIX) |
673 | 717 | SET(SSL_MSVC_ARCH_SUFFIX) |
674 | | - IF(OPENSSL_MINOR_VERSION VERSION_EQUAL 1) |
| 718 | + IF(OPENSSL_VERSION_MAJOR VERSION_EQUAL 1 AND |
| 719 | + OPENSSL_VERSION_MINOR VERSION_EQUAL 1) |
675 | 720 | SET(SSL_MSVC_VERSION_SUFFIX "-1_1") |
676 | 721 | SET(SSL_MSVC_ARCH_SUFFIX "-x64") |
677 | 722 | ENDIF() |
| 723 | + IF(OPENSSL_VERSION_MAJOR VERSION_EQUAL 3) |
| 724 | + SET(SSL_MSVC_VERSION_SUFFIX "-3") |
| 725 | + SET(SSL_MSVC_ARCH_SUFFIX "-x64") |
| 726 | + ENDIF() |
678 | 727 |
|
679 | | - # OpenSSL 1.1 Look for libcrypto-1_1-x64.dll or libcrypto-1_1.dll |
680 | | - # OpenSSL 1.0 Look for libeay32.dll |
681 | 728 | FIND_FILE(HAVE_CRYPTO_DLL |
682 | 729 | NAMES |
683 | 730 | "${CRYPTO_NAME}${SSL_MSVC_VERSION_SUFFIX}${SSL_MSVC_ARCH_SUFFIX}.dll" |
@@ -717,11 +764,25 @@ MACRO(MYSQL_CHECK_SSL_DLLS) |
717 | 764 | ADD_DEPENDENCIES(${openssl_exe_target} copy_openssl_dlls) |
718 | 765 | ELSE() |
719 | 766 | MESSAGE(STATUS "Cannot find SSL dynamic libraries") |
720 | | - IF(OPENSSL_MINOR_VERSION VERSION_EQUAL 1) |
| 767 | + IF(OPENSSL_VERSION_MAJOR VERSION_EQUAL 1 AND |
| 768 | + OPENSSL_VERSION_MINOR VERSION_EQUAL 1) |
721 | 769 | SET(SSL_LIBRARIES ${SSL_LIBRARIES} crypt32.lib) |
722 | 770 | MESSAGE(STATUS "SSL_LIBRARIES ${SSL_LIBRARIES}") |
723 | 771 | ENDIF() |
724 | 772 | ENDIF() |
725 | 773 | ENDIF() |
726 | 774 | ENDIF() |
727 | 775 | ENDMACRO() |
| 776 | + |
| 777 | +# Downgrade OpenSSL 3 deprecation warnings. |
| 778 | +MACRO(DOWNGRADE_OPENSSL3_DEPRECATION_WARNINGS) |
| 779 | + IF(OPENSSL_VERSION_MAJOR VERSION_EQUAL 3) |
| 780 | + IF(MY_COMPILER_IS_GNU_OR_CLANG) |
| 781 | + ADD_COMPILE_FLAGS(${ARGV} |
| 782 | + COMPILE_FLAGS "-Wno-error=deprecated-declarations") |
| 783 | + ELSEIF(WIN32) |
| 784 | + ADD_COMPILE_FLAGS(${ARGV} |
| 785 | + COMPILE_FLAGS "/wd4996") |
| 786 | + ENDIF() |
| 787 | + ENDIF() |
| 788 | +ENDMACRO() |
0 commit comments