aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2022-06-20 22:43:22 +0200
committerShauren <shauren.trinity@gmail.com>2022-06-20 22:43:22 +0200
commitae6b9e6c41f882f6c0a48a6352b73b3ae098e012 (patch)
tree625defbb2c6e2fe38c12a06572c57678f2c1a487
parentd85379faa6d5d33f755e17cb0204f243345db938 (diff)
Build: Modernize mysql finding script
-rw-r--r--cmake/macros/FindMySQL.cmake279
-rw-r--r--dep/mysql/CMakeLists.txt15
2 files changed, 176 insertions, 118 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()
diff --git a/dep/mysql/CMakeLists.txt b/dep/mysql/CMakeLists.txt
index 08a117bf173..ba4af695468 100644
--- a/dep/mysql/CMakeLists.txt
+++ b/dep/mysql/CMakeLists.txt
@@ -8,15 +8,10 @@
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-if (NOT MYSQL_FOUND)
- message(FATAL_ERROR "MySQL wasn't found on your system but it's required to build the servers!")
-endif()
+find_package(MySQL REQUIRED COMPONENTS lib OPTIONAL_COMPONENTS binary)
-add_library(mysql STATIC IMPORTED GLOBAL)
+add_library(mysql INTERFACE)
-set_target_properties(mysql
- PROPERTIES
- IMPORTED_LOCATION
- "${MYSQL_LIBRARY}"
- INTERFACE_INCLUDE_DIRECTORIES
- "${MYSQL_INCLUDE_DIR}")
+target_link_libraries(mysql
+ INTERFACE
+ MySQL::MySQL)