浏览代码

cmake: Refactor packaging setup and improve installation paths

- Moved packaging configuration to a new deb-packaging.cmake file for better organization.
- Updated installation paths in CMakeLists to use DESTDIR for flexibility.
- Enhanced group handling for module packaging, allowing for "ALL_PACKAGED" option.
Xenofon Karamanos 7 月之前
父节点
当前提交
cdf9a4716d
共有 6 个文件被更改,包括 99 次插入81 次删除
  1. 5 8
      CMakeLists.txt
  2. 18 0
      cmake/deb-packaging.cmake
  3. 66 66
      cmake/groups.cmake
  4. 2 3
      src/CMakeLists.txt
  5. 6 2
      src/modules/CMakeLists.txt
  6. 2 2
      utils/kamctl/CMakeLists.txt

+ 5 - 8
CMakeLists.txt

@@ -80,13 +80,10 @@ add_subdirectory(utils/kamcmd)
 # and scirpts are using {CMAKE_BINARY_DIR} from where they where first included.
 include(${CMAKE_SOURCE_DIR}/cmake/dbschema.cmake)
 
-# TODO: Packaging stuuf. These should be on different file propably
-set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
-set(CPACK_PACKAGE_NAME kamailio)
-set(CPACK_GENERATOR DEB)
-set(CPACK_DEBIAN_PACKAGE_MAINTAINER "test")
-
-include(CPack)
+# ----------
+# Packaging
+# ----------
+include(${CMAKE_SOURCE_DIR}/cmake/deb-packaging.cmake)
 
 # Add uninstall target
 if(NOT TARGET uninstall)
@@ -98,6 +95,6 @@ if(NOT TARGET uninstall)
   add_custom_target(
     uninstall
     COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake/cmake-uninstall.cmake
-    COMMENT "Uninstalling"
+    COMMENT "Uninstalling ${PROJECT_NAME}-${PROJECT_VERSION} from ${CMAKE_INSTALL_PREFIX}"
   )
 endif()

+ 18 - 0
cmake/deb-packaging.cmake

@@ -0,0 +1,18 @@
+# Retrieve all defined components
+get_cmake_property(CPACK_COMPONENTS_ALL COMPONENTS)
+
+message(STATUS "All components: ${CPACK_COMPONENTS_ALL}")
+# Optionally filter components
+# list(FILTER CPACK_COMPONENTS_ALL INCLUDE REGEX "^(core|tls)$")
+
+set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
+# set(CPACK_PACKAGE_NAME kamailio)
+set(CPACK_DEBIAN_PACKAGE_NAME kamailio)
+set(CPACK_GENERATOR DEB)
+set(CPACK_DEBIAN_PACKAGE_MAINTAINER "test")
+set(CPACK_DEB_COMPONENT_INSTALL ON)
+set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
+set(CPACK_PACKAGING_INSTALL_PREFIX "/usr")
+
+# Configure CPack with the selected components
+include(CPack)

+ 66 - 66
cmake/groups.cmake

@@ -687,74 +687,74 @@ set(MODULE_GROUP_KRTP_MEDIA_SERVER ${MOD_LIST_RTP_MEDIA_SERVER})
 # list of static modules
 set(STATIC_MODULES "")
 
