From eda35e8a52a304239c1ed27a5df5bd491eb132c3 Mon Sep 17 00:00:00 2001
From: vadim <tutumbul@gmail.com>
Date: Wed, 30 Dec 2020 09:52:21 +0300
Subject: [PATCH 1/3] Openssl v3 support

---
 cmake/ssl.cmake        | 63 ++++++++++++++++++++++++++++++------------
 mysys/my_md5.cc        |  8 ++++++
 vio/viosslfactories.cc | 26 ++++++++++++++++-
 3 files changed, 78 insertions(+), 19 deletions(-)

diff --git a/cmake/ssl.cmake b/cmake/ssl.cmake
index 52feadeaa3e6..56fe80102d4a 100644
--- a/cmake/ssl.cmake
+++ b/cmake/ssl.cmake
@@ -166,18 +166,56 @@ MACRO (MYSQL_CHECK_SSL)
     #   #define OPENSSL_VERSION_NUMBER 0x1000103fL
     # Encoded as MNNFFPPS: major minor fix patch status
     FILE(STRINGS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h"
-      OPENSSL_VERSION_NUMBER
-      REGEX "^#[ ]*define[\t ]+OPENSSL_VERSION_NUMBER[\t ]+0x[0-9].*"
-    )
-    STRING(REGEX REPLACE
-      "^.*OPENSSL_VERSION_NUMBER[\t ]+0x([0-9]).*$" "\\1"
-      OPENSSL_MAJOR_VERSION "${OPENSSL_VERSION_NUMBER}"
+      OPENSSL_MAJOR_VERSION
+      REGEX "^#[ ]*define[\t ]+OPENSSL_VERSION_MAJOR[\t ]+[0-9].*"
     )
+    IF(OPENSSL_MAJOR_VERSION STREQUAL "")
+      # Verify version number. Version information looks like:
+      #   #define OPENSSL_VERSION_NUMBER 0x1000103fL
+      # Encoded as MNNFFPPS: major minor fix patch status
+      FILE(STRINGS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h"
+        OPENSSL_VERSION_NUMBER
+        REGEX "^#[ ]*define[\t ]+OPENSSL_VERSION_NUMBER[\t ]+0x[0-9].*"
+        )
+      STRING(REGEX REPLACE
+        "^.*OPENSSL_VERSION_NUMBER[\t ]+0x([0-9]).*$" "\\1"
+        OPENSSL_MAJOR_VERSION "${OPENSSL_VERSION_NUMBER}"
+        )
+      STRING(REGEX REPLACE
+        "^.*OPENSSL_VERSION_NUMBER[\t ]+0x[0-9]([0-9][0-9]).*$" "\\1"
+        OPENSSL_MINOR_VERSION "${OPENSSL_VERSION_NUMBER}"
+        )
+      STRING(REGEX REPLACE
+        "^.*OPENSSL_VERSION_NUMBER[\t ]+0x[0-9][0-9][0-9]([0-9][0-9]).*$" "\\1"
+        OPENSSL_FIX_VERSION "${OPENSSL_VERSION_NUMBER}"
+        )
+    ELSE()
+      STRING(REGEX REPLACE
+        "^.*OPENSSL_VERSION_MAJOR[\t ]+([0-9]).*$" "\\1"
+        OPENSSL_MAJOR_VERSION "${OPENSSL_MAJOR_VERSION}"
+        )
+      FILE(STRINGS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h"
+        OPENSSL_MINOR_VERSION
+        REGEX "^#[ ]*define[\t ]+OPENSSL_VERSION_MINOR[\t ]+[0-9].*"
+        )
+      STRING(REGEX REPLACE
+        "^.*OPENSSL_VERSION_MINOR[\t ]+([0-9]).*$" "\\1"
+        OPENSSL_MINOR_VERSION "${OPENSSL_MINOR_VERSION}"
+        )
+      FILE(STRINGS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h"
+        OPENSSL_FIX_VERSION
+        REGEX "^#[ ]*define[\t ]+OPENSSL_VERSION_PATCH[\t ]+[0-9].*"
+        )
+      STRING(REGEX REPLACE
+        "^.*OPENSSL_VERSION_PATCH[\t ]+([0-9]).*$" "\\1"
+        OPENSSL_FIX_VERSION "${OPENSSL_FIX_VERSION}"
+        )
+    ENDIF()
 
     IF(OPENSSL_INCLUDE_DIR AND
        OPENSSL_LIBRARY   AND
        CRYPTO_LIBRARY      AND
-       OPENSSL_MAJOR_VERSION STREQUAL "1"
+       (OPENSSL_MAJOR_VERSION STREQUAL "1" OR OPENSSL_MAJOR_VERSION STREQUAL "3")
       )
       SET(OPENSSL_FOUND TRUE)
     ELSE()
