ソースを参照

cmake: Ensure that all nessecary files are built and installed

- Build and install only included modules files
- Remove temp folder, as cmake should be built out of source.
- Install schema files per database included
Xenofon Karamanos 8 ヶ月 前
コミット
ade4c37d80
1 ファイル変更123 行追加87 行削除
  1. 123 87
      utils/kamctl/CMakeLists.txt

+ 123 - 87
utils/kamctl/CMakeLists.txt

@@ -1,59 +1,64 @@
 project(kamailio_utils)
 
-# if(NOT basedir) set(KAMCTL_TMP_DIR "/tmp") else() set(KAMCTL_TMP_DIR
-# "${basedir}") endif()
-
-set(KAMCTL_TMP_DIR "${CMAKE_BINARY_DIR}/kamctltmp")
-message(STATUS "Temporary kamctl.{db} files in : ${KAMCTL_TMP_DIR}")
-
-file(MAKE_DIRECTORY ${KAMCTL_TMP_DIR})
+get_property(FINAL_MODULES_LIST GLOBAL PROPERTY ADDED_MODULES_LIST)
 
 set(BIN_DIR "${CMAKE_INSTALL_FULL_SBINDIR}")
 set(LIB_DIR "${CMAKE_INSTALL_FULL_LIBDIR}/${MAIN_NAME}")
 set(CFG_DIR "${CMAKE_INSTALL_FULL_SYSCONFDIR}/${MAIN_NAME}")
 set(SHARE_DIR "${CMAKE_INSTALL_FULL_DATADIR}/${MAIN_NAME}")
 
-set(KAMCTL_BASE_FILES
-    kamctl.base
-    kamctl.ctlbase
-    kamctl.db_berkeley
-    kamctl.dbtext
-    kamctl.mysql
-    kamctl.oracle
-    kamctl.pgsql
-    kamctl.rpcfifo
-    kamctl.ser
-    kamctl.sqlbase
-    kamctl.sqlite)
+set(KAMCTL_BASE_FILES kamctl.base kamctl.ctlbase kamctl.rpcfifo kamctl.ser
+                      kamctl.sqlbase)
+
+if("db_berkeley" IN_LIST FINAL_MODULES_LIST)
+  set(KAMCTL_DB_FILES ${KAMCTL_DB_FILES} kamctl.db_berkeley)
+endif()
+if("db_text" IN_LIST FINAL_MODULES_LIST)
+  set(KAMCTL_DB_FILES ${KAMCTL_DB_FILES} kamctl.dbtext)
+endif()
+if("db_mysql" IN_LIST FINAL_MODULES_LIST)
+  set(KAMCTL_DB_FILES ${KAMCTL_DB_FILES} kamctl.mysql)
+endif()
+if("db_oracle" IN_LIST FINAL_MODULES_LIST)
+  set(KAMCTL_DB_FILES ${KAMCTL_DB_FILES} kamctl.oracle)
+endif()
+if("db_postgres" IN_LIST FINAL_MODULES_LIST)
+  set(KAMCTL_DB_FILES ${KAMCTL_DB_FILES} kamctl.pgsql)
+endif()
+if("db_sqlite" IN_LIST FINAL_MODULES_LIST)
+  set(KAMCTL_DB_FILES ${KAMCTL_DB_FILES} kamctl.sqlite)
+endif()
 
 # Install kamctl and it's database files
 add_custom_command(
-  OUTPUT "${KAMCTL_TMP_DIR}/kamctl"
+  OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/kamctl"
   COMMAND
     sed -e "s#/usr/local/sbin#${BIN_DIR}#g" -e
     "s#/usr/local/lib/kamailio#${LIB_DIR}#g" -e
     "s#/usr/local/etc/kamailio#${CFG_DIR}#g" <
-    ${CMAKE_CURRENT_SOURCE_DIR}/kamctl > ${KAMCTL_TMP_DIR}/kamctl
+    ${CMAKE_CURRENT_SOURCE_DIR}/kamctl > ${CMAKE_CURRENT_BINARY_DIR}/kamctl
   COMMENT "Processed kamctl with sed")
 install(
-  PROGRAMS ${KAMCTL_TMP_DIR}/kamctl
+  PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/kamctl
   DESTINATION ${CMAKE_INSTALL_SBINDIR}
   COMPONENT kamailio-utils-bin)
 
 # Create the depependencies list for the target kamctl
