@@ -40,13 +40,19 @@ This module will set the following variables in your project:
4040 MySQL library.
4141``MYSQL_EXECUTABLE``
4242 Path to mysql client binary.
43+ ``MYSQL_FLAVOR``
44+ Flavor of mysql installation (MySQL or MariaDB).
45+ ``MYSQL_VERSION``
46+ MySQL version string.
4347
4448Hints
4549^^^^^
4650
4751Set ``MYSQL_ROOT_DIR`` to the root directory of MySQL installation.
4852#]=======================================================================]
4953
54+ include (FindPackageHandleStandardArgs)
55+
5056set (MYSQL_FOUND 0)
5157
5258set (_MYSQL_ROOT_HINTS
@@ -121,6 +127,7 @@ if(WIN32)
121127 "HKEY_LOCAL_MACHINE\\ SOFTWARE\\ MySQL AB" SUBKEYS
122128 VIEW BOTH
123129 )
130+ list (FILTER _MYSQL_ROOT_HINTS_SUBKEYS INCLUDE REGEX "^MySQL Server " )
124131 list (SORT _MYSQL_ROOT_HINTS_SUBKEYS COMPARE NATURAL ORDER DESCENDING)
125132
126133 set (_MYSQL_ROOT_HINTS_REGISTRY_LOCATIONS)
@@ -136,20 +143,42 @@ if(WIN32)
136143 list (APPEND _MYSQL_ROOT_HINTS_REGISTRY_LOCATIONS ${_MYSQL_ROOT_HINTS_REGISTRY_LOCATION} )
137144 endforeach ()
138145
146+ cmake_host_system_information (
147+ RESULT
148+ _MYSQL_ROOT_HINTS_SUBKEYS
149+ QUERY
150+ WINDOWS_REGISTRY
151+ "HKEY_LOCAL_MACHINE\\ SOFTWARE" SUBKEYS
152+ VIEW BOTH
153+ )
154+ list (FILTER _MYSQL_ROOT_HINTS_SUBKEYS INCLUDE REGEX "^MariaDB " )
155+ list (SORT _MYSQL_ROOT_HINTS_SUBKEYS COMPARE NATURAL ORDER DESCENDING)
156+
157+ foreach (subkey IN LISTS _MYSQL_ROOT_HINTS_SUBKEYS)
158+ cmake_host_system_information (
159+ RESULT
160+ _MYSQL_ROOT_HINTS_REGISTRY_LOCATION
161+ QUERY
162+ WINDOWS_REGISTRY
163+ "HKEY_LOCAL_MACHINE\\ SOFTWARE\\ ${subkey} " VALUE "INSTALLDIR"
164+ VIEW BOTH
165+ )
166+ list (APPEND _MYSQL_ROOT_HINTS_REGISTRY_LOCATIONS ${_MYSQL_ROOT_HINTS_REGISTRY_LOCATION} )
167+ endforeach ()
168+
139169 set (_MYSQL_ROOT_HINTS
140170 ${_MYSQL_ROOT_HINTS}
141171 ${_MYSQL_ROOT_HINTS_REGISTRY_LOCATIONS}
142- "[HKEY_LOCAL_MACHINE\\ SOFTWARE\\ MariaDB 10.4;INSTALLDIR]"
143- "[HKEY_LOCAL_MACHINE\\ SOFTWARE\\ MariaDB 10.4 (x64);INSTALLDIR]"
144- "[HKEY_LOCAL_MACHINE\\ SOFTWARE\\ MariaDB 10.5;INSTALLDIR]"
145- "[HKEY_LOCAL_MACHINE\\ SOFTWARE\\ MariaDB 10.5 (x64);INSTALLDIR]"
146172 )
147173
148174 file (GLOB _MYSQL_ROOT_PATHS_VERSION_SUBDIRECTORIES
149175 LIST_DIRECTORIES TRUE
150176 "${PROGRAM_FILES_64} /MySQL/MySQL Server *"
151177 "${PROGRAM_FILES_32} /MySQL/MySQL Server *"
152178 "$ENV{SystemDrive} /MySQL/MySQL Server *"
179+ "${PROGRAM_FILES_64} /MariaDB *"
180+ "${PROGRAM_FILES_32} /MariaDB *"
181+ "$ENV{SystemDrive} /MariaDB *"
153182 )
154183
155184 list (SORT _MYSQL_ROOT_PATHS_VERSION_SUBDIRECTORIES COMPARE NATURAL ORDER DESCENDING)
@@ -219,30 +248,16 @@ endif(WIN32)
219248# On Windows you typically don't need to include any extra libraries
220249# to build MYSQL stuff.
221250
222- if (NOT WIN32 )
223- find_library (MYSQL_EXTRA_LIBRARIES
224- NAMES
225- z zlib
226- PATHS
227- /usr/lib
228- /usr/local/lib
229- DOC
230- "if more libraries are necessary to link in a MySQL client (typically zlib), specify them here."
231- )
232- else (NOT WIN32 )
233- set (MYSQL_EXTRA_LIBRARIES "" )
234- endif (NOT WIN32 )
235-
236251if (UNIX )
237- find_program (MYSQL_EXECUTABLE mysql
238- PATHS
239- ${MYSQL_CONFIG_PREFER_PATH}
240- /usr/local/mysql/bin/
241- /usr/local/bin/
242- /usr/bin/
243- DOC
244- "path to your mysql binary."
245- )
252+ find_program (MYSQL_EXECUTABLE mysql
253+ PATHS
254+ ${MYSQL_CONFIG_PREFER_PATH}
255+ /usr/local/mysql/bin/
256+ /usr/local/bin/
257+ /usr/bin/
258+ DOC
259+ "path to your mysql binary."
260+ )
246261endif (UNIX )
247262
248263if (WIN32 )
@@ -291,7 +306,6 @@ foreach(_comp IN LISTS MySQL_FIND_COMPONENTS)
291306endforeach ()
292307unset (_comp)
293308
294- include (FindPackageHandleStandardArgs)
295309find_package_handle_standard_args(MySQL
296310 REQUIRED_VARS
297311 ${MYSQL_REQUIRED_VARS}
@@ -301,25 +315,37 @@ find_package_handle_standard_args(MySQL
301315)
302316unset (MYSQL_REQUIRED_VARS)
303317
304- if (MYSQL_FOUND)
305- if (MySQL_lib_WANTED AND MySQL_lib_FOUND)
306- message (STATUS "Found MySQL library: ${MYSQL_LIBRARY} " )
307- message (STATUS "Found MySQL headers: ${MYSQL_INCLUDE_DIR} " )
308- endif ()
309- if (MySQL_binary_WANTED AND MySQL_binary_FOUND)
310- message (STATUS "Found MySQL executable: ${MYSQL_EXECUTABLE} " )
311- endif ()
312- mark_as_advanced (MYSQL_FOUND MYSQL_LIBRARY MYSQL_EXTRA_LIBRARIES MYSQL_INCLUDE_DIR MYSQL_EXECUTABLE)
313-
314- if (NOT TARGET MySQL::MySQL AND MySQL_lib_WANTED AND MySQL_lib_FOUND)
315- add_library (MySQL::MySQL UNKNOWN IMPORTED )
316- set_target_properties (MySQL::MySQL
317- PROPERTIES
318- IMPORTED_LOCATION
319- "${MYSQL_LIBRARY} "
320- INTERFACE_INCLUDE_DIRECTORIES
321- "${MYSQL_INCLUDE_DIR} " )
318+ if (MySQL_lib_WANTED AND MySQL_lib_FOUND)
319+ try_run (MYSQL_VERSION_DETECTED MYSQL_VERSION_COMPILED ${CMAKE_BINARY_DIR}
320+ SOURCES "${CMAKE_CURRENT_LIST_DIR} /FindMySQLVersion.c"
321+ CMAKE_FLAGS -DINCLUDE_DIRECTORIES=${MYSQL_INCLUDE_DIR}
322+ LINK_LIBRARIES ${MYSQL_LIBRARY}
323+ RUN_OUTPUT_VARIABLE MYSQL_VERSION_DETECTION_RUN_OUTPUT
324+ )
325+
326+ string (JSON MYSQL_VERSION GET "${MYSQL_VERSION_DETECTION_RUN_OUTPUT} " "version" )
327+ string (JSON MYSQL_FLAVOR GET "${MYSQL_VERSION_DETECTION_RUN_OUTPUT} " "flavor" )
328+
329+ if (MYSQL_MIN_VERSION_${MYSQL_FLAVOR} VERSION_GREATER MYSQL_VERSION)
330+ message (FATAL_ERROR "Found ${MYSQL_FLAVOR} version: \" ${MYSQL_VERSION} \" , but required is at least \" ${MYSQL_MIN_VERSION_${MYSQL_FLAVOR} }\" " )
331+ else ()
332+ message (STATUS "Found ${MYSQL_FLAVOR} version: \" ${MYSQL_VERSION} \" , minimum required is \" ${MYSQL_MIN_VERSION_${MYSQL_FLAVOR} }\" " )
322333 endif ()
323- else ()
324- message (FATAL_ERROR "Could not find the MySQL libraries! Please install the development libraries and headers" )
334+
335+ message (STATUS "Found ${MYSQL_FLAVOR} library: ${MYSQL_LIBRARY} " )
336+ message (STATUS "Found ${MYSQL_FLAVOR} headers: ${MYSQL_INCLUDE_DIR} " )
337+ endif ()
338+ if (MySQL_binary_WANTED AND MySQL_binary_FOUND)
339+ message (STATUS "Found MySQL executable: ${MYSQL_EXECUTABLE} " )
340+ endif ()
341+ mark_as_advanced (MYSQL_FOUND MYSQL_LIBRARY MYSQL_INCLUDE_DIR MYSQL_EXECUTABLE)
342+
343+ if (NOT TARGET MySQL::MySQL AND MySQL_lib_WANTED AND MySQL_lib_FOUND)
344+ add_library (MySQL::MySQL UNKNOWN IMPORTED )
345+ set_target_properties (MySQL::MySQL
346+ PROPERTIES
347+ IMPORTED_LOCATION
348+ "${MYSQL_LIBRARY} "
349+ INTERFACE_INCLUDE_DIRECTORIES
350+ "${MYSQL_INCLUDE_DIR} " )
325351endif ()
0 commit comments