diff --git a/cmake/icu.cmake b/cmake/icu.cmake
index ce9cc67..64445c5 100644
--- a/cmake/icu.cmake
+++ b/cmake/icu.cmake
@@ -40,49 +40,10 @@ SET(DEFAULT_ICU "bundled")
 # install_root is either 'system' or is assumed to be a path.
 #
 MACRO (FIND_ICU install_root)
-  IF("${install_root}" STREQUAL "system")
-    SET(EXTRA_FIND_LIB_ARGS)
-    SET(EXTRA_FIND_INC_ARGS)
-  ELSE()
-    SET(EXTRA_FIND_LIB_ARGS HINTS "${install_root}"
-      PATH_SUFFIXES "lib" "lib64" NO_DEFAULT_PATH)
-    SET(EXTRA_FIND_INC_ARGS HINTS "${install_root}"
-      PATH_SUFFIXES "include"     NO_DEFAULT_PATH)
-  ENDIF()
-
-  FIND_PATH(ICU_INCLUDE_DIR NAMES unicode/regex.h ${EXTRA_FIND_INC_ARGS})
-  IF (NOT ICU_INCLUDE_DIR)
-    MESSAGE(FATAL_ERROR "Cannot find ICU regular expression headers")
-  ENDIF()
-
-  IF(WIN32)
-    SET(ICU_LIBS icuuc icuio icudt icuin)
-  ELSE()
-    SET(ICU_LIBS icuuc icuio icudata icui18n)
-  ENDIF()
-
-  SET(ICU_SYSTEM_LIBRARIES)
-  FOREACH(ICU_LIB ${ICU_LIBS})
-    UNSET(ICU_LIB_PATH CACHE)
-    FIND_LIBRARY(ICU_LIB_PATH NAMES ${ICU_LIB} ${EXTRA_FIND_LIB_ARGS})
-    IF(NOT ICU_LIB_PATH)
-      MESSAGE(FATAL_ERROR "Cannot find the ICU library ${ICU_LIB}")
-    ENDIF()
-    LIST(APPEND ICU_SYSTEM_LIBRARIES ${ICU_LIB_PATH})
-  ENDFOREACH()
-
-  # To do: If we include the path in ICU_INCLUDE_DIR, it leads to GUnit
-  # picking up the wrong regex.h header. And it looks like we don't need it;
-  # at least on Linux, the header gets installed in an OS path anyway.
-  IF(NOT "${install_root}" STREQUAL "system")
-    SET(ICU_INCLUDE_DIRS ${ICU_INCLUDE_DIR})
-  ENDIF()
-
-  SET(ICU_LIBRARIES ${ICU_SYSTEM_LIBRARIES})
-
-  # Needed for version information.
-  SET(ICU_COMMON_DIR ${ICU_INCLUDE_DIR})
-
+  find_package(ICU REQUIRED COMPONENTS uc io dt in)
+  set(ICU_SYSTEM_LIBRARIES ICU::uc ICU::io ICU::dt ICU::in)
+  set(ICU_COMMON_DIR ${ICU_INCLUDE_DIR})
+  SET(ICU_INCLUDE_DIRS ${ICU_INCLUDE_DIR})
 ENDMACRO()
 
 MACRO (MYSQL_USE_BUNDLED_ICU)
diff --git a/cmake/lz4.cmake b/cmake/lz4.cmake
index 6e576c3..60cb8ba 100644
--- a/cmake/lz4.cmake
+++ b/cmake/lz4.cmake
@@ -25,7 +25,7 @@
 
 MACRO (FIND_SYSTEM_LZ4)
   FIND_PATH(PATH_TO_LZ4 NAMES lz4frame.h)
-  FIND_LIBRARY(LZ4_SYSTEM_LIBRARY NAMES lz4)
+  FIND_LIBRARY(LZ4_SYSTEM_LIBRARY NAMES lz4d lz4)
   IF (PATH_TO_LZ4 AND LZ4_SYSTEM_LIBRARY)
     SET(SYSTEM_LZ4_FOUND 1)
     INCLUDE_DIRECTORIES(SYSTEM ${PATH_TO_LZ4})
diff --git a/cmake/lzma.cmake b/cmake/lzma.cmake
index ac8aaa7..78d8e8d 100644
--- a/cmake/lzma.cmake
+++ b/cmake/lzma.cmake
@@ -24,15 +24,10 @@
 # bundled is the default
 
 MACRO (FIND_SYSTEM_LZMA)
