diff options
author | Shauren <shauren.trinity@gmail.com> | 2022-06-20 22:43:22 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-06-20 22:43:22 +0200 |
commit | ae6b9e6c41f882f6c0a48a6352b73b3ae098e012 (patch) | |
tree | 625defbb2c6e2fe38c12a06572c57678f2c1a487 /cmake | |
parent | d85379faa6d5d33f755e17cb0204f243345db938 (diff) |
Build: Modernize mysql finding script
Diffstat (limited to 'cmake')
-rw-r--r-- | cmake/macros/FindMySQL.cmake | 279 |
1 files changed, 171 insertions, 108 deletions
diff --git a/cmake/macros/FindMySQL.cmake b/cmake/macros/FindMySQL.cmake index dcac4ac3329..a1bf1fb274d 100644 --- a/cmake/macros/FindMySQL.cmake +++ b/cmake/macros/FindMySQL.cmake @@ -1,18 +1,59 @@ +# This file is part of the TrinityCore Project. See AUTHORS file for Copyright information # -# Find the MySQL client includes and library +# 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 <http://www.gnu.org/licenses/>. + +#[=======================================================================[.rst: +FindMySQL +----------- + +Find MySQL. + +Imported Targets +^^^^^^^^^^^^^^^^ + +This module defines the following :prop_tgt:`IMPORTED` targets: + +``MySQL::MySQL`` + MySQL client library, if found. -# This module defines -# MYSQL_INCLUDE_DIR, where to find mysql.h -# MYSQL_LIBRARIES, the libraries to link against to connect to MySQL -# MYSQL_EXECUTABLE, the MySQL executable. -# MYSQL_FOUND, if false, you cannot build anything that requires MySQL. +Result Variables +^^^^^^^^^^^^^^^^ -# also defined, but not for general use are -# MYSQL_LIBRARY, where to find the MySQL library. +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. + +Hints +^^^^^ + +Set ``MYSQL_ROOT_DIR`` to the root directory of MySQL installation. +#]=======================================================================] 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)" @@ -65,20 +106,15 @@ endif(UNIX) if(WIN32) # read environment variables and change \ to / - SET(PROGRAM_FILES_32 $ENV{ProgramFiles}) - if(${PROGRAM_FILES_32}) - STRING(REPLACE "\\\\" "/" PROGRAM_FILES_32 ${PROGRAM_FILES_32}) - endif(${PROGRAM_FILES_32}) - - SET(PROGRAM_FILES_64 $ENV{ProgramW6432}) - if(${PROGRAM_FILES_64}) - STRING(REPLACE "\\\\" "/" PROGRAM_FILES_64 ${PROGRAM_FILES_64}) - endif(${PROGRAM_FILES_64}) + file(TO_CMAKE_PATH "$ENV{PROGRAMFILES}" PROGRAM_FILES_32) + file(TO_CMAKE_PATH "$ENV{ProgramW6432}" PROGRAM_FILES_64) endif(WIN32) find_path(MYSQL_INCLUDE_DIR NAMES mysql.h + HINTS + ${_MYSQL_ROOT_HINTS} PATHS ${MYSQL_ADD_INCLUDE_PATH} /usr/include @@ -86,28 +122,28 @@ find_path(MYSQL_INCLUDE_DIR /usr/local/include /usr/local/include/mysql /usr/local/mysql/include - "${PROGRAM_FILES_64}/MySQL/MySQL Server 8.0/include" - "${PROGRAM_FILES_64}/MySQL/MySQL Server 5.7/include" - "${PROGRAM_FILES_64}/MySQL/include" - "${PROGRAM_FILES_32}/MySQL/MySQL Server 8.0/include" - "${PROGRAM_FILES_32}/MySQL/MySQL Server 5.7/include" - "${PROGRAM_FILES_32}/MySQL/include" - "C:/MySQL/include" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 8.0;Location]/include" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.7;Location]/include" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 8.0;Location]/include" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.7;Location]/include" - "$ENV{ProgramFiles}/MySQL/MySQL Server 8.0/include" - "$ENV{ProgramFiles}/MySQL/MySQL Server 5.7/include" - "$ENV{SystemDrive}/MySQL/MySQL Server 8.0/include" - "$ENV{SystemDrive}/MySQL/MySQL Server 5.7/include" + "${PROGRAM_FILES_64}/MySQL/MySQL Server 8.0" + "${PROGRAM_FILES_64}/MySQL/MySQL Server 5.7/" + "${PROGRAM_FILES_64}/MySQL" + "${PROGRAM_FILES_32}/MySQL/MySQL Server 8.0" + "${PROGRAM_FILES_32}/MySQL/MySQL Server 5.7" + "${PROGRAM_FILES_32}/MySQL" + "C:/MySQL" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 8.0;Location]" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.7;Location]" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 8.0;Location]" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.7;Location]" + "$ENV{SystemDrive}/MySQL/MySQL Server 8.0" + "$ENV{SystemDrive}/MySQL/MySQL Server 5.7" "c:/msys/local/include" - "$ENV{MYSQL_ROOT}/include" - "$ENV{MYSQL_ROOT}/include/mysql" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MariaDB 10.4;INSTALLDIR]/include/mysql" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MariaDB 10.4 (x64);INSTALLDIR]/include/mysql" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MariaDB 10.5;INSTALLDIR]/include/mysql" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MariaDB 10.5 (x64);INSTALLDIR]/include/mysql" + "$ENV{MYSQL_ROOT}" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MariaDB 10.4;INSTALLDIR]" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MariaDB 10.4 (x64);INSTALLDIR]" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MariaDB 10.5;INSTALLDIR]" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MariaDB 10.5 (x64);INSTALLDIR]" + PATH_SUFFIXES + include + include/mysql DOC "Specify the directory containing mysql.h." ) @@ -133,37 +169,32 @@ if(WIN32) find_library(MYSQL_LIBRARY NAMES libmysql libmariadb + HINTS + ${_MYSQL_ROOT_HINTS} PATHS ${MYSQL_ADD_LIBRARIES_PATH} - "${PROGRAM_FILES_64}/MySQL/MySQL Server 8.0/lib" - "${PROGRAM_FILES_64}/MySQL/MySQL Server 5.7/lib" - "${PROGRAM_FILES_64}/MySQL/MySQL Server 8.0/lib/opt" - "${PROGRAM_FILES_64}/MySQL/MySQL Server 5.7/lib/opt" + "${PROGRAM_FILES_64}/MySQL/MySQL Server 8.0" + "${PROGRAM_FILES_64}/MySQL/MySQL Server 5.7" "${PROGRAM_FILES_64}/MySQL/lib" - "${PROGRAM_FILES_32}/MySQL/MySQL Server 8.0/lib" - "${PROGRAM_FILES_32}/MySQL/MySQL Server 5.7/lib" - "${PROGRAM_FILES_32}/MySQL/MySQL Server 8.0/lib/opt" - "${PROGRAM_FILES_32}/MySQL/MySQL Server 5.7/lib/opt" + "${PROGRAM_FILES_32}/MySQL/MySQL Server 8.0" + "${PROGRAM_FILES_32}/MySQL/MySQL Server 5.7" "${PROGRAM_FILES_32}/MySQL/lib" "C:/MySQL/lib/debug" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 8.0;Location]/lib" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.7;Location]/lib" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 8.0;Location]/lib/opt" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.7;Location]/lib/opt" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 8.0;Location]/lib" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.7;Location]/lib" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 8.0;Location]/lib/opt" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.7;Location]/lib/opt" - "$ENV{ProgramFiles}/MySQL/MySQL Server 8.0/lib/opt" - "$ENV{ProgramFiles}/MySQL/MySQL Server 5.7/lib/opt" - "$ENV{SystemDrive}/MySQL/MySQL Server 8.0/lib/opt" - "$ENV{SystemDrive}/MySQL/MySQL Server 5.7/lib/opt" - "c:/msys/local/include" - "$ENV{MYSQL_ROOT}/lib" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MariaDB 10.4;INSTALLDIR]/lib" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MariaDB 10.4 (x64);INSTALLDIR]/lib" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MariaDB 10.5;INSTALLDIR]/lib" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MariaDB 10.5 (x64);INSTALLDIR]/lib" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 8.0;Location]" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.7;Location]" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 8.0;Location]" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.7;Location]" + "$ENV{SystemDrive}/MySQL/MySQL Server 8.0" + "$ENV{SystemDrive}/MySQL/MySQL Server 5.7" + "c:/msys/local/lib" + "$ENV{MYSQL_ROOT}" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MariaDB 10.4;INSTALLDIR]" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MariaDB 10.4 (x64);INSTALLDIR]" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MariaDB 10.5;INSTALLDIR]" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MariaDB 10.5 (x64);INSTALLDIR]" + PATH_SUFFIXES + lib + lib/opt DOC "Specify the location of the mysql library here." ) endif(WIN32) @@ -198,54 +229,86 @@ if(UNIX) endif(UNIX) if(WIN32) - find_program(MYSQL_EXECUTABLE mysql - PATHS - "${PROGRAM_FILES_64}/MySQL/MySQL Server 8.0/bin" - "${PROGRAM_FILES_64}/MySQL/MySQL Server 5.7/bin" - "${PROGRAM_FILES_64}/MySQL/MySQL Server 8.0/bin/opt" - "${PROGRAM_FILES_64}/MySQL/MySQL Server 5.7/bin/opt" - "${PROGRAM_FILES_64}/MySQL/bin" - "${PROGRAM_FILES_32}/MySQL/MySQL Server 8.0/bin" - "${PROGRAM_FILES_32}/MySQL/MySQL Server 5.7/bin" - "${PROGRAM_FILES_32}/MySQL/MySQL Server 8.0/bin/opt" - "${PROGRAM_FILES_32}/MySQL/MySQL Server 5.7/bin/opt" - "${PROGRAM_FILES_32}/MySQL/bin" - "C:/MySQL/bin/debug" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 8.0;Location]/bin" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.7;Location]/bin" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 8.0;Location]/bin/opt" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.7;Location]/bin/opt" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 8.0;Location]/bin" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.7;Location]/bin" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 8.0;Location]/bin/opt" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.7;Location]/bin/opt" - "$ENV{ProgramFiles}/MySQL/MySQL Server 8.0/bin/opt" - "$ENV{ProgramFiles}/MySQL/MySQL Server 5.7/bin/opt" - "$ENV{SystemDrive}/MySQL/MySQL Server 8.0/bin/opt" - "$ENV{SystemDrive}/MySQL/MySQL Server 5.7/bin/opt" - "c:/msys/local/include" - "$ENV{MYSQL_ROOT}/bin" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MariaDB 10.4;INSTALLDIR]/bin" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MariaDB 10.4 (x64);INSTALLDIR]/bin" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MariaDB 10.5;INSTALLDIR]/bin" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MariaDB 10.5 (x64);INSTALLDIR]/bin" - DOC - "path to your mysql binary." - ) + find_program(MYSQL_EXECUTABLE mysql + HINTS + ${_MYSQL_ROOT_HINTS} + PATHS + "${PROGRAM_FILES_64}/MySQL/MySQL Server 8.0" + "${PROGRAM_FILES_64}/MySQL/MySQL Server 5.7" + "${PROGRAM_FILES_64}/MySQL" + "${PROGRAM_FILES_32}/MySQL/MySQL Server 8.0" + "${PROGRAM_FILES_32}/MySQL/MySQL Server 5.7" + "${PROGRAM_FILES_32}/MySQL" + "C:/MySQL/bin/debug" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 8.0;Location]" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.7;Location]" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 8.0;Location]" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.7;Location]" + "$ENV{SystemDrive}/MySQL/MySQL Server 8.0" + "$ENV{SystemDrive}/MySQL/MySQL Server 5.7" + "c:/msys/local/bin" + "$ENV{MYSQL_ROOT}" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MariaDB 10.4;INSTALLDIR]" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MariaDB 10.4 (x64);INSTALLDIR]" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MariaDB 10.5;INSTALLDIR]" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MariaDB 10.5 (x64);INSTALLDIR]" + PATH_SUFFIXES + bin + bin/opt + DOC + "path to your mysql binary." + ) endif(WIN32) -if(MYSQL_LIBRARY) - if(MYSQL_INCLUDE_DIR) - set(MYSQL_FOUND 1) +foreach(_comp IN LISTS MySQL_FIND_COMPONENTS) + if(_comp STREQUAL "lib") + 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") + 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) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(MySQL + REQUIRED_VARS + MYSQL_LIBRARY + MYSQL_INCLUDE_DIR + HANDLE_COMPONENTS + FAIL_MESSAGE + "Could not find the MySQL libraries! Please install the development libraries and headers" +) + +if(MYSQL_FOUND) + if(MySQL_lib_FOUND) message(STATUS "Found MySQL library: ${MYSQL_LIBRARY}") message(STATUS "Found MySQL headers: ${MYSQL_INCLUDE_DIR}") - else(MYSQL_INCLUDE_DIR) - message(FATAL_ERROR "Could not find MySQL headers! Please install the development libraries and headers") - endif(MYSQL_INCLUDE_DIR) - if(MYSQL_EXECUTABLE) + endif() + if(MySQL_binary_FOUND) message(STATUS "Found MySQL executable: ${MYSQL_EXECUTABLE}") - endif(MYSQL_EXECUTABLE) + endif() mark_as_advanced(MYSQL_FOUND MYSQL_LIBRARY MYSQL_EXTRA_LIBRARIES MYSQL_INCLUDE_DIR MYSQL_EXECUTABLE) -else(MYSQL_LIBRARY) + + if(NOT TARGET MySQL::MySQL 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() +else() message(FATAL_ERROR "Could not find the MySQL libraries! Please install the development libraries and headers") -endif(MYSQL_LIBRARY) +endif() |