|
@@ -7,28 +7,34 @@ set_property(GLOBAL PROPERTY ALL_MODULE_DOC_TARGETS "")
|
|
|
|
|
|
include(${CMAKE_SOURCE_DIR}/cmake/groups.cmake)
|
|
|
|
|
|
-# TODO: Add proper search for all or find better way TODO: Allow the selection
|
|
|
-# of a group of modules defined in groups.cmake
|
|
|
-set(MODULE_GROUP_NAMES ${AVAILABLE_GROUPS})
|
|
|
+# AVAIABLE_GROUPS is defined in groups.cmake
|
|
|
+set(AVAILABLE_GROUP_NAMES ${AVAILABLE_GROUPS})
|
|
|
set(MODULE_GROUP_NAME
|
|
|
"DEFAULT"
|
|
|
- CACHE STRING "Group of modules to build (all, or a custom group)")
|
|
|
-set_property(CACHE MODULE_GROUP_NAME PROPERTY STRINGS ${MODULE_GROUP_NAMES})
|
|
|
-
|
|
|
-# Check if the specified group exists
|
|
|
-list(FIND AVAILABLE_GROUPS "${MODULE_GROUP_NAME}" GROUP_INDEX)
|
|
|
-if(GROUP_INDEX EQUAL -1)
|
|
|
- message(
|
|
|
- FATAL_ERROR
|
|
|
- "Invalid module group specified: ${MODULE_GROUP_NAME}. Available groups: ${AVAILABLE_GROUPS}"
|
|
|
- )
|
|
|
-endif()
|
|
|
-
|
|
|
-# Construct the full module group name
|
|
|
-set(FULL_MODULE_GROUP_NAME "MODULE_GROUP_${MODULE_GROUP_NAME}")
|
|
|
-get_property(MODULE_GROUP VARIABLE PROPERTY ${FULL_MODULE_GROUP_NAME})
|
|
|
-message(STATUS "Building module group: ${FULL_MODULE_GROUP_NAME}")
|
|
|
-message(STATUS "Modules: ${MODULE_GROUP}")
|
|
|
+ CACHE STRING
|
|
|
+ "Group of modules to build (one or multiple space seperated group)")
|
|
|
+set_property(CACHE MODULE_GROUP_NAME PROPERTY STRINGS ${AVAILABLE_GROUP_NAMES})
|
|
|
+
|
|
|
+# User may provide multiple groups seperated by space
|
|
|
+separate_arguments(MODULE_GROUP_LIST UNIX_COMMAND "${MODULE_GROUP_NAME}")
|
|
|
+message(STATUS "Building groups: ${MODULE_GROUP_LIST}")
|
|
|
+
|
|
|
+# Check if elements in MODULE_GROUP_LIST are valid by checking against
|
|
|
+# AVAILABLE_GROUP_NAMES
|
|
|
+set(FULL_MODULE_GROUP_NAMES "")
|
|
|
+foreach(group_name IN LISTS MODULE_GROUP_LIST)
|
|
|
+ list(FIND AVAILABLE_GROUP_NAMES "${group_name}" INDEX)
|
|
|
+ if(INDEX EQUAL -1)
|
|
|
+ message(FATAL_ERROR "Invalid module group specified: ${group_name}.
|
|
|
+ Available groups: ${AVAILABLE_GROUPS}")
|
|
|
+ else()
|
|
|
+ list(APPEND FULL_MODULE_GROUP_NAMES "MODULE_GROUP_${group_name}")
|
|
|
+ # get_property(MODULE_GROUP VARIABLE PROPERTY "MODULE_GROUP_${GROUP_NAME}")
|
|
|
+ # message(STATUS "Building module group: MODULE_GROUP_${GROUP_NAME}")
|
|
|
+ # message(STATUS "Modules: ${MODULE_GROUP}")
|
|
|
+ endif()
|
|
|
+endforeach()
|
|
|
+# message(STATUS "Expanded module groups: ${FULL_MODULE_GROUP_NAMES}")
|
|
|
|
|
|
# Allow users to specify extra modules to build
|
|
|
set(INCLUDE_MODULES
|
|
@@ -42,58 +48,58 @@ set(EXCLUDE_MODULES
|
|
|
include(${CMAKE_SOURCE_DIR}/cmake/modules-docs.cmake)
|
|
|
|
|
|
# Function to add modules from a list
|
|
|
-function(add_module_group GROUP_MODULES)
|
|
|
- foreach(MODULE_NAME IN LISTS GROUP_MODULES)
|
|
|
+function(add_module_group group_modules)
|
|
|
+ foreach(module_name IN LISTS group_modules)
|
|
|
# Check if the module has already been added
|
|
|
get_property(ALREADY_ADDED GLOBAL PROPERTY ADDED_MODULES_LIST)
|
|
|
- if(";${ALREADY_ADDED};" MATCHES ";${MODULE_NAME};")
|
|
|
+ if(";${ALREADY_ADDED};" MATCHES ";${module_name};")
|
|
|
message(
|
|
|
- STATUS "Module ${MODULE_NAME} has already been added. Skipping...")
|
|
|
+ STATUS "Module ${module_name} has already been added. Skipping...")
|
|
|
else()
|
|
|
# Construct the path to the module
|
|
|
- set(MODULE_PATH "${MODULES_DIR}/${MODULE_NAME}")
|
|
|
- # message(STATUS "Adding module: ${MODULE_NAME} (${MODULE_PATH})") Check
|
|
|
- # if the directory exists before adding
|
|
|
- if(IS_DIRECTORY ${MODULE_PATH} AND EXISTS ${MODULE_PATH}/CMakeLists.txt)
|
|
|
- add_subdirectory(${MODULE_PATH})
|
|
|
+ set(module_path "${MODULES_DIR}/${module_name}")
|
|
|
+ # message(STATUS "Adding module: ${MODULE_NAME} (${MODULE_PATH})")
|
|
|
+
|
|
|
+ # Check if the directory exists before adding
|
|
|
+ if(IS_DIRECTORY ${module_path} AND EXISTS ${module_path}/CMakeLists.txt)
|
|
|
+ add_subdirectory(${module_path})
|
|
|
# Remove the 'lib' prefix from the module name
|
|
|
- set_target_properties(${MODULE_NAME} PROPERTIES PREFIX "")
|
|
|
+ set_target_properties(${module_name} PROPERTIES PREFIX "")
|
|
|
|
|
|
# Add this policy to new so we can use target_link_libraries(... PRIVATE
|
|
|
# ...) to link against targets defined in children directories
|
|
|
if(POLICY CMP0079)
|
|
|
cmake_policy(SET CMP0079 NEW)
|
|
|
endif()
|
|
|
- target_link_libraries(${MODULE_NAME} PRIVATE common_modules)
|
|
|
+ target_link_libraries(${module_name} PRIVATE common_modules)
|
|
|
target_compile_definitions(
|
|
|
- ${MODULE_NAME} PRIVATE MOD_NAMEID=${MODULE_NAME}
|
|
|
- MOD_NAME=\"${MODULE_NAME}\")
|
|
|
+ ${module_name} PRIVATE MOD_NAMEID=${module_name}
|
|
|
+ MOD_NAME=\"${module_name}\")
|
|
|
set_target_properties(
|
|
|
- ${MODULE_NAME}
|
|
|
- PROPERTIES
|
|
|
- INSTALL_RPATH
|
|
|
- "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/${MAIN_NAME}")
|
|
|
+ ${module_name} PROPERTIES INSTALL_RPATH
|
|
|
+ "${CMAKE_INSTALL_FULL_LIBDIR}/${MAIN_NAME}")
|
|
|
+
|
|
|
# Install the module to the appropriate directory under the installation
|
|
|
# prefix
|
|
|
install(
|
|
|
- TARGETS ${MODULE_NAME}
|
|
|
+ TARGETS ${module_name}
|
|
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/${MAIN_NAME}/modules
|
|
|
COMPONENT kamailio_modules)
|
|
|
# Add the module to the list of added modules
|
|
|
- set_property(GLOBAL APPEND PROPERTY ADDED_MODULES_LIST ${MODULE_NAME})
|
|
|
+ set_property(GLOBAL APPEND PROPERTY ADDED_MODULES_LIST ${module_name})
|
|
|
if(BUILD_DOC)
|
|
|
- docs_add_module(${MODULE_NAME})
|
|
|
+ docs_add_module(${module_name})
|
|
|
set_property(GLOBAL APPEND PROPERTY ALL_MODULE_DOC_TARGETS
|
|
|
- ${MODULE_NAME}_doc)
|
|
|
+ ${module_name}_doc)
|
|
|
endif()
|
|
|
else()
|
|
|
- message(WARNING "Module directory ${MODULE_PATH} does not exist.")
|
|
|
+ message(FATAL_ERROR "Module directory ${module_path} does not exist.")
|
|
|
endif()
|
|
|
endif()
|
|
|
endforeach()
|
|
|
endfunction()
|
|
|
|
|
|
-list(APPEND FINAL_MODULES_LIST ${MODULE_GROUP})
|
|
|
+list(APPEND FINAL_MODULES_LIST "")
|
|
|
|
|
|
# Parse and add extra modules specified by the user
|
|
|
separate_arguments(INCLUDE_MODULES_LIST UNIX_COMMAND "${INCLUDE_MODULES}")
|
|
@@ -107,23 +113,32 @@ list(APPEND FINAL_MODULES_LIST ${INCLUDE_MODULES_LIST})
|
|
|
separate_arguments(EXCLUDE_MODULES_LIST UNIX_COMMAND "${EXCLUDE_MODULES}")
|
|
|
message(STATUS "Excluded modules (exlcude even if in included modules):
|
|
|
${EXCLUDE_MODULES_LIST}")
|
|
|
-foreach(MODULE_NAME IN LISTS EXCLUDE_MODULES_LIST)
|
|
|
+foreach(module_name IN LISTS EXCLUDE_MODULES_LIST)
|
|
|
# if in list remove it and print a message
|
|
|
- if(";${FINAL_MODULES_LIST};" MATCHES ";${MODULE_NAME};")
|
|
|
- list(REMOVE_ITEM FINAL_MODULES_LIST ${MODULE_NAME})
|
|
|
- message(STATUS "Removed module: ${MODULE_NAME}")
|
|
|
+ if(";${FINAL_MODULES_LIST};" MATCHES ";${module_name};")
|
|
|
+ list(REMOVE_ITEM FINAL_MODULES_LIST ${module_name})
|
|
|
+ message(STATUS "Removed module: ${module_name}")
|
|
|
endif()
|
|
|
endforeach()
|
|
|
|
|
|
# Add each group of modules
|
|
|
add_module_group("${FINAL_MODULES_LIST}")
|
|
|
+foreach(group IN LISTS FULL_MODULE_GROUP_NAMES)
|
|
|
+ get_property(MODULES_IN_GROUP VARIABLE PROPERTY "${group}")
|
|
|
+ if(VERBOSE)
|
|
|
+ message(STATUS "Modules in ${group}: ${MODULES_IN_GROUP}")
|
|
|
+ endif()
|
|
|
+ add_module_group("${MODULES_IN_GROUP}")
|
|
|
+endforeach()
|
|
|
|
|
|
# Add a kamailio_docs target that depends on all module documentation targets
|
|
|
if(BUILD_DOC)
|
|
|
- message(
|
|
|
- STATUS
|
|
|
- "Enabled documentation generation for: ${FINAL_MODULES_LIST}. To override, use '-DBUILD_DOC=OFF'"
|
|
|
- )
|
|
|
+ get_property(ADDED_MODULES_LIST GLOBAL PROPERTY ADDED_MODULES_LIST)
|
|
|
+ if(VERBOSE)
|
|
|
+ message(STATUS "Enabled documentation generation for: ${ADDED_MODULES_LIST}.
|
|
|
+ To override, use '-DBUILD_DOC=OFF'")
|
|
|
+ endif()
|
|
|
+
|
|
|
get_property(ALL_MODULE_DOC_TARGETS GLOBAL PROPERTY ALL_MODULE_DOC_TARGETS)
|
|
|
# message(STATUS "ALL_MODULE_DOC_TARGETS: ${ALL_MODULE_DOC_TARGETS}")
|
|
|
|
|
@@ -136,5 +151,6 @@ if(BUILD_DOC)
|
|
|
install_kamailio_docs
|
|
|
COMMAND ${CMAKE_COMMAND} --install ${CMAKE_BINARY_DIR} --component
|
|
|
kamailio_docs
|
|
|
- DEPENDS kamailio_docs)
|
|
|
+ DEPENDS kamailio_docs
|
|
|
+ COMMENT "Installing Kamailio documentation")
|
|
|
endif()
|