Files
swift-mirror/docs/CMakeLists.txt

194 lines
5.4 KiB
CMake

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
-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")
# Selectively install docs intended for general consumption.
install(
FILES
${CMAKE_BINARY_DIR}/docs/html/LangRef.html
DESTINATION share/swift/docs/html)
install(
DIRECTORY
${CMAKE_BINARY_DIR}/docs/html/_static
${CMAKE_BINARY_DIR}/docs/html/whitepaper
DESTINATION share/swift/docs/html)
else(SPHINX_EXECUTABLE)
message(WARNING "Unable to find sphinx-build program. Not building docs")
endif(SPHINX_EXECUTABLE)
## 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()
if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doxygen/html
DESTINATION docs/html)
endif()
endif()
endif()