diff --git a/CMakeLists.txt b/CMakeLists.txt index d7e810449c..c3b76017df 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,15 +22,14 @@ cmake_minimum_required(VERSION 2.8) set(MANGOS_VERSION 0.18) +include(cmake/common.cmake) + # Set RPATH-handing (CMake parameters) set(CMAKE_SKIP_BUILD_RPATH FALSE) set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) set(CMAKE_INSTALL_RPATH ${LIBS_DIR}) set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) -# set macro-directory -set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/macros") - # set default buildoptions and print them include(cmake/options.cmake) diff --git a/cmake/common.cmake b/cmake/common.cmake new file mode 100644 index 0000000000..1618c25fc0 --- /dev/null +++ b/cmake/common.cmake @@ -0,0 +1,7 @@ + +# First, get the root of the repository. +get_filename_component(ROOT_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(ROOT_DIR "${ROOT_DIR}/.." ABSOLUTE) + +# Set the macro directory. +set(CMAKE_MODULE_PATH "${ROOT_DIR}/cmake/macros") diff --git a/cmake/compiler/clang/settings.cmake b/cmake/compiler/clang/settings.cmake index 3f1002946f..627f1be645 100644 --- a/cmake/compiler/clang/settings.cmake +++ b/cmake/compiler/clang/settings.cmake @@ -1,6 +1,18 @@ # Set build-directive (used in core to tell which buildtype we used) add_definitions(-D_BUILD_DIRECTIVE='"$(CONFIGURATION)"') +# Check C++11 compiler support +include(CheckCXXCompilerFlag) +CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) +CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X) +if(COMPILER_SUPPORTS_CXX11) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") +elseif(COMPILER_SUPPORTS_CXX0X) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") +else() + message(FATAL_ERROR "Error, CMaNGOS requires a compiler that supports C++11!") +endif() + if(WARNINGS) set(WARNING_FLAGS "-W -Wall -Wextra -Winit-self -Wfatal-errors") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WARNING_FLAGS}") diff --git a/cmake/compiler/gcc/settings.cmake b/cmake/compiler/gcc/settings.cmake index 29cbbd8a8f..c14bb8ea9a 100644 --- a/cmake/compiler/gcc/settings.cmake +++ b/cmake/compiler/gcc/settings.cmake @@ -1,6 +1,18 @@ # Set build-directive (used in core to tell which buildtype we used) add_definitions(-D_BUILD_DIRECTIVE='"${CMAKE_BUILD_TYPE}"') +# Check C++11 compiler support +include(CheckCXXCompilerFlag) +CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) +CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X) +if(COMPILER_SUPPORTS_CXX11) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") +elseif(COMPILER_SUPPORTS_CXX0X) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") +else() + message(FATAL_ERROR "Error, CMaNGOS requires a compiler that supports C++11!") +endif() + if(PLATFORM EQUAL X86) # Required on 32-bit systems to enable SSE2 (standard on x64) set(SSE_FLAGS "-msse2 -mfpmath=sse") diff --git a/cmake/macros/CheckPlatform.cmake b/cmake/macros/CheckPlatform.cmake index 1b2289581f..4d16bf0600 100644 --- a/cmake/macros/CheckPlatform.cmake +++ b/cmake/macros/CheckPlatform.cmake @@ -8,7 +8,7 @@ else() endif() if(WIN32) - include("${CMAKE_SOURCE_DIR}/cmake/platform/win/settings.cmake") + include("${ROOT_DIR}/cmake/platform/win/settings.cmake") elseif(UNIX) - include("${CMAKE_SOURCE_DIR}/cmake/platform/unix/settings.cmake") + include("${ROOT_DIR}/cmake/platform/unix/settings.cmake") endif() diff --git a/cmake/macros/ImportACE.cmake b/cmake/macros/ImportACE.cmake index c405915b08..ac14b1ab51 100644 --- a/cmake/macros/ImportACE.cmake +++ b/cmake/macros/ImportACE.cmake @@ -23,8 +23,8 @@ # set_target_properties(ace PROPERTIES DEPENDS ACE_Project) if(WIN32) - set(ACE_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/dep/ACE_wrappers) - set(ACE_LIBRARIES_DIR ${CMAKE_SOURCE_DIR}/dep/ACE_wrappers/lib) + set(ACE_INCLUDE_DIR ${ROOT_DIR}/dep/ACE_wrappers) + set(ACE_LIBRARIES_DIR ${ROOT_DIR}/dep/ACE_wrappers/lib) set(ACE_LIBRARIES optimized ACE debug ACEd) else() set(ACE_INCLUDE_DIR ${CMAKE_INSTALL_PREFIX}/include) diff --git a/cmake/macros/ImportTBB.cmake b/cmake/macros/ImportTBB.cmake index 16dc2256f6..06c425aaf7 100644 --- a/cmake/macros/ImportTBB.cmake +++ b/cmake/macros/ImportTBB.cmake @@ -44,8 +44,8 @@ if(WIN32) # IMPORTED_IMPLIB_DEBUG ${CMAKE_SOURCE_DIR}/dep/tbb/build/${VSDIR}/${ARCHDIR}/Debug/tbbmalloc_debug.lib # ) set(TBB_LIBRARIES_DIR - ${CMAKE_SOURCE_DIR}/dep/tbb/build/${VSDIR}/${ARCHDIR}/Release - ${CMAKE_SOURCE_DIR}/dep/tbb/build/${VSDIR}/${ARCHDIR}/Debug + ${ROOT_DIR}/dep/tbb/build/${VSDIR}/${ARCHDIR}/Release + ${ROOT_DIR}/dep/tbb/build/${VSDIR}/${ARCHDIR}/Debug ) else() if(APPLE) @@ -62,8 +62,8 @@ else() # IMPORTED_LOCATION_DEBUG ${CMAKE_SOURCE_DIR}/dep/tbb/build/libs_debug/libtbbmalloc_debug.${LIB_SUFFIX} # ) set(TBB_LIBRARIES_DIR - ${CMAKE_SOURCE_DIR}/dep/tbb/build/libs_release - ${CMAKE_SOURCE_DIR}/dep/tbb/build/libs_debug + ${ROOT_DIR}/dep/tbb/build/libs_release + ${ROOT_DIR}/dep/tbb/build/libs_debug ) endif() # Sadly doesn't work in current version @@ -72,7 +72,7 @@ endif() # set_target_properties(tbb PROPERTIES DEPENDS TBB_Project) # set_target_properties(tbbmalloc PROPERTIES DEPENDS TBB_Project) -set(TBB_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/dep/tbb/include) +set(TBB_INCLUDE_DIR ${ROOT_DIR}/dep/tbb/include) set(TBB_LIBRARIES optimized tbb optimized tbbmalloc debug tbb_debug debug tbbmalloc_debug) # Little Hack to remove the link warnings because of not found directories diff --git a/cmake/platform/unix/settings.cmake b/cmake/platform/unix/settings.cmake index cdd988bc05..d71484d8b6 100644 --- a/cmake/platform/unix/settings.cmake +++ b/cmake/platform/unix/settings.cmake @@ -1,6 +1,6 @@ # configure uninstaller configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/cmake/platform/cmake_uninstall.cmake.in" + "${ROOT_DIR}/cmake/platform/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY ) @@ -14,9 +14,9 @@ message(STATUS "UNIX: Created uninstall target") message(STATUS "UNIX: Detected compiler: ${CMAKE_C_COMPILER}") if(CMAKE_C_COMPILER MATCHES "gcc" OR CMAKE_C_COMPILER_ID STREQUAL "GNU") - include(${CMAKE_SOURCE_DIR}/cmake/compiler/gcc/settings.cmake) + include("${ROOT_DIR}/cmake/compiler/gcc/settings.cmake") elseif(CMAKE_C_COMPILER MATCHES "clang") - include(${CMAKE_SOURCE_DIR}/cmake/compiler/clang/settings.cmake) + include("${ROOT_DIR}/cmake/compiler/clang/settings.cmake") else() add_definitions(-D_BUILD_DIRECTIVE='"${CMAKE_BUILD_TYPE}"') endif() diff --git a/cmake/platform/win/settings.cmake b/cmake/platform/win/settings.cmake index 89c36a6f39..f25fc349ce 100644 --- a/cmake/platform/win/settings.cmake +++ b/cmake/platform/win/settings.cmake @@ -1,3 +1,3 @@ if ( MSVC ) - include(${CMAKE_SOURCE_DIR}/cmake/compiler/msvc/settings.cmake) + include("${ROOT_DIR}/cmake/compiler/msvc/settings.cmake") endif() diff --git a/contrib/extractor/CMakeLists.txt b/contrib/extractor/CMakeLists.txt index a05710a8ee..cda4d9cf2b 100644 --- a/contrib/extractor/CMakeLists.txt +++ b/contrib/extractor/CMakeLists.txt @@ -11,6 +11,9 @@ cmake_minimum_required (VERSION 2.6) project (MANGOS_MAP_EXTRACTOR) +include(../../cmake/common.cmake) +include(CheckPlatform) + add_subdirectory (loadlib) include_directories (${MANGOS_MAP_EXTRACTOR_SOURCE_DIR}/loadlib) diff --git a/contrib/git_id/CMakeLists.txt b/contrib/git_id/CMakeLists.txt index d126ab6bed..f0bd03d598 100644 --- a/contrib/git_id/CMakeLists.txt +++ b/contrib/git_id/CMakeLists.txt @@ -1,4 +1,7 @@ -SET(CMAKE_VERBOSE_MAKEFILE ON) -cmake_minimum_required (VERSION 2.6) -ADD_EXECUTABLE (git_id git_id.cpp) +cmake_minimum_required(VERSION 2.8) + +include(../../cmake/common.cmake) +include(CheckPlatform) + +ADD_EXECUTABLE(git_id git_id.cpp) diff --git a/contrib/mmap/CMakeLists.txt b/contrib/mmap/CMakeLists.txt index 0ee7b01839..5d774e317f 100644 --- a/contrib/mmap/CMakeLists.txt +++ b/contrib/mmap/CMakeLists.txt @@ -12,6 +12,9 @@ cmake_minimum_required (VERSION 2.6) project( MoveMapGen ) +include(../../cmake/common.cmake) +include(CheckPlatform) + ADD_DEFINITIONS(-DMMAP_GENERATOR -DNO_CORE_FUNCS -DDEBUG) ADD_DEFINITIONS(-DDT_POLYREF64) diff --git a/contrib/vmap_assembler/CMakeLists.txt b/contrib/vmap_assembler/CMakeLists.txt index ccf4d27c52..0f24d0a9c6 100644 --- a/contrib/vmap_assembler/CMakeLists.txt +++ b/contrib/vmap_assembler/CMakeLists.txt @@ -11,6 +11,9 @@ cmake_minimum_required (VERSION 2.6) project (MANGOS_VMAP_ASSEMB_IO) +include(../../cmake/common.cmake) +include(CheckPlatform) + set(CMAKE_VERBOSE_MAKEFILE true) # uncomment next line to disable debug mode diff --git a/contrib/vmap_extractor/CMakeLists.txt b/contrib/vmap_extractor/CMakeLists.txt index ea2120ae67..16d849f4af 100644 --- a/contrib/vmap_extractor/CMakeLists.txt +++ b/contrib/vmap_extractor/CMakeLists.txt @@ -11,6 +11,8 @@ cmake_minimum_required (VERSION 2.6) project (MANGOS_VMAP_EXTRACT_IO) +include(../../cmake/common.cmake) +include(CheckPlatform) # uncomment next line to disable debug mode ADD_DEFINITIONS("-DIOMAP_DEBUG")