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