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
This commit is contained in:
1 parent
c61fac843b
commit
c386711972
10 files changed
+85
No files matched your search
@@ -50,6 +50,8 @@ endif()
|
|||||||
|
|
||||||
include(CheckPlatform)
|
include(CheckPlatform)
|
||||||
|
|
||||||
|
include(GroupSources)
|
||||||
|
|
||||||
# basic packagesearching and setup (further support will be needed, this is a preliminary release!)
|
# basic packagesearching and setup (further support will be needed, this is a preliminary release!)
|
||||||
set(OPENSSL_EXPECTED_VERSION 1.0.0)
|
set(OPENSSL_EXPECTED_VERSION 1.0.0)
|
||||||
|
|
||||||
|
|||||||
@@ -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()
|
||||||
@@ -15,4 +15,6 @@ option(USE_SCRIPTPCH "Use precompiled headers when compiling scripts"
|
|||||||
option(USE_COREPCH "Use precompiled headers when compiling servers" 1)
|
option(USE_COREPCH "Use precompiled headers when compiling servers" 1)
|
||||||
option(WITH_WARNINGS "Show all warnings during compile" 0)
|
option(WITH_WARNINGS "Show all warnings during compile" 0)
|
||||||
option(WITH_COREDEBUG "Include additional debug-code in core" 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)
|
option(WITHOUT_GIT "Disable the GIT testing routines" 0)
|
||||||
@@ -62,6 +62,29 @@ else()
|
|||||||
message("* Use coreside debug : No (default)")
|
message("* Use coreside debug : No (default)")
|
||||||
endif()
|
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 )
|
if ( WITHOUT_GIT )
|
||||||
message("* Use GIT revision hash : No")
|
message("* Use GIT revision hash : No")
|
||||||
message("")
|
message("")
|
||||||
|
|||||||
@@ -66,6 +66,8 @@ include_directories(
|
|||||||
${VALGRIND_INCLUDE_DIR}
|
${VALGRIND_INCLUDE_DIR}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
GroupSources(${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
|
||||||
add_executable(authserver
|
add_executable(authserver
|
||||||
${authserver_SRCS}
|
${authserver_SRCS}
|
||||||
${authserver_PCH_SRC}
|
${authserver_PCH_SRC}
|
||||||
|
|||||||
@@ -80,6 +80,8 @@ include_directories(
|
|||||||
${VALGRIND_INCLUDE_DIR}
|
${VALGRIND_INCLUDE_DIR}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
GroupSources(${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
|
||||||
add_library(collision STATIC
|
add_library(collision STATIC
|
||||||
${collision_STAT_SRCS}
|
${collision_STAT_SRCS}
|
||||||
${collision_STAT_PCH_SRC}
|
${collision_STAT_PCH_SRC}
|
||||||
|
|||||||
@@ -208,6 +208,8 @@ include_directories(
|
|||||||
${VALGRIND_INCLUDE_DIR}
|
${VALGRIND_INCLUDE_DIR}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
GroupSources(${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
|
||||||
add_library(game STATIC
|
add_library(game STATIC
|
||||||
${game_STAT_SRCS}
|
${game_STAT_SRCS}
|
||||||
${game_STAT_PCH_SRC}
|
${game_STAT_PCH_SRC}
|
||||||
|
|||||||
@@ -146,6 +146,8 @@ include_directories(
|
|||||||
${VALGRIND_INCLUDE_DIR}
|
${VALGRIND_INCLUDE_DIR}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
GroupSources(${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
|
||||||
add_library(scripts STATIC
|
add_library(scripts STATIC
|
||||||
${scripts_STAT_SRCS}
|
${scripts_STAT_SRCS}
|
||||||
${scripts_STAT_PCH_SRC}
|
${scripts_STAT_PCH_SRC}
|
||||||
|
|||||||
@@ -84,6 +84,8 @@ include_directories(
|
|||||||
${VALGRIND_INCLUDE_DIR}
|
${VALGRIND_INCLUDE_DIR}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
GroupSources(${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
|
||||||
add_library(shared STATIC
|
add_library(shared STATIC
|
||||||
${shared_STAT_SRCS}
|
${shared_STAT_SRCS}
|
||||||
${shared_STAT_PCH_SRC}
|
${shared_STAT_PCH_SRC}
|
||||||
|
|||||||
@@ -144,6 +144,8 @@ include_directories(
|
|||||||
${VALGRIND_INCLUDE_DIR}
|
${VALGRIND_INCLUDE_DIR}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
GroupSources(${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
|
||||||
add_executable(worldserver
|
add_executable(worldserver
|
||||||
${worldserver_SRCS}
|
${worldserver_SRCS}
|
||||||
${worldserver_PCH_SRC}
|
${worldserver_PCH_SRC}
|
||||||
|
|||||||
Reference in new issue
Block a user