-set(KAMCTL_DEPENDENCIES "${KAMCTL_TMP_DIR}/kamctl")
+set(KAMCTL_DEPENDENCIES "${CMAKE_CURRENT_BINARY_DIR}/kamctl")
 
 # Install kamctl.base and the rest
-foreach(file ${KAMCTL_BASE_FILES})
+foreach(file IN LISTS KAMCTL_BASE_FILES KAMCTL_DB_FILES)
   # Append to the depependencies list for the target kamctl
-  list(APPEND KAMCTL_DEPENDENCIES "${KAMCTL_TMP_DIR}/${file}")
+  list(APPEND KAMCTL_DEPENDENCIES "${CMAKE_CURRENT_BINARY_DIR}/${file}")
+  # Process the file with sed and install it
   add_custom_command(
-    OUTPUT "${KAMCTL_TMP_DIR}/${file}"
-    COMMAND sed -e "s#/usr/local/sbin#${BIN_DIR}#g" <
-            ${CMAKE_CURRENT_SOURCE_DIR}/${file} > ${KAMCTL_TMP_DIR}/${file}
+    OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${file}"
+    COMMAND
+      sed -e "s#/usr/local/sbin#${BIN_DIR}#g" <
+      ${CMAKE_CURRENT_SOURCE_DIR}/${file} > ${CMAKE_CURRENT_BINARY_DIR}/${file}
     COMMENT "Processed ${file} with sed")
   install(
-    PROGRAMS ${KAMCTL_TMP_DIR}/${file}
+    PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${file}
     DESTINATION ${CMAKE_INSTALL_LIBDIR}/${MAIN_NAME}/kamctl
     COMPONENT kamailio-utils-bin)
 endforeach()
@@ -65,45 +70,56 @@ add_custom_target(
   COMMENT "Build kamctl and its dependencies")
 
 # Setup and install kamdbctl stuff
-set(KAMDB_BASE_FILES
-    kamdbctl.base
-    kamdbctl.db_berkeley
-    kamdbctl.dbtext
-    kamdbctl.mysql
-    kamdbctl.oracle
-    kamdbctl.pgsql
-    kamdbctl.sqlite
-    kamdbfunc.oracle)
+set(KAMDBCTL_BASE_FILES kamdbctl.base)
+
+if("db_berkeley" IN_LIST FINAL_MODULES_LIST)
+  set(KAMDBCTL_DB_FILES ${KAMDBCTL_DB_FILES} kamdbctl.db_berkeley)
+endif()
+if("db_text" IN_LIST FINAL_MODULES_LIST)
+  set(KAMDBCTL_DB_FILES ${KAMDBCTL_DB_FILES} kamdbctl.dbtext)
+endif()
+if("db_mysql" IN_LIST FINAL_MODULES_LIST)
+  set(KAMDBCTL_DB_FILES ${KAMDBCTL_DB_FILES} kamdbctl.mysql)
+endif()
+if("db_oracle" IN_LIST FINAL_MODULES_LIST)
+  set(KAMDBCTL_DB_FILES ${KAMDBCTL_DB_FILES} kamdbctl.oracle kamdbfunc.oracle)
+endif()
+if("db_postgres" IN_LIST FINAL_MODULES_LIST)
+  set(KAMDBCTL_DB_FILES ${KAMDBCTL_DB_FILES} kamdbctl.pgsql)
+endif()
+if("db_sqlite" IN_LIST FINAL_MODULES_LIST)
+  set(KAMDBCTL_DB_FILES ${KAMDBCTL_DB_FILES} kamdbctl.sqlite)
+endif()
 
 # Install kamdbctl
 add_custom_command(
-  OUTPUT "${KAMCTL_TMP_DIR}/kamdbctl"
+  OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/kamdbctl"
   COMMAND
     sed -e "s#/usr/local/sbin#${BIN_DIR}#g" -e
     "s#/usr/local/lib/kamailio#${LIB_DIR}#g" -e
     "s#/usr/local/etc/kamailio#${CFG_DIR}#g" <
-    ${CMAKE_CURRENT_SOURCE_DIR}/kamdbctl > ${KAMCTL_TMP_DIR}/kamdbctl
+    ${CMAKE_CURRENT_SOURCE_DIR}/kamdbctl > ${CMAKE_CURRENT_BINARY_DIR}/kamdbctl
   COMMENT "Processed kamdbctl with sed")
 install(
-  PROGRAMS ${KAMCTL_TMP_DIR}/kamdbctl
+  PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/kamdbctl
   DESTINATION ${CMAKE_INSTALL_SBINDIR}
   COMPONENT kamailio-utils-bin)
 