-list(
-  APPEND
-  AVAILABLE_GROUPS
-  KSTANDARD
-  KMINI
-  KPCRE
-  KMYSQL
-  KPOSTGRES
-  KCPL
-  KXML
-  KRADIUS
-  KUNIXODBC
-  KPERL
-  KSNMPSTATS
-  KXMPP
-  KBERKELEY
-  KLDAP
-  KUTILS
-  KHTTP_ASYNC
-  KMEMCACHED
-  KTLS_BASIC
-  KTLS
-  KTLS_WOLFSSL
-  KWEBSOCKET
-  KPRESENCE
-  KLUA
-  KPYTHON
-  KPYTHON3
-  KRUBY
-  KGEOIP
-  KGEOIP2
-  KSQLITE
-  KJSON_BASIC
-  KJSON
-  KJANSSON_BASIC
-  KJANSSON
-  KREDIS
-  KIMS
-  KOUTBOUND
-  KJAVA
-  KDNSSEC
-  KSCTP
-  KAUTHEPH
-  KGZCOMPRESS
-  KUUID
-  KEV
-  KJWT
-  KLWSC
-  KSTIRSHAKEN
-  KKAZOO
-  KMONGODB
-  KCNXCC
-  KERLANG
-  KSYSTEMD
-  KNSQ
-  KRABBITMQ
-  KPHONENUM
-  KKAFKA
-  KMQTT
-  KNATS
-  KRUXC
-  KMICROHTTPD
-  KNGHTTP2
-  KGCRYPT
-  KSECSIPID
-  KRT_MEDIA_SERVER
+set(MODULE_GROUP_PACKAGE_GROUPS
+    KPCRE
+    KMYSQL
+    KPOSTGRES
+    KCPL
+    KXML
+    KRADIUS
+    KUNIXODBC
+    KPERL
+    KSNMPSTATS
+    KXMPP
+    KBERKELEY
+    KLDAP
+    KUTILS
+    KHTTP_ASYNC
+    KMEMCACHED
+    KTLS_BASIC
+    KTLS
+    KTLS_WOLFSSL
+    KWEBSOCKET
+    KPRESENCE
+    KLUA
+    KPYTHON
+    KPYTHON3
+    KRUBY
+    KGEOIP
+    KGEOIP2
+    KSQLITE
+    KJSON_BASIC
+    KJSON
+    KJANSSON_BASIC
+    KJANSSON
+    KREDIS
+    KIMS
+    KOUTBOUND
+    KJAVA
+    KDNSSEC
+    KSCTP
+    KAUTHEPH
+    KGZCOMPRESS
+    KUUID
+    KEV
+    KJWT
+    KLWSC
+    KSTIRSHAKEN
+    KKAZOO
+    KMONGODB
+    KCNXCC
+    KERLANG
+    KSYSTEMD
+    KNSQ
+    KRABBITMQ
+    KPHONENUM
+    KKAFKA
+    KMQTT
+    KNATS
+    KRUXC
+    KMICROHTTPD
+    KNGHTTP2
+    KGCRYPT
+    KSECSIPID
+    KRT_MEDIA_SERVER
 )
 
+# Add group names to available group and provide "ALL_PACKAGED" as well
+# for easier packaging using components
+list(APPEND AVAILABLE_GROUPS ALL_PACKAGED ${MODULE_GROUP_PACKAGE_GROUPS})
+
 # Find the group name for the target by checking if the module is in the
 # list of modules to be built and if so, use the group name of that module
 # group_name can be used afterwards.

+ 2 - 3
src/CMakeLists.txt

@@ -227,18 +227,17 @@ install(
         message(STATUS \"${CFG_NAME}.cfg already exists in \"
         \"\${dir}/${CFG_NAME}.cfg. Installing as ${CFG_NAME}.cfg.sample\")
       file(INSTALL \"${CMAKE_SOURCE_DIR}/etc/kamailio.cfg\"
-        DESTINATION \"${CMAKE_INSTALL_FULL_SYSCONFDIR}/${MAIN_NAME}\"
+        DESTINATION \"$ENV{DESTDIR}${CMAKE_INSTALL_FULL_SYSCONFDIR}/${MAIN_NAME}\"
         RENAME \"${CFG_NAME}.cfg.sample\"
         PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
       )
     else()
         file(INSTALL \"${CMAKE_SOURCE_DIR}/etc/kamailio.cfg\"
-          DESTINATION \"${CMAKE_INSTALL_FULL_SYSCONFDIR}/${MAIN_NAME}\"
+          DESTINATION \"$ENV{DESTDIR}${CMAKE_INSTALL_FULL_SYSCONFDIR}/${MAIN_NAME}\"
           PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
           RENAME \"${CFG_NAME}.cfg\"
         )
     endif()
-
 "
   COMPONENT kamailio-core
 )

+ 6 - 2
src/modules/CMakeLists.txt

@@ -17,8 +17,12 @@ set(MODULE_GROUP_NAME
 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}")
+if(MODULE_GROUP_NAME STREQUAL "ALL_PACKAGED")
+  set(MODULE_GROUP_LIST ${MODULE_GROUP_PACKAGE_GROUPS})
+else()
+  separate_arguments(MODULE_GROUP_LIST UNIX_COMMAND "${MODULE_GROUP_NAME}")
+  message(STATUS "Building groups: ${MODULE_GROUP_LIST}")
+endif()
 
 # Check if elements in MODULE_GROUP_LIST are valid by checking against
 # AVAILABLE_GROUP_NAMES

+ 2 - 2
utils/kamctl/CMakeLists.txt

@@ -72,13 +72,13 @@ install(
         message(STATUS \"kamctlrc already exists in\${dir}/kamctlrc.
           Installing as kamctlrc.sample\")
         file(INSTALL \"${CMAKE_CURRENT_SOURCE_DIR}/kamctlrc\"
-          DESTINATION \"${CMAKE_INSTALL_FULL_SYSCONFDIR}/${MAIN_NAME}\"
+          DESTINATION \"$ENV{DESTDIR}${CMAKE_INSTALL_FULL_SYSCONFDIR}/${MAIN_NAME}\"
           RENAME \"kamctlrc.sample\"
           PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
         )
     else()
         file(INSTALL \"${CMAKE_CURRENT_SOURCE_DIR}/kamctlrc\"
-            DESTINATION \"${CMAKE_INSTALL_FULL_SYSCONFDIR}/${MAIN_NAME}\"
+            DESTINATION \"$ENV{DESTDIR}${CMAKE_INSTALL_FULL_SYSCONFDIR}/${MAIN_NAME}\"
             PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)
     endif()
 "