aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNaios <naios-dev@live.de>2015-03-29 16:13:22 +0200
committerNaios <naios-dev@live.de>2015-03-29 16:13:22 +0200
commited4722b6e6314e9dce920fe90138dc714c734251 (patch)
tree86be10038d4b7f565dd316835f34e2be574e4f6a
parent83bbe00785a7ee7c8141d83bfe94a1415466c64d (diff)
CMake: Use source_groups to represent the source tree
* It let ide's (like vs) display the source tree. * Disabled by default. * Soft requirement is cmake >= 2.8.12 . * Offers 2 modes: flat & hierarchical. * For detailed description see #14471 * Thanks @click for help and advises. * Closes #14471 (cherry picked from commit c386711972260aa7b877cdc8cb49d24576ce1902) Conflicts: src/server/authserver/CMakeLists.txt
-rw-r--r--CMakeLists.txt2
-rw-r--r--cmake/macros/GroupSources.cmake46
-rw-r--r--cmake/options.cmake2
-rw-r--r--cmake/showoptions.cmake23
-rw-r--r--src/server/bnetserver/CMakeLists.txt2
-rw-r--r--src/server/collision/CMakeLists.txt2
-rw-r--r--src/server/game/CMakeLists.txt2
-rw-r--r--src/server/scripts/CMakeLists.txt2
-rw-r--r--src/server/shared/CMakeLists.txt2
-rw-r--r--src/server/worldserver/CMakeLists.txt2
10 files changed, 85 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 56ea65e5d7a..90922cd77e2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -50,6 +50,8 @@ endif()
include(CheckPlatform)
+include(GroupSources)
+
# basic packagesearching and setup (further support will be needed, this is a preliminary release!)
set(OPENSSL_EXPECTED_VERSION 1.0.0)
diff --git a/cmake/macros/GroupSources.cmake b/cmake/macros/GroupSources.cmake
new file mode 100644
index 00000000000..3acb03e7b4c
--- /dev/null
+++ b/cmake/macros/GroupSources.cmake
@@ -0,0 +1,46 @@
+# Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/>
+#
+# This file is free software; as a special exception the author gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+macro(GroupSources dir)
+ # Skip this if WITH_SOURCE_TREE is not set (empty string).
+ if (NOT ${_WITH_SOURCE_TREE} STREQUAL "")
+ # Include all header and c files
+ file(GLOB_RECURSE elements RELATIVE ${dir} *.h *.hpp *.c *.cpp *.cc)
+
+ foreach(element ${elements})
+ # Extract filename and directory
+ get_filename_component(element_name ${element} NAME)
+ get_filename_component(element_dir ${element} DIRECTORY)
+
+ if (NOT ${element_dir} STREQUAL "")
+ # If the file is in a subdirectory use it as source group.
+ if (${_WITH_SOURCE_TREE} STREQUAL "flat")
+ # Build flat structure by using only the first subdirectory.
+ string(FIND ${element_dir} "/" delemiter_pos)
+ if (NOT ${delemiter_pos} EQUAL -1)
+ string(SUBSTRING ${element_dir} 0 ${delemiter_pos} group_name)
+ source_group("${group_name}" FILES ${dir}/${element})
+ else()
+ # Build hierarchical structure.
+ # File is in root directory.
+ source_group("${element_dir}" FILES ${dir}/${element})
+ endif()
+ else()
+ # Use the full hierarchical structure to build source_groups.
+ string(REPLACE "/" "\\" group_name ${element_dir})
+ source_group("${group_name}" FILES ${dir}/${element})
+ endif()
+ else()
+ # If the file is in the root directory, place it in the root source_group.
+ source_group("\\" FILES ${dir}/${element})
+ endif()
+ endforeach()
+ endif()
+endmacro()
diff --git a/cmake/options.cmake b/cmake/options.cmake
index 9b0e663d0a9..0bc7c84e66f 100644
--- a/cmake/options.cmake
+++ b/cmake/options.cmake
@@ -15,4 +15,6 @@ option(USE_SCRIPTPCH "Use precompiled headers when compiling scripts"
option(USE_COREPCH "Use precompiled headers when compiling servers" 1)
option(WITH_WARNINGS "Show all warnings during compile" 0)
option(WITH_COREDEBUG "Include additional debug-code in core" 0)
+set(WITH_SOURCE_TREE "no" CACHE STRING "Build the source tree for IDE's.")
+set_property(CACHE WITH_SOURCE_TREE PROPERTY STRINGS no flat hierarchical)
option(WITHOUT_GIT "Disable the GIT testing routines" 0)
diff --git a/cmake/showoptions.cmake b/cmake/showoptions.cmake
index 44d161cab8d..87a372260a0 100644
--- a/cmake/showoptions.cmake
+++ b/cmake/showoptions.cmake
@@ -62,6 +62,29 @@ else()
message("* Use coreside debug : No (default)")
endif()
+if( WITH_SOURCE_TREE STREQUAL "flat" OR WITH_SOURCE_TREE STREQUAL "hierarchical" )
+ # TODO: Remove this after Debian 8 is released and set general required version to 2.8.12
+ # Debian 7 is shipped with CMake 2.8.9 . But DIRECTORY flag of get_filename_component requires 2.8.12 .
+ if (NOT CMAKE_VERSION VERSION_LESS 2.8.12)
+ message("* Show source tree : Yes - ${WITH_SOURCE_TREE}")
+ set(_WITH_SOURCE_TREE ${WITH_SOURCE_TREE} CACHE INTERNAL "WITH_SOURCE_TREE support enabled.")
+ else()
+ message("* Show source tree : No (default)")
+
+ message("")
+ message(" *** WITH_SOURCE_TREE - WARNING!")
+ message(" *** This functionality is ONLY supported on CMake 2.8.12 or higher.")
+ message(" *** You are running ${CMAKE_VERSION}, which does not have the functions needed")
+ message(" *** to create a sourcetree - this option is thus forced to disabled!")
+ message("")
+
+ set(_WITH_SOURCE_TREE "" CACHE INTERNAL "WITH_SOURCE_TREE support disabled.")
+ endif()
+else()
+ message("* Show source tree : No (default)")
+ set(_WITH_SOURCE_TREE "" CACHE INTERNAL "WITH_SOURCE_TREE support disabled.")
+endif()
+
if ( WITHOUT_GIT )
message("* Use GIT revision hash : No")
message("")
diff --git a/src/server/bnetserver/CMakeLists.txt b/src/server/bnetserver/CMakeLists.txt
index 4ea4f697cf7..e80e99cdda7 100644
--- a/src/server/bnetserver/CMakeLists.txt
+++ b/src/server/bnetserver/CMakeLists.txt
@@ -73,6 +73,8 @@ include_directories(
${ZMQ_INCLUDE_DIR}
)
+GroupSources(${CMAKE_CURRENT_SOURCE_DIR})
+
add_executable(bnetserver
${bnetserver_SRCS}
${bnetserver_PCH_SRC}
diff --git a/src/server/collision/CMakeLists.txt b/src/server/collision/CMakeLists.txt
index 84f7de76543..f0f5cef5985 100644
--- a/src/server/collision/CMakeLists.txt
+++ b/src/server/collision/CMakeLists.txt
@@ -81,6 +81,8 @@ include_directories(
${VALGRIND_INCLUDE_DIR}
)
+GroupSources(${CMAKE_CURRENT_SOURCE_DIR})
+
add_library(collision STATIC
${collision_STAT_SRCS}
${collision_STAT_PCH_SRC}
diff --git a/src/server/game/CMakeLists.txt b/src/server/game/CMakeLists.txt
index 55792856eb4..caa75c24121 100644
--- a/src/server/game/CMakeLists.txt
+++ b/src/server/game/CMakeLists.txt
@@ -214,6 +214,8 @@ include_directories(
${ZMQ_INCLUDE_DIR}
)
+GroupSources(${CMAKE_CURRENT_SOURCE_DIR})
+
add_library(game STATIC
${game_STAT_SRCS}
${game_STAT_PCH_SRC}
diff --git a/src/server/scripts/CMakeLists.txt b/src/server/scripts/CMakeLists.txt
index 79d3cea0868..694a36cb229 100644
--- a/src/server/scripts/CMakeLists.txt
+++ b/src/server/scripts/CMakeLists.txt
@@ -151,6 +151,8 @@ include_directories(
${VALGRIND_INCLUDE_DIR}
)
+GroupSources(${CMAKE_CURRENT_SOURCE_DIR})
+
add_library(scripts STATIC
${scripts_STAT_SRCS}
${scripts_STAT_PCH_SRC}
diff --git a/src/server/shared/CMakeLists.txt b/src/server/shared/CMakeLists.txt
index 657b3fde349..f91c684110a 100644
--- a/src/server/shared/CMakeLists.txt
+++ b/src/server/shared/CMakeLists.txt
@@ -87,6 +87,8 @@ include_directories(
${VALGRIND_INCLUDE_DIR}
)
+GroupSources(${CMAKE_CURRENT_SOURCE_DIR})
+
add_library(shared STATIC
${shared_STAT_SRCS}
${shared_STAT_PCH_SRC}
diff --git a/src/server/worldserver/CMakeLists.txt b/src/server/worldserver/CMakeLists.txt
index 63da20df2c7..f76da8e87fa 100644
--- a/src/server/worldserver/CMakeLists.txt
+++ b/src/server/worldserver/CMakeLists.txt
@@ -149,6 +149,8 @@ include_directories(
${ZMQ_INCLUDE_DIR}
)
+GroupSources(${CMAKE_CURRENT_SOURCE_DIR})
+
add_executable(worldserver
${worldserver_SRCS}
${worldserver_PCH_SRC}