File: Doxygen.cmake

package info (click to toggle)
martchus-cpp-utilities 5.28.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,352 kB
  • sloc: cpp: 12,471; awk: 18; ansic: 12; makefile: 10
file content (86 lines) | stat: -rw-r--r-- 2,817 bytes parent folder | download
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
cmake_minimum_required(VERSION 3.17.0 FATAL_ERROR)

if (NOT BASIC_PROJECT_CONFIG_DONE)
    message(FATAL_ERROR "Before including the Doxygen module, the BasicConfig module must be included.")
endif ()

option(NO_DOXYGEN "whether creation of Doxygen targets is disabled (enabled by default)" OFF)
if (NO_DOXYGEN)
    return()
endif ()

# find doxygen.h template
include(TemplateFinder)
find_template_file("doxygen" CPP_UTILITIES DOXYGEN_TEMPLATE_FILE)

# find executables
find_program(DOXYGEN_BIN doxygen)
find_program(PERL_BIN perl)
find_program(DIA_BIN dia)
if (DIA_BIN)
    set(HAVE_DIA "YES")
else ()
    set(HAVE_DIA "NO")
endif ()
find_program(DOT_BIN dot)
if (DOT_BIN)
    set(HAVE_DOT "YES")
else ()
    set(HAVE_DOT "NO")
endif ()
if (NOT DOXYGEN_BIN)
    message(WARNING "Doxygen not found, unable to add target for generating API documentation for ${META_TARGET_NAME}")
    return()
endif ()

# load cached configuration and other variables
set(DOXY_LANGUAGE
    "English"
    CACHE STRING "specifies the language of the API documentation generated with Doxygen")
set(DOXY_CUSTOM_CONFIG
    ""
    CACHE STRING "specifies extra options for Doxygen")
set(DOXY_NUMBER "${META_APP_VERSION}")
set(DOXY_INPUT_FILES
    ${HEADER_FILES}
    ${SRC_FILES}
    ${TEST_HEADER_FILES}
    ${TEST_SRC_FILES}
    ${WIDGETS_HEADER_FILES}
    ${WIDGETS_SRC_FILES}
    ${QML_HEADER_FILES}
    ${QML_SRC_FILES}
    ${EXCLUDED_FILES}
    ${DOC_FILES})
set(DOXY_PATH_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/")
list(GET DOC_FILES 0 DOXY_MAIN_PAGE_FILE)
set(DOXY_MAIN_PAGE_FILE "${DOXY_PATH_PREFIX}${DOXY_MAIN_PAGE_FILE}")

# convert DOXY_INPUT_FILES to whitespace-separated list
include(ListToString)
list_to_string(" " "\"${DOXY_PATH_PREFIX}" "\"" "${DOXY_INPUT_FILES}" DOXY_INPUT_FILES_WHITESPACE_SEPARATED)

# generate Doxygen configuration
configure_file("${DOXYGEN_TEMPLATE_FILE}" "${CMAKE_CURRENT_BINARY_DIR}/doxygen.config")

# add target for generating API documentation
add_custom_target("${META_TARGET_NAME}_apidoc" COMMAND "${DOXYGEN_BIN}" "${CMAKE_CURRENT_BINARY_DIR}/doxygen.config")
if (NOT TARGET apidoc)
    add_custom_target(apidoc)
endif ()
add_dependencies(apidoc "${META_TARGET_NAME}_apidoc")

# add install target for API documentation
if (NOT META_NO_INSTALL_TARGETS AND ENABLE_INSTALL_TARGETS)
    install(
        DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/api-doc"
        DESTINATION "${META_DATA_DIR}"
        COMPONENT api-doc
        OPTIONAL)
    if (NOT TARGET install-api-doc)
        add_custom_target(install-api-doc COMMAND "${CMAKE_COMMAND}" -DCMAKE_INSTALL_COMPONENT=api-doc -P
                                                  "${CMAKE_BINARY_DIR}/cmake_install.cmake")
    endif ()
endif ()

message(STATUS "Generating target for generating API documentation for ${META_TARGET_NAME} with Doxygen")