-  FIND_PATH(PATH_TO_LZMA NAMES lzma/lzma.h)
-  FIND_LIBRARY(LZMA_SYSTEM_LIBRARY NAMES lzma)
-  IF (PATH_TO_LZMA AND LZMA_SYSTEM_LIBRARY)
-    SET(SYSTEM_LZMA_FOUND 1)
-    SET(LZMA_INCLUDE_DIR ${PATH_TO_LZMA})
-    SET(LZMA_LIBRARY ${LZMA_SYSTEM_LIBRARY})
-    MESSAGE(STATUS "LZMA_INCLUDE_DIR ${LZMA_INCLUDE_DIR}")
-    MESSAGE(STATUS "LZMA_LIBRARY ${LZMA_LIBRARY}")
-  ENDIF()
+  find_package(LibLZMA REQUIRED)
+  set(LZMA_INCLUDE_DIR ${LZMA_INCLUDE_DIRS})
+  set(LZMA_LIBRARY ${LZMA_LIBRARIES})
+  set(SYSTEM_LZMA_FOUND 1)
 ENDMACRO()
 
 MACRO (MYSQL_USE_BUNDLED_LZMA)
diff --git a/cmake/ssl.cmake b/cmake/ssl.cmake
index 8af9699..2bdfe14 100644
--- a/cmake/ssl.cmake
+++ b/cmake/ssl.cmake
@@ -104,6 +104,16 @@ ENDMACRO()
 # Provides the following configure options:
 # WITH_SSL=[yes|bundled|system|<path/to/custom/installation>]
 MACRO (MYSQL_CHECK_SSL)
+  find_package(OpenSSL REQUIRED)
+  set(OPENSSL_LIBRARY ${OPENSSL_SSL_LIBRARY} CACHE STRING "")
+  set(CRYPTO_LIBRARY ${OPENSSL_CRYPTO_LIBRARY} CACHE STRING "")
+  FIND_PROGRAM(OPENSSL_EXECUTABLE openssl
+        DOC "path to the openssl executable")
+  SET(SSL_DEFINES "-DHAVE_OPENSSL")
+  set(SSL_LIBRARIES ${OPENSSL_LIBRARIES})
+ENDMACRO()
+
+MACRO (MYSQL_CHECK_SSL_OLD)
   IF(NOT WITH_SSL)
     IF(WIN32)
       CHANGE_SSL_SETTINGS("bundled")
diff --git a/cmake/zlib.cmake b/cmake/zlib.cmake
index e74b8c9..6695075 100644
--- a/cmake/zlib.cmake
+++ b/cmake/zlib.cmake
@@ -51,27 +51,7 @@ MACRO (MYSQL_CHECK_ZLIB_WITH_COMPRESS)
   IF(WITH_ZLIB STREQUAL "bundled")
     MYSQL_USE_BUNDLED_ZLIB()
   ELSE()
-    SET(ZLIB_FIND_QUIETLY TRUE)
-    INCLUDE(FindZLIB)
-    IF(ZLIB_FOUND)
-     INCLUDE(CheckFunctionExists)
-      SET(CMAKE_REQUIRED_LIBRARIES z)
-      CHECK_FUNCTION_EXISTS(crc32 HAVE_CRC32)
-      CHECK_FUNCTION_EXISTS(compressBound HAVE_COMPRESSBOUND)
-      CHECK_FUNCTION_EXISTS(deflateBound HAVE_DEFLATEBOUND)
-      SET(CMAKE_REQUIRED_LIBRARIES)
-      IF(HAVE_CRC32 AND HAVE_COMPRESSBOUND AND HAVE_DEFLATEBOUND)
-        SET(ZLIB_LIBRARY ${ZLIB_LIBRARIES} CACHE INTERNAL "System zlib library")
-        SET(WITH_ZLIB "system" CACHE STRING
-          "Which zlib to use (possible values are 'bundled' or 'system')")
-        SET(ZLIB_SOURCES "")
-      ELSE()
-        SET(ZLIB_FOUND FALSE CACHE INTERNAL "Zlib found but not usable")
-        MESSAGE(STATUS "system zlib found but not usable")
-      ENDIF()
-    ENDIF()
-    IF(NOT ZLIB_FOUND)
-      MYSQL_USE_BUNDLED_ZLIB()
-    ENDIF()
+    find_package(ZLIB REQUIRED)
+    SET(ZLIB_LIBRARY ZLIB::ZLIB CACHE INTERNAL "System zlib library")
   ENDIF()
 ENDMACRO()
