modules-docs.cmake 5.7 KB

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