diff options
Diffstat (limited to 'cmake/macros/FindMySQL.cmake')
-rw-r--r-- | cmake/macros/FindMySQL.cmake | 91 |
1 files changed, 47 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() |