CMakeLists.txt 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #********************************************************************
  2. # _ _ _
  3. # _ __ | |_ _ | | __ _ | |__ ___
  4. # | '__|| __|(_)| | / _` || '_ \ / __|
  5. # | | | |_ _ | || (_| || |_) |\__ \
  6. # |_| \__|(_)|_| \__,_||_.__/ |___/
  7. #
  8. # http://www.rt-labs.com
  9. # Copyright 2023 rt-labs AB, Sweden.
  10. #
  11. # This software is dual-licensed under GPLv3 and a commercial
  12. # license. See the file LICENSE.md distributed with this software for
  13. # full license information.
  14. #********************************************************************
  15. cmake_policy(SET CMP0057 NEW)
  16. find_package(Doxygen)
  17. find_package(Sphinx)
  18. if (DOXYGEN_FOUND)
  19. # Doxygen configuration
  20. set(DOXYGEN_OPTIMIZE_OUTPUT_FOR_C YES)
  21. set(DOXYGEN_TYPEDEF_HIDES_STRUCT YES)
  22. set(DOXYGEN_EXTRACT_ALL YES)
  23. set(DOXYGEN_EXTRACT_STATIC YES)
  24. set(DOXYGEN_STRIP_CODE_COMMENTS NO)
  25. set(DOXYGEN_MACRO_EXPANSION YES)
  26. set(DOXYGEN_EXPAND_ONLY_PREDEF YES)
  27. set(DOXYGEN_PREDEFINED PNET_EXPORT)
  28. set(DOXYGEN_EXPAND_AS_DEFINED PNET_EXPORT)
  29. set(DOXYGEN_COLLABORATION_GRAPH NO)
  30. set(DOXYGEN_INCLUDE_GRAPH NO)
  31. set(DOXYGEN_INCLUDED_BY_GRAPH NO)
  32. set(DOXYGEN_RECURSIVE NO)
  33. set(DOXYGEN_USE_MDFILE_AS_MAINPAGE README.md)
  34. set(DOXYGEN_GENERATE_XML YES)
  35. set(DOXYGEN_WARN_AS_ERROR FAIL_ON_WARNINGS) # Doxygen 1.9+
  36. set(DOXYGEN_ALIASES
  37. [[req="\xrefitem req \"Requirement\" \"Requirements\" "]]
  38. )
  39. set(DOXYGEN_VERBATIM_VARS DOXYGEN_ALIASES)
  40. doxygen_add_docs(doxygen
  41. WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
  42. USE_STAMP_FILE
  43. README.md
  44. include/pnet_api.h
  45. src/pnal.h
  46. src/drivers/lan9662/include/pnet_lan9662_api.h
  47. )
  48. endif()
  49. if (SPHINX_FOUND AND DOXYGEN_FOUND)
  50. set(SPHINX_SOURCE ${CMAKE_CURRENT_SOURCE_DIR})
  51. set(SPHINX_BUILD ${CMAKE_CURRENT_BINARY_DIR}/sphinx)
  52. add_custom_target(copy_markdown_files
  53. COMMAND rm -rf ${SPHINX_SOURCE}/_copied/
  54. COMMAND mkdir -p ${SPHINX_SOURCE}/_copied/
  55. COMMAND cp ${SPHINX_SOURCE}/../*.md ${SPHINX_SOURCE}/_copied/
  56. COMMENT "Copying markdown files to ${SPHINX_SOURCE}/_copied/"
  57. )
  58. add_custom_target(remove_badge_svg_images
  59. COMMAND sed -i '/Build Status/d' ${SPHINX_SOURCE}/_copied/README.md
  60. COMMAND sed -i '/CodeQL/d' ${SPHINX_SOURCE}/_copied/README.md
  61. COMMENT "Removing SVG badge images"
  62. )
  63. add_dependencies(remove_badge_svg_images copy_markdown_files)
  64. # Targets for Sphinx html, spell checking and link checking
  65. macro(add_sphinx_builder)
  66. add_custom_target(${ARGV0}
  67. COMMAND
  68. ${SPHINX_EXECUTABLE} -M ${ARGV1}
  69. ${SPHINX_SOURCE} ${SPHINX_BUILD}
  70. -a -E -W --keep-going
  71. -Dbreathe_projects.pnet=${CMAKE_CURRENT_BINARY_DIR}/xml
  72. COMMENT "Running sphinx-build ${ARGV1}. Current CMake binary dir: ${CMAKE_CURRENT_BINARY_DIR}"
  73. )
  74. add_dependencies(${ARGV0} doxygen)
  75. add_dependencies(${ARGV0} copy_markdown_files)
  76. endmacro()
  77. add_sphinx_builder(sphinx-html html)
  78. add_sphinx_builder(sphinx-spelling spelling)
  79. add_sphinx_builder(sphinx-linkcheck linkcheck)
  80. add_sphinx_builder(sphinx-pdf latexpdf)
  81. add_dependencies(sphinx-html remove_badge_svg_images)
  82. add_dependencies(sphinx-pdf remove_badge_svg_images)
  83. # Zip the documentation
  84. message("p-net revision: ${PROFINET_GIT_REVISION}")
  85. add_custom_command(
  86. TARGET sphinx-html POST_BUILD
  87. COMMAND zip -FS -r pnet_docs_${PROFINET_GIT_REVISION}.zip sphinx/html/ > /dev/null
  88. COMMAND echo "The Sphinx HTML and ZIP files are located in ${CMAKE_CURRENT_BINARY_DIR}"
  89. BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/pnet_docs_${PROFINET_GIT_REVISION}.zip
  90. WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
  91. COMMENT "Zipping HTML documentation")
  92. endif()