-set(KAMDB_DEPENDENCIES "${KAMCTL_TMP_DIR}/kamdbctl")
+set(KAMDB_DEPENDENCIES "${CMAKE_CURRENT_BINARY_DIR}/kamdbctl")
 
-foreach(file ${KAMDB_BASE_FILES})
-  list(APPEND KAMDB_DEPENDENCIES "${KAMCTL_TMP_DIR}/${file}")
+foreach(file IN LISTS KAMDBCTL_BASE_FILES KAMDBCTL_DB_FILES)
+  list(APPEND KAMDB_DEPENDENCIES "${CMAKE_CURRENT_BINARY_DIR}/${file}")
   # Install db setup base script
   add_custom_command(
-    OUTPUT "${KAMCTL_TMP_DIR}/${file}"
+    OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${file}"
     COMMAND
       sed -e "s#/usr/local/sbin#${BIN_DIR}#g" -e
       "s#/usr/local/etc/kamailio#${CFG_DIR}#g" -e
       "s#/usr/local/share/kamailio#${SHARE_DIR}#g" <
-      ${CMAKE_CURRENT_SOURCE_DIR}/${file} > ${KAMCTL_TMP_DIR}/${file}
+      ${CMAKE_CURRENT_SOURCE_DIR}/${file} > ${CMAKE_CURRENT_BINARY_DIR}/${file}
     COMMENT "Processed ${file}")
   install(
-    PROGRAMS ${KAMCTL_TMP_DIR}/${file}
+    PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${file}
     DESTINATION ${CMAKE_INSTALL_LIBDIR}/${MAIN_NAME}/kamctl
     COMPONENT kamailio-utils-bin)
 endforeach()
@@ -163,7 +179,8 @@ add_custom_target(kamctl_man DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/kamctl.8
                                      ${CMAKE_CURRENT_BINARY_DIR}/kamdbctl.8)
 
 install(
-  FILES ${CMAKE_CURRENT_BINARY_DIR}/kamctl.8 ${CMAKE_CURRENT_BINARY_DIR}/kamdbctl.8
+  FILES ${CMAKE_CURRENT_BINARY_DIR}/kamctl.8
+        ${CMAKE_CURRENT_BINARY_DIR}/kamdbctl.8
   DESTINATION ${CMAKE_INSTALL_MANDIR}/man8
   COMPONENT kamailio_man
   OPTIONAL)
@@ -242,7 +259,7 @@ else()
     # Change name for the folder
     if(db_name STREQUAL "pi_framework_table" OR db_name STREQUAL
                                                 "pi_framework_mod")
-      set(db_name_folder xhttpi_pi)
+      set(db_name_folder xhttp_pi)
     else()
       set(db_name_folder ${db_name})
     endif()
@@ -277,6 +294,12 @@ else()
         COMMENT "Processing ${table} for ${db_name}")
     endforeach()
 
