# This file is part of the TrinityCore Project. See AUTHORS file for Copyright information # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation; either version 2 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . #[=======================================================================[.rst: FindMySQL ----------- Find MySQL. Imported Targets ^^^^^^^^^^^^^^^^ This module defines the following :prop_tgt:`IMPORTED` targets: ``MySQL::MySQL`` MySQL client library, if found. Result Variables ^^^^^^^^^^^^^^^^ This module will set the following variables in your project: ``MYSQL_FOUND`` System has MySQL. ``MYSQL_INCLUDE_DIR`` MySQL include directory. ``MYSQL_LIBRARY`` MySQL library. ``MYSQL_EXECUTABLE`` Path to mysql client binary. ``MYSQL_FLAVOR`` Flavor of mysql installation (MySQL or MariaDB). ``MYSQL_VERSION`` MySQL version string. Hints ^^^^^ Set ``MYSQL_ROOT_DIR`` to the root directory of MySQL installation. #]=======================================================================] include(FindPackageHandleStandardArgs) set(MYSQL_FOUND 0) set(_MYSQL_ROOT_HINTS ${MYSQL_ROOT_DIR} ENV MYSQL_ROOT_DIR ) if(UNIX) set(MYSQL_CONFIG_PREFER_PATH "$ENV{MYSQL_HOME}/bin" CACHE FILEPATH "preferred path to MySQL (mysql_config)" ) find_program(MYSQL_CONFIG mysql_config ${MYSQL_CONFIG_PREFER_PATH} /usr/local/mysql/bin/ /usr/local/bin/ /usr/bin/ ) if(MYSQL_CONFIG) message(STATUS "Using mysql-config: ${MYSQL_CONFIG}") # set INCLUDE_DIR execute_process( COMMAND "${MYSQL_CONFIG}" --include OUTPUT_VARIABLE MY_TMP OUTPUT_STRIP_TRAILING_WHITESPACE ) string(REGEX REPLACE "-I([^ ]*)( .*)?" "\\1" MY_TMP "${MY_TMP}") set(MYSQL_ADD_INCLUDE_PATH ${MY_TMP} CACHE FILEPATH INTERNAL) #message("[DEBUG] MYSQL ADD_INCLUDE_PATH : ${MYSQL_ADD_INCLUDE_PATH}") # set LIBRARY_DIR execute_process( COMMAND "${MYSQL_CONFIG}" --libs_r OUTPUT_VARIABLE MY_TMP OUTPUT_STRIP_TRAILING_WHITESPACE ) set(MYSQL_ADD_LIBRARIES "") string(REGEX MATCHALL "-l[^ ]*" MYSQL_LIB_LIST "${MY_TMP}") foreach(LIB ${MYSQL_LIB_LIST}) string(REGEX REPLACE "[ ]*-l([^ ]*)" "\\1" LIB "${LIB}") list(APPEND MYSQL_ADD_LIBRARIES "${LIB}") #message("[DEBUG] MYSQL ADD_LIBRARIES : ${MYSQL_ADD_LIBRARIES}") endforeach(LIB ${MYSQL_LIB_LIST}) set(MYSQL_ADD_LIBRARIES_PATH "") string(REGEX MATCHALL "-L[^ ]*" MYSQL_LIBDIR_LIST "${MY_TMP}") foreach(LIB ${MYSQL_LIBDIR_LIST}) string(REGEX REPLACE "[ ]*-L([^ ]*)" "\\1" LIB "${LIB}") list(APPEND MYSQL_ADD_LIBRARIES_PATH "${LIB}") #message("[DEBUG] MYSQL ADD_LIBRARIES_PATH : ${MYSQL_ADD_LIBRARIES_PATH}") endforeach(LIB ${MYSQL_LIBS}) else(MYSQL_CONFIG) set(MYSQL_ADD_LIBRARIES "") list(APPEND MYSQL_ADD_LIBRARIES "mysqlclient_r") endif(MYSQL_CONFIG) endif(UNIX) set(_MYSQL_ROOT_PATHS) if(WIN32) # read environment variables and change \ to / file(TO_CMAKE_PATH "$ENV{PROGRAMFILES}" PROGRAM_FILES_32) file(TO_CMAKE_PATH "$ENV{ProgramW6432}" PROGRAM_FILES_64) cmake_host_system_information( RESULT _MYSQL_ROOT_HINTS_SUBKEYS QUERY WINDOWS_REGISTRY "HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB" SUBKEYS VIEW BOTH ) list(FILTER _MYSQL_ROOT_HINTS_SUBKEYS INCLUDE REGEX "^MySQL Server ") list(SORT _MYSQL_ROOT_HINTS_SUBKEYS COMPARE NATURAL ORDER DESCENDING) set(_MYSQL_ROOT_HINTS_REGISTRY_LOCATIONS) foreach(subkey IN LISTS _MYSQL_ROOT_HINTS_SUBKEYS) cmake_host_system_information( RESULT _MYSQL_ROOT_HINTS_REGISTRY_LOCATION QUERY WINDOWS_REGISTRY "HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\${subkey}" VALUE "Location" VIEW BOTH ) list(APPEND _MYSQL_ROOT_HINTS_REGISTRY_LOCATIONS ${_MYSQL_ROOT_HINTS_REGISTRY_LOCATION}) endforeach() cmake_host_system_information( RESULT _MYSQL_ROOT_HINTS_SUBKEYS QUERY WINDOWS_REGISTRY "HKEY_LOCAL_MACHINE\\SOFTWARE" SUBKEYS VIEW BOTH ) list(FILTER _MYSQL_ROOT_HINTS_SUBKEYS INCLUDE REGEX "^MariaDB ") list(SORT _MYSQL_ROOT_HINTS_SUBKEYS COMPARE NATURAL ORDER DESCENDING) foreach(subkey IN LISTS _MYSQL_ROOT_HINTS_SUBKEYS) cmake_host_system_information( RESULT _MYSQL_ROOT_HINTS_REGISTRY_LOCATION QUERY WINDOWS_REGISTRY "HKEY_LOCAL_MACHINE\\SOFTWARE\\${subkey}" VALUE "INSTALLDIR" VIEW BOTH ) list(APPEND _MYSQL_ROOT_HINTS_REGISTRY_LOCATIONS ${_MYSQL_ROOT_HINTS_REGISTRY_LOCATION}) endforeach() set(_MYSQL_ROOT_HINTS ${_MYSQL_ROOT_HINTS} ${_MYSQL_ROOT_HINTS_REGISTRY_LOCATIONS} ) file(GLOB _MYSQL_ROOT_PATHS_VERSION_SUBDIRECTORIES LIST_DIRECTORIES TRUE "${PROGRAM_FILES_64}/MySQL/MySQL Server *" "${PROGRAM_FILES_32}/MySQL/MySQL Server *" "$ENV{SystemDrive}/MySQL/MySQL Server *" "${PROGRAM_FILES_64}/MariaDB *" "${PROGRAM_FILES_32}/MariaDB *" "$ENV{SystemDrive}/MariaDB *" ) list(SORT _MYSQL_ROOT_PATHS_VERSION_SUBDIRECTORIES COMPARE NATURAL ORDER DESCENDING) set(_MYSQL_ROOT_PATHS ${_MYSQL_ROOT_PATHS} ${_MYSQL_ROOT_PATHS_VERSION_SUBDIRECTORIES} "${PROGRAM_FILES_64}/MySQL" "${PROGRAM_FILES_32}/MySQL" "$ENV{SystemDrive}/MySQL" ) endif(WIN32) find_path(MYSQL_INCLUDE_DIR NAMES mysql.h HINTS ${_MYSQL_ROOT_HINTS} PATHS ${MYSQL_ADD_INCLUDE_PATH} /usr/include /usr/include/mysql /usr/local/include /usr/local/include/mysql /usr/local/mysql/include ${_MYSQL_ROOT_PATHS} PATH_SUFFIXES include include/mysql DOC "Specify the directory containing mysql.h." ) if(UNIX) foreach(LIB ${MYSQL_ADD_LIBRARIES}) find_library(MYSQL_LIBRARY NAMES mysql libmysql ${LIB} PATHS ${MYSQL_ADD_LIBRARIES_PATH} /usr/lib /usr/lib/mysql /usr/local/lib /usr/local/lib/mysql /usr/local/mysql/lib DOC "Specify the location of the mysql library here." ) endforeach(LIB ${MYSQL_ADD_LIBRARY}) endif(UNIX) if(WIN32) find_library(MYSQL_LIBRARY NAMES libmysql libmariadb HINTS ${_MYSQL_ROOT_HINTS} PATHS ${MYSQL_ADD_LIBRARIES_PATH} ${_MYSQL_ROOT_PATHS} PATH_SUFFIXES lib lib/opt DOC "Specify the location of the mysql library here." ) endif(WIN32) # On Windows you typically don't need to include any extra libraries # to build MYSQL stuff. 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." ) endif(UNIX) if(WIN32) find_program(MYSQL_EXECUTABLE mysql HINTS ${_MYSQL_ROOT_HINTS} PATHS ${_MYSQL_ROOT_PATHS} PATH_SUFFIXES bin bin/opt DOC "path to your mysql binary." ) endif(WIN32) unset(MySQL_lib_WANTED) unset(MySQL_binary_WANTED) set(MYSQL_REQUIRED_VARS "") foreach(_comp IN LISTS MySQL_FIND_COMPONENTS) if(_comp STREQUAL "lib") set(MySQL_${_comp}_WANTED TRUE) if(MySQL_FIND_REQUIRED_${_comp}) list(APPEND MYSQL_REQUIRED_VARS "MYSQL_LIBRARY") list(APPEND MYSQL_REQUIRED_VARS "MYSQL_INCLUDE_DIR") endif() if(EXISTS "${MYSQL_LIBRARY}" AND EXISTS "${MYSQL_INCLUDE_DIR}") set(MySQL_${_comp}_FOUND TRUE) else() set(MySQL_${_comp}_FOUND FALSE) endif() elseif(_comp STREQUAL "binary") set(MySQL_${_comp}_WANTED TRUE) if(MySQL_FIND_REQUIRED_${_comp}) list(APPEND MYSQL_REQUIRED_VARS "MYSQL_EXECUTABLE") endif() if(EXISTS "${MYSQL_EXECUTABLE}" ) set(MySQL_${_comp}_FOUND TRUE) else() set(MySQL_${_comp}_FOUND FALSE) endif() else() message(WARNING "${_comp} is not a valid MySQL component") set(MySQL_${_comp}_FOUND FALSE) endif() endforeach() unset(_comp) find_package_handle_standard_args(MySQL REQUIRED_VARS ${MYSQL_REQUIRED_VARS} HANDLE_COMPONENTS FAIL_MESSAGE "Could not find the MySQL libraries! Please install the development libraries and headers" ) unset(MYSQL_REQUIRED_VARS) 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() 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()