@@ -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
@@ -136,20 +142,42 @@ if(WIN32)
136142 list (APPEND _MYSQL_ROOT_HINTS_REGISTRY_LOCATIONS ${_MYSQL_ROOT_HINTS_REGISTRY_LOCATION} )
137143 endforeach ()
138144
145+ cmake_host_system_information (
146+ RESULT
147+ _MYSQL_ROOT_HINTS_SUBKEYS
148+ QUERY
149+ WINDOWS_REGISTRY
150+ "HKEY_LOCAL_MACHINE\\ SOFTWARE" SUBKEYS
151+ VIEW BOTH
152+ )
153+ list (FILTER _MYSQL_ROOT_HINTS_SUBKEYS INCLUDE REGEX "^MariaDB " )
154+ list (SORT _MYSQL_ROOT_HINTS_SUBKEYS COMPARE NATURAL ORDER DESCENDING)
155+
156+ foreach (subkey IN LISTS _MYSQL_ROOT_HINTS_SUBKEYS)
157+ cmake_host_system_information (
158+ RESULT
159+ _MYSQL_ROOT_HINTS_REGISTRY_LOCATION
160+ QUERY
161+ WINDOWS_REGISTRY
162+ "HKEY_LOCAL_MACHINE\\ SOFTWARE\\ ${subkey} " VALUE "INSTALLDIR"
163+ VIEW BOTH
164+ )
165+ list (APPEND _MYSQL_ROOT_HINTS_REGISTRY_LOCATIONS ${_MYSQL_ROOT_HINTS_REGISTRY_LOCATION} )
166+ endforeach ()
167+
139168 set (_MYSQL_ROOT_HINTS
140169 ${_MYSQL_ROOT_HINTS}
141170 ${_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]"
146171 )
147172
148173 file (GLOB _MYSQL_ROOT_PATHS_VERSION_SUBDIRECTORIES
149174 LIST_DIRECTORIES TRUE
150175 "${PROGRAM_FILES_64} /MySQL/MySQL Server *"
151176 "${PROGRAM_FILES_32} /MySQL/MySQL Server *"
152177 "$ENV{SystemDrive} /MySQL/MySQL Server *"
178+ "${PROGRAM_FILES_64} /MariaDB *"
179+ "${PROGRAM_FILES_32} /MariaDB *"
180+ "$ENV{SystemDrive} /MariaDB *"
153181 )
154182
155183 list (SORT _MYSQL_ROOT_PATHS_VERSION_SUBDIRECTORIES COMPARE NATURAL ORDER DESCENDING)
@@ -219,30 +247,16 @@ endif(WIN32)
219247# On Windows you typically don't need to include any extra libraries
220248# to build MYSQL stuff.
221249
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-
236250if (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- )
251+ find_program (MYSQL_EXECUTABLE mysql
252+ PATHS
253+ ${MYSQL_CONFIG_PREFER_PATH}
254+ /usr/local/mysql/bin/
255+ /usr/local/bin/
256+ /usr/bin/
257+ DOC
258+ "path to your mysql binary."
259+ )
246260endif (UNIX )
247261
248262if (WIN32 )
@@ -291,7 +305,6 @@ foreach(_comp IN LISTS MySQL_FIND_COMPONENTS)
291305endforeach ()
292306unset (_comp)
293307
294- include (FindPackageHandleStandardArgs)
295308find_package_handle_standard_args(MySQL
296309 REQUIRED_VARS
297310 ${MYSQL_REQUIRED_VARS}
@@ -301,25 +314,37 @@ find_package_handle_standard_args(MySQL
301314)
302315unset (MYSQL_REQUIRED_VARS)
303316
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} " )
317+ if (MySQL_lib_WANTED AND MySQL_lib_FOUND)
318+ try_run (MYSQL_VERSION_DETECTED MYSQL_VERSION_COMPILED ${CMAKE_BINARY_DIR}
319+ SOURCES "${CMAKE_CURRENT_LIST_DIR} /FindMySQLVersion.c"
320+ CMAKE_FLAGS -DINCLUDE_DIRECTORIES=${MYSQL_INCLUDE_DIR}
321+ LINK_LIBRARIES ${MYSQL_LIBRARY}
322+ RUN_OUTPUT_VARIABLE MYSQL_VERSION_DETECTION_RUN_OUTPUT
323+ )
324+
325+ string (JSON MYSQL_VERSION GET "${MYSQL_VERSION_DETECTION_RUN_OUTPUT} " "version" )
326+ string (JSON MYSQL_FLAVOR GET "${MYSQL_VERSION_DETECTION_RUN_OUTPUT} " "flavor" )
327+
328+ if (MYSQL_MIN_VERSION_${MYSQL_FLAVOR} VERSION_GREATER MYSQL_VERSION)
329+ message (FATAL_ERROR "Found ${MYSQL_FLAVOR} version: \" ${MYSQL_VERSION} \" , but required is at least \" ${MYSQL_MIN_VERSION_${MYSQL_FLAVOR} }\" " )
330+ else ()
331+ message (STATUS "Found ${MYSQL_FLAVOR} version: \" ${MYSQL_VERSION} \" , minimum required is \" ${MYSQL_MIN_VERSION_${MYSQL_FLAVOR} }\" " )
322332 endif ()
323- else ()
324- message (FATAL_ERROR "Could not find the MySQL libraries! Please install the development libraries and headers" )
333+
334+ message (STATUS "Found ${MYSQL_FLAVOR} library: ${MYSQL_LIBRARY} " )
335+ message (STATUS "Found ${MYSQL_FLAVOR} headers: ${MYSQL_INCLUDE_DIR} " )
336+ endif ()
337+ if (MySQL_binary_WANTED AND MySQL_binary_FOUND)
338+ message (STATUS "Found MySQL executable: ${MYSQL_EXECUTABLE} " )
339+ endif ()
340+ mark_as_advanced (MYSQL_FOUND MYSQL_LIBRARY MYSQL_INCLUDE_DIR MYSQL_EXECUTABLE)
341+
342+ if (NOT TARGET MySQL::MySQL AND MySQL_lib_WANTED AND MySQL_lib_FOUND)
343+ add_library (MySQL::MySQL UNKNOWN IMPORTED )
344+ set_target_properties (MySQL::MySQL
345+ PROPERTIES
346+ IMPORTED_LOCATION
347+ "${MYSQL_LIBRARY} "
348+ INTERFACE_INCLUDE_DIRECTORIES
349+ "${MYSQL_INCLUDE_DIR} " )
325350endif ()
0 commit comments