From f49b02611e9ac2141962f1fbcfc0872e1f43beef Mon Sep 17 00:00:00 2001 From: H0zen Date: Wed, 28 Mar 2018 20:37:19 +0300 Subject: [PATCH] Improvements to the build system - ACE is now build as static library - Removed useless directives from master CMakeLists - Added support for MariaDB - On Windows builds, the required DLLs are now properly copied to the installation folder --- CMakeLists.txt | 29 ++-------------- cmake/FindMySQL.cmake | 69 +++++++++++++++++++++----------------- cmake/FindOpenSSL.cmake | 2 +- cmake/ImportACE.cmake | 30 ++--------------- dep | 2 +- src/CMakeLists.txt | 8 +++++ src/mangosd/CMakeLists.txt | 61 +++++++++++---------------------- src/realmd | 2 +- 8 files changed, 75 insertions(+), 128 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c2cc7826..767231e7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,21 +18,10 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA project(MaNGOS) +cmake_minimum_required(VERSION 3.0) + set(MANGOS_VERSION 0.21) set(MANGOS_EXP "CLASSIC") -add_definitions(-DCLASSIC) -# CMake policies -cmake_minimum_required(VERSION 2.8) -# Until CMake 3.0 is the standard -# And a solution to set_directory_properties is found. -if(POLICY CMP0043) - cmake_policy(SET CMP0043 OLD) -endif() - -set(CMAKE_SKIP_BUILD_RPATH FALSE) -set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) -set(CMAKE_INSTALL_RPATH "${LIBS_DIR}") -set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) # Set the correct macro directory path set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") @@ -91,12 +80,6 @@ find_package(Git) find_package(PCHSupport) find_package(OpenSSL REQUIRED) -# For Unix systems set the rpath so that libraries are found -set(CMAKE_INSTALL_RPATH "${LIBS_DIR}") -set(CMAKE_INSTALL_NAME_DIR "${LIBS_DIR}") -# Run out of build tree -set(CMAKE_BUILD_WITH_INSTALL_RPATH OFF) - if(ACE_USE_EXTERNAL) find_package(ACE) if(NOT ACE_FOUND) @@ -104,14 +87,8 @@ if(ACE_USE_EXTERNAL) "This project requires ACE installed when ACE_USE_EXTERNAL is set. Please download the ACE Micro Release Kit from http://download.dre.vanderbilt.edu/ and install it. If this script didn't find ACE and it was correctly installed please set ACE_ROOT to the correct path." ) endif() - if(EXISTS ${ACE_INCLUDE_DIR}/ace/Stack_Trace.h) - add_definitions(-DHAVE_ACE_STACK_TRACE_H) - endif() else() include(cmake/ImportACE.cmake) - if(NOT(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")) - add_definitions(-DHAVE_ACE_STACK_TRACE_H) - endif() endif() if(POSTGRESQL) @@ -128,7 +105,7 @@ endif() #Include platform/compiler-specific definitions include(${CMAKE_SOURCE_DIR}/cmake/SetDefinitions.cmake) -set(DEFINITIONS ${DEFINITIONS} CLASSIC) +add_definitions(-DCLASSIC) message(STATUS "Install server to : ${CMAKE_INSTALL_PREFIX}") message(STATUS "Install configs to : ${CONF_INSTALL_DIR}") diff --git a/cmake/FindMySQL.cmake b/cmake/FindMySQL.cmake index d489b3cb..bd43b180 100644 --- a/cmake/FindMySQL.cmake +++ b/cmake/FindMySQL.cmake @@ -10,36 +10,32 @@ if(MYSQL_INCLUDE_DIR AND MYSQL_LIBRARY) set(MYSQL_FOUND TRUE) else(MYSQL_INCLUDE_DIR AND MYSQL_LIBRARY) + if(WIN32) + SET(PROGRAM_FILES_ARCH_PATH) + if(PLATFORM EQUAL 32) + SET(PROGRAM_FILES_ARCH_PATH $ENV{ProgramFiles}) + elseif(PLATFORM EQUAL 64) + SET(PROGRAM_FILES_ARCH_PATH $ENV{ProgramW6432}) + endif() - SET(PROGRAM_FILES_ARCH_PATH) - if(PLATFORM EQUAL 32) - SET(PROGRAM_FILES_ARCH_PATH $ENV{ProgramFiles}) - elseif(PLATFORM EQUAL 64) - SET(PROGRAM_FILES_ARCH_PATH $ENV{ProgramW6432}) - endif() + if (${PROGRAM_FILES_ARCH_PATH}) + STRING(REPLACE "\\\\" "/" PROGRAM_FILES_ARCH_PATH ${PROGRAM_FILES_ARCH_PATH}) + endif(${PROGRAM_FILES_ARCH_PATH}) - if (${PROGRAM_FILES_ARCH_PATH}) - STRING(REPLACE "\\\\" "/" PROGRAM_FILES_ARCH_PATH ${PROGRAM_FILES_ARCH_PATH}) - endif(${PROGRAM_FILES_ARCH_PATH}) - - find_path(MYSQL_INCLUDE_DIR mysql.h - /usr/include - /usr/include/mysql - /usr/local/include - /usr/local/include/mysql - /usr/local/mysql/include - /opt/local/include/mysql*/mysql - "${PROGRAM_FILES_ARCH_PATH}/MySQL/MySQL Server 5.0/include" - "${PROGRAM_FILES_ARCH_PATH}/MySQL/MySQL Server 5.1/include" - "${PROGRAM_FILES_ARCH_PATH}/MySQL/MySQL Server 5.2/include" - "${PROGRAM_FILES_ARCH_PATH}/MySQL/MySQL Server 5.3/include" - "${PROGRAM_FILES_ARCH_PATH}/MySQL/MySQL Server 5.4/include" - "${PROGRAM_FILES_ARCH_PATH}/MySQL/MySQL Server 5.5/include" - "${PROGRAM_FILES_ARCH_PATH}/MySQL/MySQL Server 5.6/include" - "${PROGRAM_FILES_ARCH_PATH}/MySQL/MySQL Server 5.7/include" - ) - - if(WIN32 AND MSVC) + find_path(MYSQL_INCLUDE_DIR mysql.h + "${PROGRAM_FILES_ARCH_PATH}/MySQL/MySQL Server 5.0/include" + "${PROGRAM_FILES_ARCH_PATH}/MySQL/MySQL Server 5.1/include" + "${PROGRAM_FILES_ARCH_PATH}/MySQL/MySQL Server 5.2/include" + "${PROGRAM_FILES_ARCH_PATH}/MySQL/MySQL Server 5.3/include" + "${PROGRAM_FILES_ARCH_PATH}/MySQL/MySQL Server 5.4/include" + "${PROGRAM_FILES_ARCH_PATH}/MySQL/MySQL Server 5.5/include" + "${PROGRAM_FILES_ARCH_PATH}/MySQL/MySQL Server 5.6/include" + "${PROGRAM_FILES_ARCH_PATH}/MySQL/MySQL Server 5.7/include" + "${PROGRAM_FILES_ARCH_PATH}/MariaDB 10.0/include/mysql" + "${PROGRAM_FILES_ARCH_PATH}/MariaDB 10.1/include/mysql" + "${PROGRAM_FILES_ARCH_PATH}/MariaDB 10.2/include/mysql" + "${PROGRAM_FILES_ARCH_PATH}/MariaDB 10.3/include/mysql" + ) find_library(MYSQL_LIBRARY NAMES libmysql @@ -52,8 +48,21 @@ else(MYSQL_INCLUDE_DIR AND MYSQL_LIBRARY) "${PROGRAM_FILES_ARCH_PATH}/MySQL/MySQL Server 5.5/lib" "${PROGRAM_FILES_ARCH_PATH}/MySQL/MySQL Server 5.6/lib" "${PROGRAM_FILES_ARCH_PATH}/MySQL/MySQL Server 5.7/lib" + "${PROGRAM_FILES_ARCH_PATH}/MariaDB 10.0/lib" + "${PROGRAM_FILES_ARCH_PATH}/MariaDB 10.1/lib" + "${PROGRAM_FILES_ARCH_PATH}/MariaDB 10.2/lib" + "${PROGRAM_FILES_ARCH_PATH}/MariaDB 10.3/lib" ) - else(WIN32 AND MSVC) + else(WIN32) + find_path(MYSQL_INCLUDE_DIR mysql.h + /usr/include + /usr/include/mysql + /usr/local/include + /usr/local/include/mysql + /usr/local/mysql/include + /opt/local/include/mysql*/mysql + ) + find_library(MYSQL_LIBRARY NAMES mysqlclient @@ -66,7 +75,7 @@ else(MYSQL_INCLUDE_DIR AND MYSQL_LIBRARY) /usr/local/mysql/lib /opt/local/lib/mysql*/mysql ) - endif(WIN32 AND MSVC) + endif(WIN32) if(MYSQL_INCLUDE_DIR AND MYSQL_LIBRARY) set(MYSQL_FOUND TRUE) diff --git a/cmake/FindOpenSSL.cmake b/cmake/FindOpenSSL.cmake index 530b9104..3467a2db 100644 --- a/cmake/FindOpenSSL.cmake +++ b/cmake/FindOpenSSL.cmake @@ -1,4 +1,4 @@ -# - Try to find the OpenSSL encryption library +# Try to find the OpenSSL encryption library # Once done this will define # # OPENSSL_ROOT_DIR - Set this variable to the root installation of OpenSSL diff --git a/cmake/ImportACE.cmake b/cmake/ImportACE.cmake index c7b4676b..b92f36bb 100644 --- a/cmake/ImportACE.cmake +++ b/cmake/ImportACE.cmake @@ -14,35 +14,9 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# Specify ace lib that was build externally -# add_library(ace SHARED IMPORTED) -# Sadly doesn't work in current version of cmake -# add_dependencies(ace ACE_Project) -# set_target_properties(ace PROPERTIES DEPENDS ACE_Project) +add_definitions(-DACE_AS_STATIC_LIBS) set(ACE_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/dep/acelite) set(ACE_LIBRARIES_DIR ${CMAKE_BINARY_DIR}/dep/acelite/ace) -set(ACE_LIBRARIES optimized ACE debug ACE) -# Little Hack to remove the link warnings because of not found directories -#if(XCODE) -# foreach(DIR ${ACE_LIBRARIES_DIR}) -# foreach(CONF ${CMAKE_CONFIGURATION_TYPES}) -# file(MAKE_DIRECTORY ${DIR}/${CONF}) -# endforeach(CONF) -# endforeach(DIR) -#endif() - -link_directories( - ${ACE_LIBRARIES_DIR} -) - -#if(WIN32) -# foreach(DIR ${ACE_LIBRARIES_DIR}) -# install( -# DIRECTORY ${DIR}/ DESTINATION ${LIBS_DIR} -# FILES_MATCHING PATTERN "*.dll*" #"*.${LIB_SUFFIX}*" -# PATTERN "pkgconfig" EXCLUDE -# ) -# endforeach(DIR) -#endif() +link_directories(${ACE_LIBRARIES_DIR}) diff --git a/dep b/dep index e3ecb858..e2ee48ca 160000 --- a/dep +++ b/dep @@ -1 +1 @@ -Subproject commit e3ecb858995946bff96170d924a2a6577dfb4988 +Subproject commit e2ee48ca3862fe8450114a233472df08d918db2e diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 68f891ab..df95d977 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -50,4 +50,12 @@ endif() # If we want the tools for map/vmap/mmap extraction if(BUILD_TOOLS) add_subdirectory(tools) +endif() + +if (BUILD_MANGOSD OR BUILD_REALMD) +if(WIN32) + get_filename_component(MYSQL_LIB_DIR ${MYSQL_LIBRARY} DIRECTORY) + install(FILES ${MYSQL_LIB_DIR}/libmysql.dll DESTINATION ${BIN_DIR}) + install(FILES ${OPENSSL_ROOT_DIR}/libeay32.dll DESTINATION ${BIN_DIR}) +endif() endif() \ No newline at end of file diff --git a/src/mangosd/CMakeLists.txt b/src/mangosd/CMakeLists.txt index 7e67f390..a52825de 100644 --- a/src/mangosd/CMakeLists.txt +++ b/src/mangosd/CMakeLists.txt @@ -36,22 +36,19 @@ endif() if(WIN32) include(generate_product_version) -generate_product_version( - VersionFilesOutputVariable - NAME "mangosd.exe" - ICON ${CMAKE_SOURCE_DIR}/src/mangosd/mangosd.ico - VERSION_MAJOR 0 - VERSION_MINOR 21 - VERSION_PATH ${BUILD_COUNTER} - VERSION_REVISION ${BUILD_REVISION} - COMPANY_NAME "getmangos.eu" -# Do not alter, remove or prevent COMPANY_COPYRIGHT from displaying - COMPANY_COPYRIGHT - FILE_DESCRIPTION "Mangos Zero Server Daemon" -) -endif() - -if(WIN32) + generate_product_version( + VersionFilesOutputVariable + NAME "mangosd.exe" + ICON ${CMAKE_SOURCE_DIR}/src/mangosd/mangosd.ico + VERSION_MAJOR 0 + VERSION_MINOR 21 + VERSION_PATH ${BUILD_COUNTER} + VERSION_REVISION ${BUILD_REVISION} + COMPANY_NAME "getmangos.eu" + # Do not alter, remove or prevent COMPANY_COPYRIGHT from displaying + COMPANY_COPYRIGHT + FILE_DESCRIPTION "Mangos Zero Server Daemon" + ) # add resource file to windows build set(EXECUTABLE_SRCS ${EXECUTABLE_SRCS} VersionResource.rc) endif() @@ -105,13 +102,6 @@ endif() add_executable(${EXECUTABLE_NAME} ${EXECUTABLE_SRCS}) -if(NOT ACE_USE_EXTERNAL) - add_dependencies(${EXECUTABLE_NAME} ace) - target_link_libraries(${EXECUTABLE_NAME} ace) -else() - target_link_libraries(${EXECUTABLE_NAME} ACE) -endif() - target_link_libraries(${EXECUTABLE_NAME} game shared @@ -120,6 +110,13 @@ target_link_libraries(${EXECUTABLE_NAME} ${OPENSSL_LIBRARIES} ) +if(NOT ACE_USE_EXTERNAL) + add_dependencies(${EXECUTABLE_NAME} ace) + target_link_libraries(${EXECUTABLE_NAME} ace) +else() + target_link_libraries(${EXECUTABLE_NAME} ACE) +endif() + if(POSTGRESQL) include_directories(${PostgreSQL_INCLUDE_DIR}) target_link_libraries(${EXECUTABLE_NAME} ${PostgreSQL_LIBRARIES}) @@ -167,22 +164,4 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/mangosd.conf.dist DESTINATION ${CONF_I if(WIN32 AND MSVC) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/\${BUILD_TYPE}/${EXECUTABLE_NAME}.pdb" DESTINATION "${BIN_DIR}" CONFIGURATIONS Debug) - add_custom_command(TARGET ${EXECUTABLE_NAME} - POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_BINARY_DIR}/mangosd.conf.dist" "${CONF_COPY_DIR}" - ) -endif() - -#Copy dlls to build dir -if(WIN32) - if(MSVC) - add_custom_command(TARGET ${EXECUTABLE_NAME} - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "${MYSQL_LIBRARY}" "${CMAKE_BINARY_DIR}/bin/$(Configuration)/" - ) - elseif(XCODE) - add_custom_command(TARGET ${EXECUTABLE_NAME} - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "${MYSQL_LIBRARY}" "${CMAKE_BINARY_DIR}/bin/" - ) - endif() endif() diff --git a/src/realmd b/src/realmd index e383ec6a..d34662ce 160000 --- a/src/realmd +++ b/src/realmd @@ -1 +1 @@ -Subproject commit e383ec6a1ec82cb661164b36d92902dcd2bd6e47 +Subproject commit d34662ce29fdb0904ab5bfa00d9b7a892dd3f697