+    # Before installing, ensure the target is built `dbschema_${db_name}`
+    install(
+      DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${db_name_folder}
+      DESTINATION ${CMAKE_INSTALL_DATADIR}/${MAIN_NAME}
+      OPTIONAL)
+
     add_custom_target(
       dbschema_${db_name}_clean
       COMMAND ${CMAKE_COMMAND} -E remove_directory
@@ -286,42 +309,55 @@ else()
 
   # Add targets for each database type Pi framework targets should combined into
   # one
-  add_db_target(pi_framework_table "${STYLESHEETS}/pi_framework_table.xsl")
-  add_db_target(pi_framework_mod "${STYLESHEETS}/pi_framework_mod.xsl")
-  add_db_target(mysql "${STYLESHEETS}/mysql.xsl")
-  add_db_target(postgres "${STYLESHEETS}/postgres.xsl")
-  add_db_target(oracle "${STYLESHEETS}/oracle.xsl")
-  add_db_target(dbtext "${STYLESHEETS}/dbtext.xsl")
-  add_db_target(db_berkeley "${STYLESHEETS}/db_berkeley.xsl")
-  add_db_target(db_sqlite "${STYLESHEETS}/db_sqlite.xsl")
-  add_db_target(mongodb "${STYLESHEETS}/mongodb.xsl")
-  add_db_target(db_redis "${STYLESHEETS}/db_redis.xsl")
-
-  add_custom_target(
-    dbschema
-    DEPENDS dbschema_mysql
-            dbschema_postgres
-            dbschema_oracle
-            dbschema_dbtext
-            dbschema_db_berkeley
-            dbschema_db_sqlite
-            dbschema_mongodb
-            dbschema_db_redis
-            dbschema_pi_framework_mod
-            dbschema_pi_framework_table
-    COMMENT "Generating schemas for all dbs...")
-
-  add_custom_target(
-    dbschema_clean
-    DEPENDS dbschema_mysql_clean
-            dbschema_postgres_clean
-            dbschema_oracle_clean
-            dbschema_dbtext_clean
-            dbschema_db_berkeley_clean
-            dbschema_db_sqlite_clean
-            dbschema_mongodb_clean
-            dbschema_db_redis_clean
-            dbschema_pi_framework_mod_clean
-            dbschema_pi_framework_table_clean
-    COMMENT "Cleaning schemas for all dbs...")
+  add_custom_target(dbschema COMMENT "Generating schemas for all dbs...")
+  add_custom_target(dbschema_clean COMMENT "Cleaning schemas for all dbs...")
+
+  if("xhttp_pi" IN_LIST FINAL_MODULES_LIST)
+    add_db_target(pi_framework_table "${STYLESHEETS}/pi_framework_table.xsl")
+    add_db_target(pi_framework_mod "${STYLESHEETS}/pi_framework_mod.xsl")
+    add_dependencies(dbschema dbschema_pi_framework_table
+                     dbschema_pi_framework_mod)
+    add_dependencies(dbschema_clean dbschema_pi_framework_table_clean
+                     dbschema_pi_framework_mod_clean)
+  endif()
+  if("db_mysql" IN_LIST FINAL_MODULES_LIST)
+    add_db_target(mysql "${STYLESHEETS}/mysql.xsl")
+    add_dependencies(dbschema dbschema_mysql)
+    add_dependencies(dbschema_clean dbschema_mysql_clean)
+  endif()
+  if("db_postgres" IN_LIST FINAL_MODULES_LIST)
+    add_db_target(postgres "${STYLESHEETS}/postgres.xsl")
+    add_dependencies(dbschema dbschema_postgres)
+    add_dependencies(dbschema_clean dbschema_postgres_clean)
+  endif()
+  if("db_oracle" IN_LIST FINAL_MODULES_LIST)
+    add_db_target(oracle "${STYLESHEETS}/oracle.xsl")
+    add_dependencies(dbschema dbschema_oracle)
+    add_dependencies(dbschema_clean dbschema_oracle_clean)
+  endif()
+  if("db_text" IN_LIST FINAL_MODULES_LIST)
+    add_db_target(dbtext "${STYLESHEETS}/dbtext.xsl")
+    add_dependencies(dbschema dbschema_dbtext)
+    add_dependencies(dbschema_clean dbschema_dbtext_clean)
+  endif()
+  if("db_berkeley" IN_LIST FINAL_MODULES_LIST)
+    add_db_target(db_berkeley "${STYLESHEETS}/db_berkeley.xsl")
+    add_dependencies(dbschema dbschema_db_berkeley)
+    add_dependencies(dbschema_clean dbschema_db_berkeley_clean)
+  endif()
+  if("db_sqlite" IN_LIST FINAL_MODULES_LIST)
+    add_db_target(db_sqlite "${STYLESHEETS}/db_sqlite.xsl")
+    add_dependencies(dbschema dbschema_db_sqlite)
+    add_dependencies(dbschema_clean dbschema_db_sqlite_clean)
+  endif()
+  if("db_mongodb" IN_LIST FINAL_MODULES_LIST)
+    add_db_target(mongodb "${STYLESHEETS}/mongodb.xsl")
+    add_dependencies(dbschema dbschema_mongodb)
+    add_dependencies(dbschema_clean dbschema_mongodb_clean)
+  endif()
+  if("db_redis" IN_LIST FINAL_MODULES_LIST)
+    add_db_target(db_redis "${STYLESHEETS}/db_redis.xsl")
+    add_dependencies(dbschema dbschema_db_redis)
+    add_dependencies(dbschema_clean dbschema_db_redis_clean)
+  endif()
 endif()