modules-docs.cmake 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. option(DOCS_XSL_VAIDATION "Docbook document validation" OFF)
  2. option(DOCS_NOCATALOG "ON: Use standard catalog from OS | OFF: Use custom catalog " OFF)
  3. set(DOCS_SOURCES
  4. "index.html"
  5. CACHE STRING "Documentation files list"
  6. )
  7. set(DOCS_README
  8. ${DOCS_SOURCES}
  9. CACHE STRING "Readme Documentation files list"
  10. )
  11. set(DOCS_HTML
  12. ${DOCS_SOURCES}
  13. CACHE STRING "HTML Documentation files list"
  14. )
  15. set(DOCS_TXT
  16. ${DOCS_SOURCES}
  17. CACHE STRING "TXT Documentation files list"
  18. )
  19. set(DOCS_OUTPUT_DIR
  20. ${CMAKE_BINARY_DIR}/doc/docbook
  21. CACHE STRING "Path to build HTML docs"
  22. )
  23. set(DOCBOOK_DIR ${CMAKE_SOURCE_DIR}/doc/docbook)
  24. set(STYLESHEET_DIR ${CMAKE_SOURCE_DIR}/doc/stylesheets)
  25. set(DEPS_XSL ${DOCBOOK_DIR}/dep.xsl)
  26. set(SINGLE_HTML_XSL ${DOCBOOK_DIR}/html.xsl)
  27. set(CHUNKED_HTML_XSL ${DOCBOOK_DIR}/html.chunked.xsl)
  28. set(TXT_XSL ${DOCBOOK_DIR}/txt.xsl)
  29. set(README_XSL ${DOCBOOK_DIR}/readme.xsl)
  30. set(DOCS_HTML_CSS
  31. "/css/sr-doc.css"
  32. CACHE STRING "Path to the CSS file"
  33. )
  34. set(CATALOG ${DOCBOOK_DIR}/catalog.xml)
  35. if(DOCS_NOCATALOG)
  36. set(XMLCATATLOGX "")
  37. else()
  38. set(XMLCATATLOGX "XML_CATALOG_FILES=${CATALOG}")
  39. endif()
  40. # Set flags for xtproc for generating documentation and allow user defined
  41. set(DOCS_XSLTPROC_FLAGS
  42. ""
  43. CACHE STRING "Xsltransform processor flags"
  44. )
  45. if(NOT DOCS_XSL_VAIDATION)
  46. if(VERBOSE)
  47. message(STATUS "DOCS_XSL_VAIDATION=OFF"
  48. "Disabling xsl validation when generating documentation"
  49. )
  50. endif()
  51. list(APPEND DOCS_XSLTPROC_FLAGS --novalid)
  52. endif()
  53. # Set lynx flags for generating readmes and allow user defined
  54. set(DOCS_LYNX_FLAGS
  55. "-nolist"
  56. CACHE STRING "Lynx readme generator flags"
  57. )
  58. # Function to add a module docs entry
  59. function(docs_add_module group_name module_name)
  60. # message(STATUS "Adding documentation for module ${MODULE_NAME}")
  61. set(module_path "${MODULES_DIR}/${module_name}")
  62. set(module_doc_path "${module_path}/doc")
  63. add_custom_target(
  64. ${module_name}_doc_text
  65. DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${module_name}/${module_name}.txt
  66. COMMENT "Processing target ${module_name}_doc_text"
  67. )
  68. # This is essentialy an alias of doc_text target but with extra copy command
  69. # to copy the text file to the source tree directory.
  70. add_custom_target(${module_name}_readme COMMENT "Processing target ${module_name}_readme")
  71. add_dependencies(${module_name}_readme ${module_name}_doc_text)
  72. add_dependencies(kamailio_docs_readme ${module_name}_readme)
  73. add_custom_target(
  74. ${module_name}_doc_html
  75. DEPENDS ${DOCS_OUTPUT_DIR}/${module_name}.html
  76. COMMENT "Processing target ${module_name}_doc_html"
  77. )
  78. add_custom_target(${module_name}_doc COMMENT "Processing target ${module_name}_doc")
  79. add_dependencies(${module_name}_doc ${module_name}_doc_text ${module_name}_doc_html)
  80. # Man docs only if author of module provided xml for man.
  81. if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${module_name}/${module_name}.xml)
  82. add_custom_target(
  83. ${module_name}_man
  84. DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${module_name}/${module_name}.xml
  85. COMMENT "Processing target ${module_name}_man"
  86. )
  87. add_dependencies(kamailio_docs_man ${module_name}_man)
  88. endif()
  89. # Each version has seperate custon commands for not recompiling all if 1 gets
  90. # changed.
  91. # if(XSLTPROC_EXECUTABLE)
  92. # if(LYNX_EXECUTABLE)
  93. add_custom_command(
  94. OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${module_name}/${module_name}.txt
  95. COMMAND
  96. # TXT version - just plain text
  97. ${XMLCATATLOGX} ${XSLTPROC_EXECUTABLE} ${DOCS_XSLTPROC_FLAGS} --xinclude ${TXT_XSL}
  98. ${module_name}.xml | ${LYNX_EXECUTABLE} ${DOCS_LYNX_FLAGS} -stdin -dump >
  99. ${CMAKE_CURRENT_BINARY_DIR}/${module_name}/${module_name}.txt
  100. DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${module_name}/doc/${module_name}.xml ${TXT_XSL}
  101. # ${SINGLE_HTML_XSL}
  102. WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${module_name}/doc
  103. COMMENT "Generating text documentation with for ${module_name}"
  104. )
  105. # Add custom command to copy the README file after the readme target is
  106. # built. The readme target depends on doc_text so it will regenerate if
  107. # it's input changed.
  108. add_custom_command(
  109. TARGET ${module_name}_readme
  110. POST_BUILD
  111. COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${module_name}/${module_name}.txt
  112. ${CMAKE_CURRENT_SOURCE_DIR}/${module_name}/README
  113. COMMENT "Copying README file to source tree for ${module_name}"
  114. )
  115. add_custom_command(
  116. OUTPUT ${DOCS_OUTPUT_DIR}/${module_name}.html
  117. COMMAND
  118. # HTML version
  119. ${XMLCATATLOGX} ${XSLTPROC_EXECUTABLE} ${DOCS_XSLTPROC_FLAGS} --xinclude --stringparam
  120. base.dir ${DOCS_OUTPUT_DIR} --stringparam root.filename ${module_name} --stringparam
  121. html.stylesheet ${DOCS_HTML_CSS} --stringparam html.ext ".html" ${SINGLE_HTML_XSL}
  122. ${module_name}.xml
  123. DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${module_name}/doc/${module_name}.xml ${SINGLE_HTML_XSL}
  124. WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${module_name}/doc
  125. COMMENT "Generating html documentation for ${module_name}"
  126. )
  127. # endif()
  128. add_custom_command(
  129. # man version
  130. OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${module_name}/${module_name}.7
  131. COMMAND ${DOCBOOK2X_EXECUTABLE} -s ${STYLESHEET_DIR}/serdoc2man.xsl ${module_name}.xml
  132. DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${module_name}/doc/${module_name}.xml
  133. ${STYLESHEET_DIR}/serdoc2man.xsl
  134. WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${module_name}
  135. COMMENT "Processing target ${module_name}_man"
  136. )
  137. install(
  138. FILES ${CMAKE_CURRENT_SOURCE_DIR}/${module_name}/README
  139. RENAME README.${module_name}
  140. DESTINATION ${CMAKE_INSTALL_DOCDIR}/modules
  141. COMPONENT ${group_name}
  142. )
  143. install(
  144. FILES ${CMAKE_CURRENT_SOURCE_DIR}/${module_name}/${module_name}.7
  145. DESTINATION ${CMAKE_INSTALL_DATADIR}/man/man7
  146. COMPONENT ${group_name}
  147. OPTIONAL
  148. )
  149. # endif()
  150. endfunction()