|  |  | 
|  | # Create sphinx target | 
|  | if (LLVM_ENABLE_SPHINX) | 
|  | message(STATUS "Sphinx enabled.") | 
|  | find_package(Sphinx REQUIRED) | 
|  | if (LLVM_BUILD_DOCS AND NOT TARGET sphinx) | 
|  | add_custom_target(sphinx ALL) | 
|  | endif() | 
|  | else() | 
|  | message(STATUS "Sphinx disabled.") | 
|  | endif() | 
|  |  | 
|  |  | 
|  | # Handy function for creating the different Sphinx targets. | 
|  | # | 
|  | # ``builder`` should be one of the supported builders used by | 
|  | # the sphinx-build command. | 
|  | # | 
|  | # ``project`` should be the project name | 
|  | function (add_sphinx_target builder project) | 
|  | set(SPHINX_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/${builder}") | 
|  | set(SPHINX_DOC_TREE_DIR "${CMAKE_CURRENT_BINARY_DIR}/_doctrees-${project}-${builder}") | 
|  | set(SPHINX_TARGET_NAME docs-${project}-${builder}) | 
|  |  | 
|  | if (SPHINX_WARNINGS_AS_ERRORS) | 
|  | set(SPHINX_WARNINGS_AS_ERRORS_FLAG "-W") | 
|  | else() | 
|  | set(SPHINX_WARNINGS_AS_ERRORS_FLAG "") | 
|  | endif() | 
|  |  | 
|  | add_custom_target(${SPHINX_TARGET_NAME} | 
|  | COMMAND ${SPHINX_EXECUTABLE} | 
|  | -b ${builder} | 
|  | -d "${SPHINX_DOC_TREE_DIR}" | 
|  | -q # Quiet: no output other than errors and warnings. | 
|  | ${SPHINX_WARNINGS_AS_ERRORS_FLAG} # Treat warnings as errors if requested | 
|  | "${CMAKE_CURRENT_SOURCE_DIR}" # Source | 
|  | "${SPHINX_BUILD_DIR}" # Output | 
|  | COMMENT | 
|  | "Generating ${builder} Sphinx documentation for ${project} into \"${SPHINX_BUILD_DIR}\"") | 
|  |  | 
|  | # When "clean" target is run, remove the Sphinx build directory | 
|  | set_property(DIRECTORY APPEND PROPERTY | 
|  | ADDITIONAL_MAKE_CLEAN_FILES | 
|  | "${SPHINX_BUILD_DIR}") | 
|  |  | 
|  | # We need to remove ${SPHINX_DOC_TREE_DIR} when make clean is run | 
|  | # but we should only add this path once | 
|  | get_property(_CURRENT_MAKE_CLEAN_FILES | 
|  | DIRECTORY PROPERTY ADDITIONAL_MAKE_CLEAN_FILES) | 
|  | list(FIND _CURRENT_MAKE_CLEAN_FILES "${SPHINX_DOC_TREE_DIR}" _INDEX) | 
|  | if (_INDEX EQUAL -1) | 
|  | set_property(DIRECTORY APPEND PROPERTY | 
|  | ADDITIONAL_MAKE_CLEAN_FILES | 
|  | "${SPHINX_DOC_TREE_DIR}") | 
|  | endif() | 
|  |  | 
|  | if (LLVM_BUILD_DOCS) | 
|  | add_dependencies(sphinx ${SPHINX_TARGET_NAME}) | 
|  |  | 
|  | # Handle installation | 
|  | if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY) | 
|  | if (builder STREQUAL man) | 
|  | if (CMAKE_INSTALL_MANDIR) | 
|  | set(INSTALL_MANDIR ${CMAKE_INSTALL_MANDIR}/) | 
|  | else() | 
|  | set(INSTALL_MANDIR share/man/) | 
|  | endif() | 
|  | # FIXME: We might not ship all the tools that these man pages describe | 
|  | install(DIRECTORY "${SPHINX_BUILD_DIR}/" # Slash indicates contents of | 
|  | COMPONENT "${project}-sphinx-man" | 
|  | DESTINATION ${INSTALL_MANDIR}man1) | 
|  |  | 
|  | elseif (builder STREQUAL html) | 
|  | string(TOUPPER "${project}" project_upper) | 
|  | set(${project_upper}_INSTALL_SPHINX_HTML_DIR "share/doc/${project}/html" | 
|  | CACHE STRING "HTML documentation install directory for ${project}") | 
|  |  | 
|  | # '/.' indicates: copy the contents of the directory directly into | 
|  | # the specified destination, without recreating the last component | 
|  | # of ${SPHINX_BUILD_DIR} implicitly. | 
|  | install(DIRECTORY "${SPHINX_BUILD_DIR}/." | 
|  | COMPONENT "${project}-sphinx-html" | 
|  | DESTINATION "${${project_upper}_INSTALL_SPHINX_HTML_DIR}") | 
|  | else() | 
|  | message(WARNING Installation of ${builder} not supported) | 
|  | endif() | 
|  | endif() | 
|  | endif() | 
|  | endfunction() |