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
This commit is contained in:
H0zen 2018-03-28 20:37:19 +03:00
parent 6a16cd8cc6
commit f49b02611e
8 changed files with 75 additions and 128 deletions

View File

@ -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}")

View File

@ -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)

View File

@ -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

View File

@ -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})

2
dep

@ -1 +1 @@
Subproject commit e3ecb858995946bff96170d924a2a6577dfb4988
Subproject commit e2ee48ca3862fe8450114a233472df08d918db2e

View File

@ -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()

View File

@ -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()

@ -1 +1 @@
Subproject commit e383ec6a1ec82cb661164b36d92902dcd2bd6e47
Subproject commit d34662ce29fdb0904ab5bfa00d9b7a892dd3f697