| # Use FindDoxygen.cmake to generate documentation. |
| |
| option(DOXYGEN_GENERATE_HTML "Generate HTML" ON) |
| option(DOXYGEN_GENERATE_MAN "Generate man pages" OFF) |
| option(DOXYGEN_MAN_LINKS "Generate man links" ON) |
| option(DOXYGEN_GENERATE_LATEX "Generate LaTeX" OFF) |
| |
| # If the case-insensitive value of the cmake option is one of |
| # "off, no, false" or 0, it is equal to false, otherwise true. |
| # And the values of the doxygen config does not exactly match it. |
| # So we need to convert the cmake option to a doxygen config. |
| macro(_convert_to_dx_cfg CMK_OPTION) |
| if (${CMK_OPTION}) |
| set(${CMK_OPTION} YES) |
| else() |
| set(${CMK_OPTION} NO) |
| endif() |
| endmacro() |
| |
| macro(UseDoxygen) |
| if (${CMAKE_VERSION} VERSION_LESS "3.9") |
| # Old versions of cmake have poor support for Doxygen generation. |
| message(FATAL_ERROR "Doxygen generation only enabled for cmake 3.9 and higher") |
| else() |
| find_package(Doxygen) |
| if (DOXYGEN_FOUND) |
| set(DOXYGEN_PROJECT_NAME ${PROJECT_NAME}) |
| set(DOXYGEN_PROJECT_NUMBER ${EVENT_PACKAGE_VERSION}) |
| set(DOXYGEN_PROJECT_BRIEF "Event notification library") |
| set(DOXYGEN_OUTPUT_DIRECTORY doxygen) |
| set(DOXYGEN_STRIP_FROM_PATH include) |
| set(DOXYGEN_JAVADOC_AUTOBRIEF YES) |
| set(DOXYGEN_OPTIMIZE_OUTPUT_FOR_C YES) |
| set(DOXYGEN_SORT_BRIEF_DOCS YES) |
| set(DOXYGEN_RECURSIVE NO) |
| |
| _convert_to_dx_cfg(DOXYGEN_GENERATE_HTML) |
| _convert_to_dx_cfg(DOXYGEN_GENERATE_MAN) |
| _convert_to_dx_cfg(DOXYGEN_MAN_LINKS) |
| _convert_to_dx_cfg(DOXYGEN_GENERATE_LATEX) |
| |
| set(DOXYGEN_LATEX_CMD_NAME latex) |
| set(DOXYGEN_PAPER_TYPE a4wide) |
| set(DOXYGEN_PDF_HYPERLINKS NO) |
| |
| set(DOXYGEN_GENERATE_RTF NO) |
| set(DOXYGEN_GENERATE_XML NO) |
| set(DOXYGEN_GENERATE_CHI NO) |
| |
| set(DOXYGEN_PREDEFINED TAILQ_ENTRY |
| RB_ENTRY |
| EVENT_DEFINED_TQENTRY_ |
| EVENT_IN_DOXYGEN_ |
| ) |
| |
| set(DOX_INPUT include/event2/buffer.h |
| include/event2/buffer_compat.h |
| include/event2/bufferevent.h |
| include/event2/bufferevent_compat.h |
| include/event2/bufferevent_ssl.h |
| include/event2/dns.h |
| include/event2/dns_compat.h |
| include/event2/event.h |
| include/event2/event_compat.h |
| include/event2/http.h |
| include/event2/http_compat.h |
| include/event2/listener.h |
| include/event2/rpc.h |
| include/event2/rpc_compat.h |
| include/event2/tag.h |
| include/event2/tag_compat.h |
| include/event2/thread.h |
| include/event2/util.h |
| ) |
| # Add 'doxygen' target |
| doxygen_add_docs(doxygen |
| ${DOX_INPUT} |
| ALL |
| WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} |
| COMMENT "Generating doxygen documentation for ${PROJECT_NAME}..." |
| ) |
| |
| # Use 'make clean' to remove the generated directory |
| set_property(DIRECTORY |
| PROPERTY ADDITIONAL_MAKE_CLEAN_FILES |
| "${PROJECT_BINARY_DIR}/${DOXYGEN_OUTPUT_DIRECTORY}" |
| ) |
| |
| # Install html into <prefix>/share/doc/<project> |
| if ("${DOXYGEN_GENERATE_HTML}" STREQUAL "YES") |
| install(DIRECTORY |
| ${PROJECT_BINARY_DIR}/${DOXYGEN_OUTPUT_DIRECTORY}/html |
| DESTINATION ${CMAKE_INSTALL_PREFIX}/share/doc/${PROJECT_NAME} |
| COMPONENT doc |
| ) |
| endif() |
| |
| # Install manual into <prefix>/share/man/man3 |
| if ("${DOXYGEN_GENERATE_MAN}" STREQUAL "YES") |
| install(DIRECTORY |
| ${PROJECT_BINARY_DIR}/${DOXYGEN_OUTPUT_DIRECTORY}/man/man3 |
| DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man |
| COMPONENT doc |
| ) |
| endif() |
| |
| else(DOXYGEN_FOUND) |
| message(FATAL_ERROR "Doxygen command not found, set EVENT__DOXYGEN to disable") |
| endif (DOXYGEN_FOUND) |
| endif() |
| endmacro() |