mydumper/docs/CMakeLists.txt
2017-03-24 11:42:13 +01:00

157 lines
4.3 KiB
CMake

# Generate documentation in HTML and PDF format using Sphinx.
set(GENERATE_DOC TRUE)
# We use the Sphinx documentation generator to render HTML and manual
# pages from the user and reference documentation in ReST format.
find_package(Sphinx QUIET)
if(NOT SPHINX_FOUND)
message(WARNING "Unable to find Sphinx documentation generator")
set(GENERATE_DOC FALSE)
endif(NOT SPHINX_FOUND)
if(SPHINX_MAJOR_VERSION LESS 1)
message(WARNING "Sphinx is older than v1.0, not building docs")
set(GENERATE_DOC FALSE)
endif(SPHINX_MAJOR_VERSION LESS 1)
if(GENERATE_DOC)
# documentation tools
set(SOURCE_BUILD_DIR "${CMAKE_CURRENT_SOURCE_DIR}/_build")
# configured documentation tools and intermediate build results
set(BINARY_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/_build")
# static ReST documentation sources
set(SOURCES_DIR "${CMAKE_CURRENT_BINARY_DIR}/_sources")
# generated ReST documentation sources
set(REF_SOURCES_DIR "${SOURCES_DIR}/reference")
# master document with modules index
set(REF_MASTER_DOC "modules")
# substitute variables in configuration and scripts
foreach(file
conf.py
sources.cmake
)
configure_file(
"${SOURCE_BUILD_DIR}/${file}.in"
"${BINARY_BUILD_DIR}/${file}"
@ONLY
)
endforeach(file)
set(CLEAN_FILES
"${BINARY_BUILD_DIR}/html"
)
add_custom_target(ALL
DEPENDS "${REF_SOURCES_DIR}/${REF_MASTER_DOC}.rst"
)
# Sphinx requires all sources in the same directory tree. As we wish
# to include generated reference documention from the build tree, we
# copy static ReST documents to the build tree before calling Sphinx.
add_custom_target(doc_sources ALL
"${CMAKE_COMMAND}" -P "${BINARY_BUILD_DIR}/sources.cmake"
)
list(APPEND CLEAN_FILES
"${SOURCES_DIR}"
)
# note the trailing slash to exclude directory name
install(DIRECTORY "${SOURCES_DIR}/"
DESTINATION "share/doc/mydumper"
)
# Sphinx cache with pickled ReST documents
set(SPHINX_CACHE_DIR "${CMAKE_CURRENT_BINARY_DIR}/_doctrees")
# HTML output directory
set(SPHINX_HTML_DIR "${CMAKE_CURRENT_BINARY_DIR}/html")
# This target builds HTML documentation using Sphinx.
add_custom_target(doc_html ALL
${SPHINX_EXECUTABLE}
-q -b html
-c "${BINARY_BUILD_DIR}"
-d "${SPHINX_CACHE_DIR}"
"${SOURCES_DIR}"
"${SPHINX_HTML_DIR}"
COMMENT "Building HTML documentation with Sphinx"
)
list(APPEND CLEAN_FILES
"${SPHINX_CACHE_DIR}"
"${SPHINX_HTML_DIR}"
)
add_dependencies(doc_html
doc_sources
)
install(DIRECTORY "${SPHINX_HTML_DIR}"
DESTINATION "share/doc/mydumper"
)
# HTML output directory
set(SPHINX_MAN_DIR "${CMAKE_CURRENT_BINARY_DIR}/man")
# This target builds a manual page using Sphinx.
add_custom_target(doc_man ALL
${SPHINX_EXECUTABLE}
-q -b man
-c "${BINARY_BUILD_DIR}"
-d "${SPHINX_CACHE_DIR}"
"${SOURCES_DIR}"
"${SPHINX_MAN_DIR}"
COMMENT "Building manual page with Sphinx"
)
list(APPEND CLEAN_FILES
"${SPHINX_MAN_DIR}"
)
add_dependencies(doc_man
doc_sources
)
# serialize Sphinx targets to avoid cache conflicts in parallel builds
add_dependencies(doc_man
doc_html
)
install(FILES "${SPHINX_MAN_DIR}/mydumper.1" "${SPHINX_MAN_DIR}/myloader.1"
DESTINATION "share/man/man1"
)
# This target builds PDF documentation using Sphinx and LaTeX.
if(PDFLATEX_COMPILER)
# PDF output directory
set(SPHINX_PDF_DIR "${CMAKE_CURRENT_BINARY_DIR}/pdf")
add_custom_target(doc_pdf ALL
${SPHINX_EXECUTABLE}
-q -b latex
-c "${BINARY_BUILD_DIR}"
-d "${SPHINX_CACHE_DIR}"
"${SOURCES_DIR}"
"${SPHINX_PDF_DIR}"
COMMENT "Building PDF documentation with Sphinx"
)
add_custom_command(TARGET doc_pdf POST_BUILD
COMMAND ${CMAKE_MAKE_PROGRAM} LATEXOPTS=-interaction=batchmode
WORKING_DIRECTORY "${SPHINX_PDF_DIR}"
)
list(APPEND CLEAN_FILES
"${SPHINX_PDF_DIR}"
)
add_dependencies(doc_pdf
doc_sources
)
# serialize Sphinx targets to avoid cache conflicts in parallel builds
add_dependencies(doc_pdf
doc_man
)
install(FILES "${SPHINX_PDF_DIR}/mydumper.pdf"
DESTINATION "share/doc/mydumper"
)
endif(PDFLATEX_COMPILER)
# Add output directories to clean target.
set_directory_properties(PROPERTIES
ADDITIONAL_MAKE_CLEAN_FILES "${CLEAN_FILES}"
)
endif(GENERATE_DOC)