AddSphinxTarget.cmake 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. # Handy function for creating the different Sphinx targets.
  2. #
  3. # ``builder`` should be one of the supported builders used by
  4. # the sphinx-build command.
  5. #
  6. # ``project`` should be the project name
  7. function (add_sphinx_target builder project)
  8. set(SPHINX_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/${builder}")
  9. set(SPHINX_DOC_TREE_DIR "${CMAKE_CURRENT_BINARY_DIR}/_doctrees")
  10. set(SPHINX_TARGET_NAME docs-${project}-${builder})
  11. if (SPHINX_WARNINGS_AS_ERRORS)
  12. set(SPHINX_WARNINGS_AS_ERRORS_FLAG "-W")
  13. else()
  14. set(SPHINX_WARNINGS_AS_ERRORS_FLAG "")
  15. endif()
  16. add_custom_target(${SPHINX_TARGET_NAME}
  17. COMMAND ${SPHINX_EXECUTABLE}
  18. -b ${builder}
  19. -d "${SPHINX_DOC_TREE_DIR}"
  20. -q # Quiet: no output other than errors and warnings.
  21. ${SPHINX_WARNINGS_AS_ERRORS_FLAG} # Treat warnings as errors if requested
  22. "${CMAKE_CURRENT_SOURCE_DIR}" # Source
  23. "${SPHINX_BUILD_DIR}" # Output
  24. COMMENT
  25. "Generating ${builder} Sphinx documentation for ${project} into \"${SPHINX_BUILD_DIR}\"")
  26. # When "clean" target is run, remove the Sphinx build directory
  27. set_property(DIRECTORY APPEND PROPERTY
  28. ADDITIONAL_MAKE_CLEAN_FILES
  29. "${SPHINX_BUILD_DIR}")
  30. # We need to remove ${SPHINX_DOC_TREE_DIR} when make clean is run
  31. # but we should only add this path once
  32. get_property(_CURRENT_MAKE_CLEAN_FILES
  33. DIRECTORY PROPERTY ADDITIONAL_MAKE_CLEAN_FILES)
  34. list(FIND _CURRENT_MAKE_CLEAN_FILES "${SPHINX_DOC_TREE_DIR}" _INDEX)
  35. if (_INDEX EQUAL -1)
  36. set_property(DIRECTORY APPEND PROPERTY
  37. ADDITIONAL_MAKE_CLEAN_FILES
  38. "${SPHINX_DOC_TREE_DIR}")
  39. endif()
  40. if (LLVM_BUILD_DOCS)
  41. add_dependencies(sphinx ${SPHINX_TARGET_NAME})
  42. # Handle installation
  43. if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
  44. if (builder STREQUAL man)
  45. # FIXME: We might not ship all the tools that these man pages describe
  46. install(DIRECTORY "${SPHINX_BUILD_DIR}/" # Slash indicates contents of
  47. DESTINATION share/man/man1)
  48. elseif (builder STREQUAL html)
  49. install(DIRECTORY "${SPHINX_BUILD_DIR}"
  50. DESTINATION "share/doc/${project}")
  51. else()
  52. message(WARNING Installation of ${builder} not supported)
  53. endif()
  54. endif()
  55. endif()
  56. endfunction()