add_subdirectory(tools) find_program(SPHINX_EXECUTABLE NAMES sphinx-build HINTS $ENV{SPHINX_DIR} PATH_SUFFIXES bin DOC "Sphinx documentation generator") SET(SWIFT_SPHINX_PAPER_SIZE "letter" CACHE STRING "Paper size for generated documentation") SET(SPHINX_ARGS -W -D latex_paper_size=${SWIFT_SPHINX_PAPER_SIZE} -d ${CMAKE_BINARY_DIR}/doctrees) if(SPHINX_EXECUTABLE) add_custom_target(docs_html ALL ${SPHINX_EXECUTABLE} ${SPHINX_ARGS} -b html . ${CMAKE_BINARY_DIR}/docs/html WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMENT "Building HTML documentation") else() message(WARNING "Unable to find sphinx-build program. Not building docs") endif() ## Example testing find_program(LITRE_EXECUTABLE NAMES litre DOC "LitRe literate programming tool for docutils") find_program(SPHINX_EXECUTABLE NAMES sphinx-build HINTS $ENV{SPHINX_DIR} PATH_SUFFIXES bin DOC "Sphinx documentation generator") if(LITRE_EXECUTABLE) # Find all the .rst files file(GLOB_RECURSE rst_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.rst) set(subdir_CMakeLists) foreach(rst ${rst_files}) # Prepare a testing directory containing a CMakeLists.txt # and example files extracted from the .rst set(test_dir "litre-tests/${rst}.litre-tests") add_custom_command( OUTPUT ${test_dir}/CMakeLists.txt COMMAND ${LITRE_EXECUTABLE} --default_compiler=${CMAKE_BINARY_DIR}/bin/swift "--dump_dir=${test_dir}" --traceback --report=severe # suppress most .rst errors. We have lots of them. ${CMAKE_CURRENT_SOURCE_DIR}/${rst} DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${rst} COMMENT "Generating/Updating LitRe tests for ${rst}" VERBATIM ) list(APPEND subdir_CMakeLists ${test_dir}/CMakeLists.txt) endforeach() # Create a top-level CMakeLists.txt in a temporary file add_custom_command( OUTPUT litre-top-CMakeLists.cmake COMMAND ${CMAKE_COMMAND} -DOUTPUT=litre-top-CMakeLists.cmake -DSOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/GenerateTopLevelLitreCMakeLists.cmake ${rst_files} DEPENDS ${rst_files} COMMENT "Generating top-level LitRe CMakeLists.txt content" VERBATIM ) # Only update the real top-level CMakeLists.txt if something changed add_custom_command( OUTPUT "litre-tests/CMakeLists.txt" COMMAND "${CMAKE_COMMAND}" "-E" "copy_if_different" "litre-top-CMakeLists.cmake" "litre-tests/CMakeLists.txt" DEPENDS "litre-top-CMakeLists.cmake" COMMENT "Updating top-level LitRe CMakeLists.txt" VERBATIM) # Create a build directory add_custom_command( OUTPUT "litre-tests/build" COMMAND "${CMAKE_COMMAND}" "-E" "make_directory" "litre-tests/build") # Run CMake itself to configure/build the tests add_custom_command( OUTPUT litre-tests/results COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" "${CMAKE_CURRENT_BINARY_DIR}/litre-tests" COMMAND ${CMAKE_COMMAND} --build . COMMAND ${CMAKE_COMMAND} -E touch "${CMAKE_CURRENT_BINARY_DIR}/litre-tests/results" WORKING_DIRECTORY litre-tests/build DEPENDS ${CMAKE_BINARY_DIR}/bin/swift litre-tests/CMakeLists.txt litre-tests/build ${subdir_CMakeLists} COMMENT "Running LitRe tests" VERBATIM ) # Add a target so these tests show up in the Xcode project. add_custom_target( LiterateTests SOURCES ${rst_files} DEPENDS litre-tests/results ) set_target_properties(LiterateTests PROPERTIES FOLDER "Tests") else() message(WARNING "LitRe not found; code examples won't be tested.") endif() if (LLVM_ENABLE_DOXYGEN) if (DOXYGEN_FOUND) set(abs_srcdir ${CMAKE_CURRENT_SOURCE_DIR}) set(abs_builddir ${CMAKE_CURRENT_BINARY_DIR}) if (HAVE_DOT) set(DOT ${LLVM_PATH_DOT}) endif() if (LLVM_DOXYGEN_EXTERNAL_SEARCH) set(enable_searchengine "YES") set(searchengine_url "${LLVM_DOXYGEN_SEARCHENGINE_URL}") set(enable_server_based_search "YES") set(enable_external_search "YES") set(extra_search_mappings "${LLVM_DOXYGEN_SEARCH_MAPPINGS}") else() set(enable_searchengine "NO") set(searchengine_url "") set(enable_server_based_search "NO") set(enable_external_search "NO") set(extra_search_mappings "") endif() configure_file(${CMAKE_CURRENT_SOURCE_DIR}/doxygen.cfg.in ${CMAKE_CURRENT_BINARY_DIR}/doxygen.cfg @ONLY) set(abs_top_srcdir) set(abs_top_builddir) set(DOT) set(enable_searchengine) set(searchengine_url) set(enable_server_based_search) set(enable_external_search) set(extra_search_mappings) add_custom_target(doxygen-swift ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/doxygen.cfg WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Generating swift doxygen documentation." VERBATIM) if(LLVM_BUILD_DOCS) add_dependencies(doxygen doxygen-swift) endif() swift_install_in_component(dev DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/doxygen/html" DESTINATION "docs/html") endif() endif()