123 lines
4.7 KiB
Text
123 lines
4.7 KiB
Text
![]() |
#
|
||
|
# Copyright(c) 2006 to 2018 ADLINK Technology Limited and others
|
||
|
#
|
||
|
# This program and the accompanying materials are made available under the
|
||
|
# terms of the Eclipse Public License v. 2.0 which is available at
|
||
|
# http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
|
||
|
# v. 1.0 which is available at
|
||
|
# http://www.eclipse.org/org/documents/edl-v10.php.
|
||
|
#
|
||
|
# SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
|
||
|
|
||
|
# TODO depending on requirements we can add/remove options as needed,
|
||
|
# these are examples of generators we'll need as a minimum.
|
||
|
# Perhaps we should also consider options for building subset of all docs.
|
||
|
# When a certain doc is related to a target, no option is needed; you can simply check if the target exists
|
||
|
# (i.e. if a target 'ddsc' exists, build ddsc api docs). And possibly make the target definition dependent on an option.
|
||
|
|
||
|
# Generate ddsc API docs in XML format using Doxygen, if the ddsc target is defined.
|
||
|
# The XML will serve as input for sphinx' breathe plugin
|
||
|
if (TARGET ${CMAKE_PROJECT_NAME}::ddsc)
|
||
|
# Process doxygen configuration file, for ddsc
|
||
|
set(doxy_conf_project "${CMAKE_PROJECT_NAME_FULL} C API Documentation")
|
||
|
set(doxy_conf_outputdir "ddsc_api")
|
||
|
set(doxy_conf_input "${PROJECT_SOURCE_DIR}/src/core/ddsc/include/dds/dds.h ${PROJECT_SOURCE_DIR}/src/core/ddsc/include/dds")
|
||
|
configure_file(Doxyfile.in Doxyfile @ONLY)
|
||
|
|
||
|
add_custom_target(ddsc_docs
|
||
|
${DOXYGEN_EXECUTABLE} Doxyfile
|
||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||
|
COMMENT "Running Doxygen for API docs generation"
|
||
|
VERBATIM)
|
||
|
|
||
|
# Remove generated files when cleaning the build tree
|
||
|
set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${doxy_conf_outputdir})
|
||
|
|
||
|
# Add ddsc api docs to sphinx' breathe projects
|
||
|
set(sph_conf_breathe_projs "\"ddsc_api\": \"${doxy_conf_outputdir}/xml\"")
|
||
|
|
||
|
add_custom_command(TARGET ddsc_docs
|
||
|
POST_BUILD
|
||
|
WORKING_DIRECTORY "${doxy_conf_outputdir}"
|
||
|
COMMAND ${CMAKE_COMMAND} -E tar "zcf" "${CMAKE_PROJECT_NAME}_C_HTML.tar.gz" "ddsc")
|
||
|
endif()
|
||
|
|
||
|
# Process sphinx configuration file
|
||
|
set(sph_conf_author "Eclipse Cyclone DDS project")
|
||
|
set(sph_conf_version "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}")
|
||
|
set(sph_conf_release "${PROJECT_VERSION}")
|
||
|
configure_file(conf.py.in conf.py @ONLY)
|
||
|
|
||
|
# Define a list of output formats (-b option for sphinx-build)
|
||
|
set(docs_builders "")
|
||
|
list(APPEND docs_builders html)
|
||
|
list(APPEND docs_builders latex)
|
||
|
|
||
|
# Define custom commands for running sphinx-build for different docs builders
|
||
|
set(docs_outputs "")
|
||
|
foreach(builder ${docs_builders})
|
||
|
set(docs_builder_output "docs_${builder}_output")
|
||
|
# Log stdout (not stderr) to a file instead of messing up build output
|
||
|
set(docs_builder_log "sphinx-build-${builder}.log")
|
||
|
|
||
|
add_custom_command(OUTPUT ${docs_builder_output}
|
||
|
COMMAND ${SPHINX_EXECUTABLE}
|
||
|
-b ${builder}
|
||
|
-d ${CMAKE_CURRENT_BINARY_DIR}/cache
|
||
|
-c ${CMAKE_CURRENT_BINARY_DIR}
|
||
|
${PROJECT_SOURCE_DIR}/docs/manual
|
||
|
${CMAKE_CURRENT_BINARY_DIR}/${builder} > ${docs_builder_log}
|
||
|
COMMENT "Running Sphinx for ${builder} output"
|
||
|
VERBATIM)
|
||
|
|
||
|
# FIXME: This is definitely in the wrong location
|
||
|
if(builder STREQUAL html)
|
||
|
add_custom_command(OUTPUT ${docs_builder_output}
|
||
|
COMMAND ${CMAKE_COMMAND}
|
||
|
-E tar "zcf"
|
||
|
"${CMAKE_PROJECT_NAME}HTML.tar.gz"
|
||
|
"html"
|
||
|
APPEND
|
||
|
VERBATIM)
|
||
|
endif()
|
||
|
|
||
|
# Create a pdf from the latex builder output, by appending a latexmk command
|
||
|
# TODO look into rinohtype as an alternative (don't bother with rst2pdf, it's no good)
|
||
|
if(builder STREQUAL latex)
|
||
|
add_custom_command(OUTPUT ${docs_builder_output}
|
||
|
COMMAND ${LATEXMK_EXECUTABLE}
|
||
|
-interaction=nonstopmode
|
||
|
-silent
|
||
|
-output-directory=${builder}
|
||
|
-pdf -dvi- -ps- -cd- ${builder}/${CMAKE_PROJECT_NAME}.tex
|
||
|
APPEND
|
||
|
VERBATIM)
|
||
|
|
||
|
# Move the pdf, so that install rules don't need to differentiate between built and downloaded docs
|
||
|
add_custom_command(OUTPUT ${docs_builder_output}
|
||
|
COMMAND ${CMAKE_COMMAND}
|
||
|
-E rename
|
||
|
"latex/${CMAKE_PROJECT_NAME}.pdf"
|
||
|
"${CMAKE_PROJECT_NAME}.pdf"
|
||
|
APPEND
|
||
|
VERBATIM)
|
||
|
endif()
|
||
|
|
||
|
# OUTPUT is a fake target / symbolic name, not an actual file
|
||
|
set_property(SOURCE ${docs_builder_output} PROPERTY SYMBOLIC 1)
|
||
|
# Remove generated files when cleaning the build tree
|
||
|
set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES
|
||
|
${builder}
|
||
|
${docs_builder_log})
|
||
|
|
||
|
# Include this builder as a dependency of the general 'docs' target
|
||
|
list(APPEND docs_outputs ${docs_builder_output})
|
||
|
endforeach()
|
||
|
|
||
|
# Remove generated files when cleaning the build tree
|
||
|
set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES
|
||
|
${CMAKE_PROJECT_NAME}HTML.tar.gz
|
||
|
${CMAKE_PROJECT_NAME}.pdf)
|
||
|
|
||
|
add_custom_target(docs ALL DEPENDS ddsc_docs ${docs_outputs})
|