modules-docs.cmake 6.6 KB

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