فهرست منبع

cmake: add dbschema target

Xenofon Karamanos 9 ماه پیش
والد
کامیت
3b666cd45d
1فایلهای تغییر یافته به همراه134 افزوده شده و 0 حذف شده
  1. 134 0
      utils/kamctl/CMakeLists.txt

+ 134 - 0
utils/kamctl/CMakeLists.txt

@@ -188,3 +188,137 @@ add_custom_target(
                          # kamailio-utils-bin components"
                          # kamailio-utils-bin components"
   DEPENDS install-kamailio-utils-cfg install-kamailio-utils-bin
   DEPENDS install-kamailio-utils-cfg install-kamailio-utils-bin
 )
 )
+
+# ----------
+# dbschema target:
+# Old Makefiles: make dbschema declared in src/ Makefile
+# This was using the makefile found in src/lib/srdb1/schema folder.
+#
+# TODO: Revise where we want the target declared.
+# New CMakelists.txt
+# Declare the target in srdb1 CMakeLists.txt file.
+
+find_program(XSLTPROC_EXECUTABLE xsltproc REQUIRED)
+
+option(XSLT_VALIDATE, "Enable schema validation during XSL transformations" ON)
+option(XSLT_VERBOSE, "Enable verbose output for XSL transformations" OFF)
+
+set(XSLTPROC_FLAGS --xinclude)
+if(NOT ${XSLT_VALIDATE})
+  set(XSLTPROC_FLAGS ${XSLTPROC_FLAGS} --novalid)
+endif()
+if(${XSLT_VERBOSE})
+  set(XSLTPROC_FLAGS ${XSLTPROC_FLAGS} --verbose)
+endif()
+
+# Set the root directories
+set(ROOTDIR ${CMAKE_SOURCE_DIR})
+set(ROOTDOC ${CMAKE_SOURCE_DIR}/src)
+set(STYLESHEETS ${ROOTDIR}/doc/stylesheets/dbschema_k/xsl)
+set(SCHEME ${ROOTDIR}/utils/kamctl)
+
+set(CATALOG ${ROOTDIR}/doc/stylesheets/dbschema_k/catalog.xml)
+# List of XML files
+file(GLOB TABLES "${CMAKE_SOURCE_DIR}/src/lib/srdb1/schema/kamailio-*.xml")
+# message(WARNING "TABLES : ${TABLES}")
+set(EXTRACTED_TABLES "")
+foreach(TABLE ${TABLES})
+  get_filename_component(TABLE_NAME "${TABLE}" NAME)
+  string(REPLACE "kamailio-" "" TABLE_NAME "${TABLE_NAME}")
+  string(REPLACE ".xml" "" TABLE_NAME "${TABLE_NAME}")
+  list(APPEND EXTRACTED_TABLES "${TABLE_NAME}")
+endforeach()
+# Output the extracted table names
+message(STATUS "Extracted Tables: ${EXTRACTED_TABLES}")
+
+# Function to add a target for each database type prefix with dbschema
+# ie db_name = redis -> target = dbschema_redis
+function(add_db_target db_name xsl_file)
+  # 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)
+  else()
+    set(db_name_folder ${db_name})
+  endif()
+
+  add_custom_target(
+    dbschema_${db_name}
+    COMMAND ${CMAKE_COMMAND} -E make_directory "${db_name_folder}"
+    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+  )
+
+  # Loop through each table and add a command for xsltproc
+  foreach(TABLE ${EXTRACTED_TABLES})
+    # Determine the prefix based on db_name
+    if(db_name STREQUAL "db_berkeley"
+       OR db_name STREQUAL "db_redis"
+       OR db_name STREQUAL "dbtext"
+       OR db_name STREQUAL "mongodb"
+    )
+      set(PREFIX '')
+    else()
+      set(PREFIX "${TABLE}-")
+    endif()
+
+    add_custom_command(
+      TARGET dbschema_${db_name}
+      PRE_BUILD
+      COMMAND
+        XML_CATALOG_FILES=${CATALOG} ${XSLTPROC_EXECUTABLE} ${XSLTPROC_FLAGS}
+        --stringparam dir ${CMAKE_CURRENT_BINARY_DIR}/${db_name_folder}
+        --stringparam prefix ${PREFIX} --stringparam db ${db_name} ${xsl_file}
+        "kamailio-${TABLE}.xml"
+      WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/src/lib/srdb1/schema"
+      COMMENT "Processing ${TABLE} for ${db_name}"
+    )
+  endforeach()
+
+  add_custom_target(
+    dbschema_${db_name}_clean
+    COMMAND ${CMAKE_COMMAND} -E remove_directory
+            "${CMAKE_CURRENT_BINARY_DIR}/${db_name_folder}"
+  )
+endfunction()
+
+# 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
+)
+
+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
+)