aboutsummaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2025-08-30 19:25:47 +0200
committerShauren <shauren.trinity@gmail.com>2025-08-30 22:55:25 +0200
commit521ec0b44459817964c8dedb3fac16e9b8c661f1 (patch)
tree65bbbb815200628f9e7da08483916722054a7d8f /cmake
parent101b0e07413899af9ba6c78b701daaca867e7cff (diff)
Dep/MySQL: Move required version checks to CMake, raise required version to 8.0.34 and remove strict compiled<->runtime version match requirement from non-Windows platforms
(cherry picked from commit b386971229f5ad389be9e22cbb96c39d79ac7beb)
Diffstat (limited to 'cmake')
-rw-r--r--cmake/macros/FindMySQL.cmake91
-rw-r--r--cmake/macros/FindMySQLVersion.c18
2 files changed, 65 insertions, 44 deletions
diff --git a/cmake/macros/FindMySQL.cmake b/cmake/macros/FindMySQL.cmake
index 1f3f8d406c5..c295b3eafc5 100644
--- a/cmake/macros/FindMySQL.cmake
+++ b/cmake/macros/FindMySQL.cmake
@@ -40,6 +40,10 @@ This module will set the following variables in your project:
MySQL library.
``MYSQL_EXECUTABLE``
Path to mysql client binary.
+``MYSQL_FLAVOR``
+ Flavor of mysql installation (MySQL or MariaDB).
+``MYSQL_VERSION``
+ MySQL version string.
Hints
^^^^^
@@ -47,6 +51,8 @@ Hints
Set ``MYSQL_ROOT_DIR`` to the root directory of MySQL installation.
#]=======================================================================]
+include(FindPackageHandleStandardArgs)
+
set(MYSQL_FOUND 0)
set(_MYSQL_ROOT_HINTS
@@ -219,30 +225,16 @@ endif(WIN32)
# On Windows you typically don't need to include any extra libraries
# to build MYSQL stuff.
-if(NOT WIN32)
- find_library(MYSQL_EXTRA_LIBRARIES
- NAMES
- z zlib
- PATHS
- /usr/lib
- /usr/local/lib
- DOC
- "if more libraries are necessary to link in a MySQL client (typically zlib), specify them here."
- )
-else(NOT WIN32)
- set(MYSQL_EXTRA_LIBRARIES "")
-endif(NOT WIN32)
-
if(UNIX)
- find_program(MYSQL_EXECUTABLE mysql
- PATHS
- ${MYSQL_CONFIG_PREFER_PATH}
- /usr/local/mysql/bin/
- /usr/local/bin/
- /usr/bin/
- DOC
- "path to your mysql binary."
- )
+ find_program(MYSQL_EXECUTABLE mysql
+ PATHS
+ ${MYSQL_CONFIG_PREFER_PATH}
+ /usr/local/mysql/bin/
+ /usr/local/bin/
+ /usr/bin/
+ DOC
+ "path to your mysql binary."
+ )
endif(UNIX)
if(WIN32)
@@ -291,7 +283,6 @@ foreach(_comp IN LISTS MySQL_FIND_COMPONENTS)
endforeach()
unset(_comp)
-include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(MySQL
REQUIRED_VARS
${MYSQL_REQUIRED_VARS}
@@ -301,25 +292,37 @@ find_package_handle_standard_args(MySQL
)
unset(MYSQL_REQUIRED_VARS)
-if(MYSQL_FOUND)
- if(MySQL_lib_WANTED AND MySQL_lib_FOUND)
- message(STATUS "Found MySQL library: ${MYSQL_LIBRARY}")
- message(STATUS "Found MySQL headers: ${MYSQL_INCLUDE_DIR}")
- endif()
- if(MySQL_binary_WANTED AND MySQL_binary_FOUND)
- message(STATUS "Found MySQL executable: ${MYSQL_EXECUTABLE}")
- endif()
- mark_as_advanced(MYSQL_FOUND MYSQL_LIBRARY MYSQL_EXTRA_LIBRARIES MYSQL_INCLUDE_DIR MYSQL_EXECUTABLE)
-
- if(NOT TARGET MySQL::MySQL AND MySQL_lib_WANTED AND MySQL_lib_FOUND)
- add_library(MySQL::MySQL UNKNOWN IMPORTED)
- set_target_properties(MySQL::MySQL
- PROPERTIES
- IMPORTED_LOCATION
- "${MYSQL_LIBRARY}"
- INTERFACE_INCLUDE_DIRECTORIES
- "${MYSQL_INCLUDE_DIR}")
+if(MySQL_lib_WANTED AND MySQL_lib_FOUND)
+ try_run(MYSQL_VERSION_DETECTED MYSQL_VERSION_COMPILED ${CMAKE_BINARY_DIR}
+ SOURCES "${CMAKE_CURRENT_LIST_DIR}/FindMySQLVersion.c"
+ CMAKE_FLAGS -DINCLUDE_DIRECTORIES=${MYSQL_INCLUDE_DIR}
+ LINK_LIBRARIES ${MYSQL_LIBRARY}
+ RUN_OUTPUT_VARIABLE MYSQL_VERSION_DETECTION_RUN_OUTPUT
+ )
+
+ string(JSON MYSQL_VERSION GET "${MYSQL_VERSION_DETECTION_RUN_OUTPUT}" "version")
+ string(JSON MYSQL_FLAVOR GET "${MYSQL_VERSION_DETECTION_RUN_OUTPUT}" "flavor")
+
+ if(MYSQL_MIN_VERSION_${MYSQL_FLAVOR} VERSION_GREATER MYSQL_VERSION)
+ message(FATAL_ERROR "Found ${MYSQL_FLAVOR} version: \"${MYSQL_VERSION}\", but required is at least \"${MYSQL_MIN_VERSION_${MYSQL_FLAVOR}}\"")
+ else()
+ message(STATUS "Found ${MYSQL_FLAVOR} version: \"${MYSQL_VERSION}\", minimum required is \"${MYSQL_MIN_VERSION_${MYSQL_FLAVOR}}\"")
endif()
-else()
- message(FATAL_ERROR "Could not find the MySQL libraries! Please install the development libraries and headers")
+
+ message(STATUS "Found ${MYSQL_FLAVOR} library: ${MYSQL_LIBRARY}")
+ message(STATUS "Found ${MYSQL_FLAVOR} headers: ${MYSQL_INCLUDE_DIR}")
+endif()
+if(MySQL_binary_WANTED AND MySQL_binary_FOUND)
+ message(STATUS "Found MySQL executable: ${MYSQL_EXECUTABLE}")
+endif()
+mark_as_advanced(MYSQL_FOUND MYSQL_LIBRARY MYSQL_INCLUDE_DIR MYSQL_EXECUTABLE)
+
+if(NOT TARGET MySQL::MySQL AND MySQL_lib_WANTED AND MySQL_lib_FOUND)
+ add_library(MySQL::MySQL UNKNOWN IMPORTED)
+ set_target_properties(MySQL::MySQL
+ PROPERTIES
+ IMPORTED_LOCATION
+ "${MYSQL_LIBRARY}"
+ INTERFACE_INCLUDE_DIRECTORIES
+ "${MYSQL_INCLUDE_DIR}")
endif()
diff --git a/cmake/macros/FindMySQLVersion.c b/cmake/macros/FindMySQLVersion.c
new file mode 100644
index 00000000000..80a9f2ec043
--- /dev/null
+++ b/cmake/macros/FindMySQLVersion.c
@@ -0,0 +1,18 @@
+#include <mysql.h>
+#include <stdio.h>
+
+int main()
+{
+ printf("{ "
+ "\"version\": \"%d.%d.%d\", "
+ "\"flavor\": \"%s\""
+ " }",
+ MYSQL_VERSION_ID / 10000, (MYSQL_VERSION_ID / 100) % 100, MYSQL_VERSION_ID % 100,
+#ifdef MARIADB_VERSION_ID
+ "MariaDB"
+#else
+ "MySQL"
+#endif
+ );
+ return 0;
+}