1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
# SPDX-FileCopyrightText: 2006-2025 Knut Reinert & Freie Universität Berlin
# SPDX-FileCopyrightText: 2016-2025 Knut Reinert & MPI für molekulare Genetik
# SPDX-License-Identifier: BSD-3-Clause
### Find doxygen and dependency to DOT tool
message (STATUS "Searching for doxygen.")
find_package (Doxygen REQUIRED)
if (NOT ${DOXYGEN_FOUND})
message (FATAL_ERROR "Could not find doxygen. Not building documentation.")
endif ()
if (NOT ${DOXYGEN_HAVE_DOT})
message (STATUS "Could not find dot tool. Disabling dot support.")
set (SEQAN3_DOXYGEN_HAVE_DOT "NO")
else ()
message (STATUS "Found dot tool. Enabling dot support.")
set (SEQAN3_DOXYGEN_HAVE_DOT "YES")
endif ()
### Number of threads to use for dot. Doxygen's default is 0 (all threads).
set (SEQAN3_DOXYGEN_DOT_NUM_THREADS "0")
### Configure doc/developer targets.
set (SEQAN3_DOXYGEN_SOURCE_DIR "${SEQAN3_CLONE_DIR}")
set (SEQAN3_DOXYFILE_IN ${SEQAN3_DOXYGEN_INPUT_DIR}/seqan3_doxygen_cfg.in)
set (SEQAN3_FOOTER_HTML_IN ${SEQAN3_DOXYGEN_INPUT_DIR}/seqan3_footer.html.in)
# DoxygenLayout.xml.in is created by seqan3-doxygen-layout.cmake
set (SEQAN3_LAYOUT_IN ${CMAKE_CURRENT_BINARY_DIR}/DoxygenLayout.xml.in)
option (SEQAN3_USER_DOC "Create build target and test for user documentation." ON)
option (SEQAN3_DEV_DOC "Create build target and test for developer documentation." ON)
### Download and extract cppreference-doxygen-web.tag.xml for std:: documentation links
# SEQAN3_DOXYGEN_STD_TAGFILE can be used to point to an existing tag file (cppreference-doxygen-web.tag.xml).
# If SEQAN3_DOXYGEN_STD_TAGFILE is set by the user and the file exists, it will be copied.
# If SEQAN3_DOXYGEN_STD_TAGFILE is not set by the user, or it is set by the user, but the file does not exist,
# the tag file will be downloaded.
set (SEQAN3_DEFAULT_DOXYGEN_STD_TAGFILE "${PROJECT_BINARY_DIR}/cppreference-doxygen-web.tag.xml")
set (SEQAN3_DOXYGEN_STD_TAGFILE
"${SEQAN3_DEFAULT_DOXYGEN_STD_TAGFILE}"
CACHE STRING "Path to cppreference-doxygen-web.tag.xml")
if (NOT EXISTS "${SEQAN3_DOXYGEN_STD_TAGFILE}" OR SEQAN3_DOXYGEN_STD_TAGFILE STREQUAL
"${SEQAN3_DEFAULT_DOXYGEN_STD_TAGFILE}")
message (STATUS "Tag file will be fetched.")
# Reset path in case it was set from the outside, but does not exist.
set (SEQAN3_DOXYGEN_STD_TAGFILE "${SEQAN3_DEFAULT_DOXYGEN_STD_TAGFILE}")
include (ExternalProject)
# When updating, check whether warnings in SEQAN3_TEST_DOXYGEN_FAIL_ON_WARNINGS are gone when removing sed filter.
ExternalProject_Add (
download-cppreference-doxygen-web-tag
URL "https://github.com/PeterFeicht/cppreference-doc/releases/download/v20250209/html-book-20250209.tar.xz"
URL_HASH SHA256=ac50671a1f52d7f0ab0911d14450eb35e8c2f812edd0e426b2cd1e3d9db91d6f
TLS_VERIFY ON
DOWNLOAD_DIR "${PROJECT_BINARY_DIR}"
DOWNLOAD_NAME "html-book.tar.xz"
DOWNLOAD_NO_EXTRACT YES
DOWNLOAD_NO_PROGRESS YES
BINARY_DIR "${PROJECT_BINARY_DIR}"
BUILD_BYPRODUCTS "${SEQAN3_DEFAULT_DOXYGEN_STD_TAGFILE}"
CONFIGURE_COMMAND /bin/sh -c "xzcat html-book.tar.xz | tar -xf - cppreference-doxygen-web.tag.xml"
BUILD_COMMAND rm "html-book.tar.xz"
INSTALL_COMMAND "")
else ()
message (STATUS "Copying existing tag file: ${SEQAN3_DOXYGEN_STD_TAGFILE}")
# Copy tag file such that it is present in the built documentation. This is useful if the documentation is
# subsequently deployed to a server.
add_custom_target (download-cppreference-doxygen-web-tag)
add_custom_command (TARGET download-cppreference-doxygen-web-tag
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy "${SEQAN3_DOXYGEN_STD_TAGFILE}"
"${SEQAN3_DEFAULT_DOXYGEN_STD_TAGFILE}"
BYPRODUCTS "${SEQAN3_DEFAULT_DOXYGEN_STD_TAGFILE}")
set (SEQAN3_DOXYGEN_STD_TAGFILE "${SEQAN3_DEFAULT_DOXYGEN_STD_TAGFILE}")
endif ()
### TEST HELPER
add_test (NAME cppreference-doxygen-web-tag COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target
download-cppreference-doxygen-web-tag)
# doxygen does not show any warnings (doxygen prints warnings / errors to cerr)
# Second line filters warnings from tag file.
# Note: Because the commands are line-wise, CMake will insert a semicolon between them.
# If this is changed to be a single line, the semicolon must be manually inserted.
set (SEQAN3_TEST_DOXYGEN_FAIL_ON_WARNINGS
"${DOXYGEN_EXECUTABLE} -q > doxygen.cout 2> doxygen.cerr"
"sed -i '/documented symbol '\\''T std::experimental::erase'\\'' was not declared or defined\\./d; /documented symbol '\\''T std::experimental::erase_if'\\'' was not declared or defined\\./d' \"doxygen.cerr\""
"cat \"doxygen.cerr\""
"test ! -s \"doxygen.cerr\""
CACHE INTERNAL "The doxygen test command")
### install helper
# make sure that prefix path is /usr/local/share/doc/seqan3/
if (NOT DEFINED CMAKE_SIZEOF_VOID_P)
# we need this to suppress GNUInstallDirs AUTHOR_WARNING:
# CMake Warning (dev) at /usr/share/cmake-3.19/Modules/GNUInstallDirs.cmake:223 (message):
# Unable to determine default CMAKE_INSTALL_LIBDIR directory because no
# target architecture is known. Please enable at least one language before
# including GNUInstallDirs.
set (CMAKE_SIZEOF_VOID_P 8)
endif ()
include (GNUInstallDirs) # this is needed to prefix the install paths
|