# This file is part of t8code.
# t8code is a C library to manage a collection (a forest) of multiple
# connected adaptive space-trees of general element types in parallel.
#
# Copyright (C) 2025 the developers
#
# t8code is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# t8code is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with t8code; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
if(T8CODE_BUILD_DOCUMENTATION)
find_package(Doxygen REQUIRED)
if (DOXYGEN_FOUND)
set(DOXYGEN_OUTPUT_DIR ${PROJECT_BINARY_DIR}/doc)
set(DOXYGEN_INDEX_FILE ${DOXYGEN_OUTPUT_DIR}/html/index.html)
set(DOXYFILE_IN ${PROJECT_SOURCE_DIR}/doc/Doxyfile.in)
set(DOXYFILE_OUT ${PROJECT_BINARY_DIR}/doc/Doxyfile)
#The following options are used inside the do
set(top_srcdir ${PROJECT_SOURCE_DIR})
set(top_builddir ${PROJECT_BINARY_DIR})
set(PACKAGE_NAME ${PROJECT_NAME})
set(VERSION ${T8_VERSION})
#Replace variables inside @@ with the current values
configure_file(${DOXYFILE_IN} ${DOXYFILE_OUT} @ONLY)
add_custom_command( OUTPUT ${DOXYGEN_INDEX_FILE}
DEPENDS ${T8_PUBLIC_HEADERS}
COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYFILE_OUT}
MAIN_DEPENDENCY ${DOXYFILE_OUT} ${DOXYFILE_IN}
COMMENT "Generating documentation"
VERBATIM)
add_custom_target(Doxygen ALL DEPENDS ${DOXYGEN_INDEX_FILE})
else (DOXYGEN_FOUND)
message(FATAL_ERROR "Doxygen need to be installed to generate the doxygen documentation")
endif (DOXYGEN_FOUND)
endif(T8CODE_BUILD_DOCUMENTATION)
if (T8CODE_BUILD_DOCUMENTATION_SPHINX)
find_package(Sphinx REQUIRED)
configure_file(${DOXYFILE_IN} ${DOXYFILE_OUT} @ONLY)
if (SPHINX_FOUND)
set(SPHINX_SOURCE ${PROJECT_SOURCE_DIR}/doc/source)
set(SPHINX_BUILD ${PROJECT_BINARY_DIR}/doc/sphinx)
set(SPHINX_INDEX_FILE ${SPHINX_BUILD}/index.html)
set(CONF_FILE_IN ${SPHINX_SOURCE}/conf.in)
set(CONF_FILE_OUT ${SPHINX_SOURCE}/conf.py)
set(top_srcdir ${PROJECT_SOURCE_DIR})
configure_file(${CONF_FILE_IN} ${CONF_FILE_OUT} @ONLY)
# Only regenerate Sphinx when:
# - Doxygen has rerun
# - Our doc files have been updated
# - The Sphinx config has been updated
add_custom_command( OUTPUT ${SPHINX_INDEX_FILE}
COMMAND ${SPHINX_EXECUTABLE} -b html
# Tell Breathe where to find the Doxygen output
-Dbreathe_projects.t8code=${DOXYGEN_OUTPUT_DIR}/xml
${SPHINX_SOURCE} ${SPHINX_BUILD}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
DEPENDS
# Other docs files you want to track should go here (or in some variable)
${SPHINX_SOURCE}/index.rst
${DOXYGEN_INDEX_FILE}
MAIN_DEPENDENCY ${SPHINX_SOURCE}/conf.py
COMMENT "Generating documentation with Sphinx")
# Nice named target so we can run the job easily
add_custom_target(Sphinx ALL DEPENDS ${SPHINX_INDEX_FILE})
else (SPHINX_FOUND)
message(FATAL_ERROR "Sphinx need to be installed to generate the doxygen documentation")
endif (SPHINX_FOUND)
endif(T8CODE_BUILD_DOCUMENTATION_SPHINX)