1cmake_minimum_required(VERSION 3.3.0 FATAL_ERROR) 2 3if (NOT BASIC_PROJECT_CONFIG_DONE) 4 message(FATAL_ERROR "Before including the Doxygen module, the BasicConfig module must be included.") 5endif () 6 7option(NO_DOXYGEN "whether creation of Doxygen targets is disabled (enabled by default)" OFF) 8if (NO_DOXYGEN) 9 return() 10endif () 11 12# find doxygen.h template 13include(TemplateFinder) 14find_template_file("doxygen" CPP_UTILITIES DOXYGEN_TEMPLATE_FILE) 15 16# find executables 17find_program(DOXYGEN_BIN doxygen) 18find_program(PERL_BIN perl) 19find_program(DIA_BIN dia) 20if (DIA_BIN) 21 set(HAVE_DIA "YES") 22else () 23 set(HAVE_DIA "NO") 24endif () 25find_program(DOT_BIN dot) 26if (DOT_BIN) 27 set(HAVE_DOT "YES") 28else () 29 set(HAVE_DOT "NO") 30endif () 31if (NOT DOXYGEN_BIN) 32 message(WARNING "Doxygen not found, unable to add target for generating API documentation for ${META_TARGET_NAME}") 33 return() 34endif () 35 36# load cached configuration and other variables 37set(DOXY_LANGUAGE 38 "English" 39 CACHE STRING "specifies the language of the API documentation generated with Doxygen") 40set(DOXY_CUSTOM_CONFIG 41 "" 42 CACHE STRING "specifies extra options for Doxygen") 43set(DOXY_NUMBER "${META_APP_VERSION}") 44set(DOXY_INPUT_FILES 45 ${HEADER_FILES} 46 ${SRC_FILES} 47 ${TEST_HEADER_FILES} 48 ${TEST_SRC_FILES} 49 ${WIDGETS_HEADER_FILES} 50 ${WIDGETS_SRC_FILES} 51 ${QML_HEADER_FILES} 52 ${QML_SRC_FILES} 53 ${EXCLUDED_FILES} 54 ${DOC_FILES}) 55set(DOXY_PATH_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/") 56list(GET DOC_FILES 0 DOXY_MAIN_PAGE_FILE) 57set(DOXY_MAIN_PAGE_FILE "${DOXY_PATH_PREFIX}${DOXY_MAIN_PAGE_FILE}") 58 59# convert DOXY_INPUT_FILES to whitespace-separated list 60include(ListToString) 61list_to_string(" " "\"${DOXY_PATH_PREFIX}" "\"" "${DOXY_INPUT_FILES}" DOXY_INPUT_FILES_WHITESPACE_SEPARATED) 62 63# generate Doxygen configuration 64configure_file("${DOXYGEN_TEMPLATE_FILE}" "${CMAKE_CURRENT_BINARY_DIR}/doxygen.config") 65 66# add target for generating API documentation 67add_custom_target("${META_TARGET_NAME}_apidoc" COMMAND "${DOXYGEN_BIN}" "${CMAKE_CURRENT_BINARY_DIR}/doxygen.config") 68if (NOT TARGET apidoc) 69 add_custom_target(apidoc) 70endif () 71add_dependencies(apidoc "${META_TARGET_NAME}_apidoc") 72 73# add install target for API documentation 74if (NOT META_NO_INSTALL_TARGETS AND ENABLE_INSTALL_TARGETS) 75 install( 76 DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/api-doc" 77 DESTINATION "${META_DATA_DIR}" 78 COMPONENT api-doc 79 OPTIONAL) 80 if (NOT TARGET install-api-doc) 81 add_custom_target(install-api-doc COMMAND "${CMAKE_COMMAND}" -DCMAKE_INSTALL_COMPONENT=api-doc -P 82 "${CMAKE_BINARY_DIR}/cmake_install.cmake") 83 endif () 84endif () 85 86message(STATUS "Generating target for generating API documentation for ${META_TARGET_NAME} with Doxygen") 87