1# Use FindDoxygen.cmake to generate documentation. 2 3option(DOXYGEN_GENERATE_HTML "Generate HTML" ON) 4option(DOXYGEN_GENERATE_MAN "Generate man pages" OFF) 5option(DOXYGEN_MAN_LINKS "Generate man links" ON) 6option(DOXYGEN_GENERATE_LATEX "Generate LaTeX" OFF) 7 8# If the case-insensitive value of the cmake option is one of 9# "off, no, false" or 0, it is equal to false, otherwise true. 10# And the values of the doxygen config does not exactly match it. 11# So we need to convert the cmake option to a doxygen config. 12macro(_convert_to_dx_cfg CMK_OPTION) 13 if (${CMK_OPTION}) 14 set(${CMK_OPTION} YES) 15 else() 16 set(${CMK_OPTION} NO) 17 endif() 18endmacro() 19 20macro(UseDoxygen) 21 if (${CMAKE_VERSION} VERSION_LESS "3.9") 22 # Old versions of cmake have poor support for Doxygen generation. 23 message(FATAL_ERROR "Doxygen generation only enabled for cmake 3.9 and higher") 24 else() 25 find_package(Doxygen) 26 if (DOXYGEN_FOUND) 27 set(DOXYGEN_PROJECT_NAME ${PROJECT_NAME}) 28 set(DOXYGEN_PROJECT_NUMBER ${EVENT_PACKAGE_VERSION}) 29 set(DOXYGEN_PROJECT_BRIEF "Event notification library") 30 set(DOXYGEN_OUTPUT_DIRECTORY doxygen) 31 set(DOXYGEN_STRIP_FROM_PATH include) 32 set(DOXYGEN_JAVADOC_AUTOBRIEF YES) 33 set(DOXYGEN_OPTIMIZE_OUTPUT_FOR_C YES) 34 set(DOXYGEN_SORT_BRIEF_DOCS YES) 35 set(DOXYGEN_RECURSIVE NO) 36 37 _convert_to_dx_cfg(DOXYGEN_GENERATE_HTML) 38 _convert_to_dx_cfg(DOXYGEN_GENERATE_MAN) 39 _convert_to_dx_cfg(DOXYGEN_MAN_LINKS) 40 _convert_to_dx_cfg(DOXYGEN_GENERATE_LATEX) 41 42 set(DOXYGEN_LATEX_CMD_NAME latex) 43 set(DOXYGEN_PAPER_TYPE a4wide) 44 set(DOXYGEN_PDF_HYPERLINKS NO) 45 46 set(DOXYGEN_GENERATE_RTF NO) 47 set(DOXYGEN_GENERATE_XML NO) 48 set(DOXYGEN_GENERATE_CHI NO) 49 50 set(DOXYGEN_PREDEFINED TAILQ_ENTRY 51 RB_ENTRY 52 EVENT_DEFINED_TQENTRY_ 53 EVENT_IN_DOXYGEN_ 54 ) 55 56 set(DOX_INPUT include/event2/buffer.h 57 include/event2/buffer_compat.h 58 include/event2/bufferevent.h 59 include/event2/bufferevent_compat.h 60 include/event2/bufferevent_ssl.h 61 include/event2/dns.h 62 include/event2/dns_compat.h 63 include/event2/event.h 64 include/event2/event_compat.h 65 include/event2/http.h 66 include/event2/http_compat.h 67 include/event2/listener.h 68 include/event2/rpc.h 69 include/event2/rpc_compat.h 70 include/event2/tag.h 71 include/event2/tag_compat.h 72 include/event2/thread.h 73 include/event2/util.h 74 ) 75 # Add 'doxygen' target 76 doxygen_add_docs(doxygen 77 ${DOX_INPUT} 78 ALL 79 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} 80 COMMENT "Generating doxygen documentation for ${PROJECT_NAME}..." 81 ) 82 83 # Use 'make clean' to remove the generated directory 84 set_property(DIRECTORY 85 PROPERTY ADDITIONAL_MAKE_CLEAN_FILES 86 "${PROJECT_BINARY_DIR}/${DOXYGEN_OUTPUT_DIRECTORY}" 87 ) 88 89 # Install html into <prefix>/share/doc/<project> 90 if ("${DOXYGEN_GENERATE_HTML}" STREQUAL "YES") 91 install(DIRECTORY 92 ${PROJECT_BINARY_DIR}/${DOXYGEN_OUTPUT_DIRECTORY}/html 93 DESTINATION ${CMAKE_INSTALL_PREFIX}/share/doc/${PROJECT_NAME} 94 COMPONENT doc 95 ) 96 endif() 97 98 # Install manual into <prefix>/share/man/man3 99 if ("${DOXYGEN_GENERATE_MAN}" STREQUAL "YES") 100 install(DIRECTORY 101 ${PROJECT_BINARY_DIR}/${DOXYGEN_OUTPUT_DIRECTORY}/man/man3 102 DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man 103 COMPONENT doc 104 ) 105 endif() 106 107 else(DOXYGEN_FOUND) 108 message(FATAL_ERROR "Doxygen command not found, set EVENT__DOXYGEN to disable") 109 endif (DOXYGEN_FOUND) 110 endif() 111endmacro() 112