From 4fbec972a8fe55d73744205322298791ded0c204 Mon Sep 17 00:00:00 2001 From: Kargatum Date: Tue, 31 May 2022 17:05:39 +0700 Subject: refactor(Cmake): add support build selected applications and tools (#11836) --- src/cmake/macros/ConfigInstall.cmake | 44 +++++++++-- src/cmake/macros/ConfigureApplications.cmake | 108 ++++++++++++++++++++++++++ src/cmake/macros/ConfigureTools.cmake | 110 +++++++++++++++++++++++++++ 3 files changed, 255 insertions(+), 7 deletions(-) create mode 100644 src/cmake/macros/ConfigureApplications.cmake create mode 100644 src/cmake/macros/ConfigureTools.cmake (limited to 'src/cmake/macros') diff --git a/src/cmake/macros/ConfigInstall.cmake b/src/cmake/macros/ConfigInstall.cmake index 8dc97a8e6a..836ec610c8 100644 --- a/src/cmake/macros/ConfigInstall.cmake +++ b/src/cmake/macros/ConfigInstall.cmake @@ -12,32 +12,62 @@ # # Use it like: -# CopyDefaultConfig(worldserver) +# CopyApplicationConfig(${APP_PROJECT_NAME} ${APPLICATION_NAME}) # -function(CopyDefaultConfig servertype) +function(CopyApplicationConfig projectName appName) + GetPathToApplication(${appName} SOURCE_APP_PATH) + if(WIN32) if("${CMAKE_MAKE_PROGRAM}" MATCHES "MSBuild") - add_custom_command(TARGET ${servertype} + add_custom_command(TARGET ${projectName} POST_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/bin/$(ConfigurationName)/configs") + add_custom_command(TARGET ${projectName} + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy "${SOURCE_APP_PATH}/${appName}.conf.dist" "${CMAKE_BINARY_DIR}/bin/$(ConfigurationName)/configs") + elseif(MINGW) add_custom_command(TARGET ${servertype} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/${servertype}.conf.dist" "${CMAKE_BINARY_DIR}/bin/$(ConfigurationName)/configs") + COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/bin/configs") + add_custom_command(TARGET ${servertype} + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy "${SOURCE_APP_PATH}/${appName}.conf.dist ${CMAKE_BINARY_DIR}/bin/configs") + endif() + endif() + + if(UNIX) + install(FILES "${SOURCE_APP_PATH}/${appName}.conf.dist" DESTINATION "${CONF_DIR}") + elseif(WIN32) + install(FILES "${SOURCE_APP_PATH}/${appName}.conf.dist" DESTINATION "${CMAKE_INSTALL_PREFIX}/configs") + endif() +endfunction() + +function(CopyToolConfig projectName appName) + GetPathToTool(${appName} SOURCE_APP_PATH) + + if(WIN32) + if("${CMAKE_MAKE_PROGRAM}" MATCHES "MSBuild") + add_custom_command(TARGET ${projectName} + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/bin/$(ConfigurationName)/configs") + add_custom_command(TARGET ${projectName} + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy "${SOURCE_APP_PATH}/${appName}.conf.dist" "${CMAKE_BINARY_DIR}/bin/$(ConfigurationName)/configs") elseif(MINGW) add_custom_command(TARGET ${servertype} POST_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/bin/configs") add_custom_command(TARGET ${servertype} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/${servertype}.conf.dist ${CMAKE_BINARY_DIR}/bin/configs") + COMMAND ${CMAKE_COMMAND} -E copy "${SOURCE_APP_PATH}/${appName}.conf.dist ${CMAKE_BINARY_DIR}/bin/configs") endif() endif() if(UNIX) - install(FILES "${servertype}.conf.dist" DESTINATION "${CONF_DIR}") + install(FILES "${SOURCE_APP_PATH}/${appName}.conf.dist" DESTINATION "${CONF_DIR}") elseif(WIN32) - install(FILES "${servertype}.conf.dist" DESTINATION "${CMAKE_INSTALL_PREFIX}/configs") + install(FILES "${SOURCE_APP_PATH}/${appName}.conf.dist" DESTINATION "${CMAKE_INSTALL_PREFIX}/configs") endif() endfunction() diff --git a/src/cmake/macros/ConfigureApplications.cmake b/src/cmake/macros/ConfigureApplications.cmake new file mode 100644 index 0000000000..38009eb18c --- /dev/null +++ b/src/cmake/macros/ConfigureApplications.cmake @@ -0,0 +1,108 @@ +# +# This file is part of the AzerothCore Project. See AUTHORS file for Copyright information +# +# 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. +# + +set(BUILD_APPLICATION_AUTHSERVER 0) +set(BUILD_APPLICATION_WORLDSERVER 0) + +# Returns the base path to the apps directory in the source directory +function(GetApplicationsBasePath variable) + set(${variable} "${CMAKE_SOURCE_DIR}/src/server/apps" PARENT_SCOPE) +endfunction() + +# Stores the absolut path of the given app in the variable +function(GetPathToApplication app variable) + GetApplicationsBasePath(APPS_BASE_PATH) + set(${variable} "${APPS_BASE_PATH}/${app}" PARENT_SCOPE) +endfunction() + +# Stores the project name of the given app in the variable +function(GetProjectNameOfApplicationName app variable) + string(TOLOWER "${app}" GENERATED_NAME) + set(${variable} "${GENERATED_NAME}" PARENT_SCOPE) +endfunction() + +# Creates a list of all applications and stores it in the given variable. +function(GetApplicationsList variable) + GetApplicationsBasePath(BASE_PATH) + file(GLOB LOCALE_SOURCE_APP_LIST RELATIVE + ${BASE_PATH} + ${BASE_PATH}/*) + + set(${variable}) + + foreach(SOURCE_APP ${LOCALE_SOURCE_APP_LIST}) + GetPathToApplication(${SOURCE_APP} SOURCE_APP_PATH) + if(IS_DIRECTORY ${SOURCE_APP_PATH}) + list(APPEND ${variable} ${SOURCE_APP}) + endif() + endforeach() + + set(${variable} ${${variable}} PARENT_SCOPE) +endfunction() + +# Converts the given application name into it's +# variable name which holds the build type. +function(ApplicationNameToVariable application variable) + string(TOUPPER ${application} ${variable}) + set(${variable} "APP_${${variable}}") + set(${variable} ${${variable}} PARENT_SCOPE) +endfunction() + +function(CheckApplicationsBuildList) + GetApplicationsList(APPLICATIONS_BUILD_LIST) + + if (APPS_BUILD STREQUAL "none") + set(APPS_DEFAULT_BUILD "disabled") + else() + set(APPS_DEFAULT_BUILD "enabled") + endif() + + # Sets BUILD_APPS_USE_WHITELIST + # Sets BUILD_APPS_WHITELIST + if (APPS_BUILD MATCHES "-only") + set(BUILD_APPS_USE_WHITELIST ON) + + if (APPS_BUILD STREQUAL "servers-only") + list(APPEND BUILD_APPS_WHITELIST authserver worldserver) + endif() + + if (APPS_BUILD STREQUAL "dbimport-only") + list(APPEND BUILD_APPS_WHITELIST dbimport) + endif() + endif() + + foreach(APPLICATION_BUILD_NAME ${APPLICATIONS_BUILD_LIST}) + ApplicationNameToVariable(${APPLICATION_BUILD_NAME} APPLICATION_BUILD_VARIABLE) + + if(${APPLICATION_BUILD_VARIABLE} STREQUAL "default") + if(BUILD_APPS_USE_WHITELIST) + list(FIND BUILD_APPS_WHITELIST "${APPLICATION_BUILD_NAME}" INDEX) + if(${INDEX} GREATER -1) + set(${APPLICATION_BUILD_VARIABLE} ${APPS_DEFAULT_BUILD}) + else() + set(${APPLICATION_BUILD_VARIABLE} "disabled") + endif() + else() + set(${APPLICATION_BUILD_VARIABLE} ${APPS_DEFAULT_BUILD}) + endif() + endif() + + # Build the Graph values + if(${APPLICATION_BUILD_VARIABLE} MATCHES "enabled") + if (${APPLICATION_BUILD_NAME} MATCHES "authserver") + set (BUILD_APPLICATION_AUTHSERVER 1 PARENT_SCOPE) + elseif(${APPLICATION_BUILD_NAME} MATCHES "worldserver") + set (BUILD_APPLICATION_WORLDSERVER 1 PARENT_SCOPE) + endif() + endif() + endforeach() +endfunction() diff --git a/src/cmake/macros/ConfigureTools.cmake b/src/cmake/macros/ConfigureTools.cmake new file mode 100644 index 0000000000..ece49ab481 --- /dev/null +++ b/src/cmake/macros/ConfigureTools.cmake @@ -0,0 +1,110 @@ +# +# This file is part of the AzerothCore Project. See AUTHORS file for Copyright information +# +# 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. +# + +set(BUILD_TOOLS_MAPS 0) +set(BUILD_TOOLS_DB_IMPORT 0) + +# Returns the base path to the tools directory in the source directory +function(GetToolsBasePath variable) + set(${variable} "${CMAKE_SOURCE_DIR}/src/tools" PARENT_SCOPE) +endfunction() + +# Stores the absolut path of the given tool in the variable +function(GetPathToTool tool variable) + GetToolsBasePath(TOOLS_BASE_PATH) + set(${variable} "${TOOLS_BASE_PATH}/${tool}" PARENT_SCOPE) +endfunction() + +# Stores the project name of the given tool in the variable +function(GetProjectNameOfToolName tool variable) + string(TOLOWER "${tool}" GENERATED_NAME) + set(${variable} "${GENERATED_NAME}" PARENT_SCOPE) +endfunction() + +# Creates a list of all applications and stores it in the given variable. +function(GetToolsList variable) + GetToolsBasePath(BASE_PATH) + file(GLOB LOCALE_SOURCE_TOOL_LIST RELATIVE + ${BASE_PATH} + ${BASE_PATH}/*) + + set(${variable}) + + foreach(SOURCE_TOOL ${LOCALE_SOURCE_TOOL_LIST}) + GetPathToTool(${SOURCE_TOOL} SOURCE_TOOL_PATH) + if(IS_DIRECTORY ${SOURCE_TOOL_PATH}) + list(APPEND ${variable} ${SOURCE_TOOL}) + endif() + endforeach() + + set(${variable} ${${variable}} PARENT_SCOPE) +endfunction() + +# Converts the given application name into it's +# variable name which holds the build type. +function(ToolNameToVariable application variable) + string(TOUPPER ${application} ${variable}) + set(${variable} "TOOL_${${variable}}") + set(${variable} ${${variable}} PARENT_SCOPE) +endfunction() + +function(CheckToolsBuildList) + GetToolsList(TOOLS_BUILD_LIST) + + if (TOOLS_BUILD STREQUAL "none") + set(TOOLS_DEFAULT_BUILD "disabled") + else() + set(TOOLS_DEFAULT_BUILD "enabled") + endif() + + # Sets BUILD_TOOLS_USE_WHITELIST + # Sets BUILD_TOOLS_WHITELIST + if (TOOLS_BUILD MATCHES "-only") + set(BUILD_TOOLS_USE_WHITELIST ON) + + if (TOOLS_BUILD STREQUAL "maps-only") + list(APPEND BUILD_TOOLS_WHITELIST map_extractor mmaps_generator vmap4_assembler vmap4_extractor) + endif() + + # if (TOOLS_BUILD STREQUAL "db-only") + # list(APPEND BUILD_TOOLS_WHITELIST dbimport) + # endif() + endif() + + # Set the TOOL_${TOOL_BUILD_NAME} variables from the + # variables set above + foreach(TOOL_BUILD_NAME ${TOOLS_BUILD_LIST}) + ToolNameToVariable(${TOOL_BUILD_NAME} TOOL_BUILD_VARIABLE) + + if (${TOOL_BUILD_VARIABLE} STREQUAL "default") + if (BUILD_TOOLS_USE_WHITELIST) + list(FIND BUILD_TOOLS_WHITELIST "${TOOL_BUILD_NAME}" INDEX) + if (${INDEX} GREATER -1) + set(${TOOL_BUILD_VARIABLE} ${TOOLS_DEFAULT_BUILD}) + else() + set(${TOOL_BUILD_VARIABLE} "disabled") + endif() + else() + set(${TOOL_BUILD_VARIABLE} ${TOOLS_DEFAULT_BUILD}) + endif() + endif() + + # Build the Graph values + if (${TOOL_BUILD_VARIABLE} MATCHES "enabled") + if (${TOOL_BUILD_NAME} MATCHES "dbimport") + set(BUILD_TOOLS_DB_IMPORT 1 PARENT_SCOPE) + else() + set(BUILD_TOOLS_MAPS 1 PARENT_SCOPE) + endif() + endif() + endforeach() +endfunction() -- cgit v1.2.3