]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/libevent/cmake/UseDoxygen.cmake
libevent: Import libevent 2.1.12
[FreeBSD/FreeBSD.git] / contrib / libevent / cmake / UseDoxygen.cmake
1 # Use FindDoxygen.cmake to generate documentation.
2
3 option(DOXYGEN_GENERATE_HTML  "Generate HTML"      ON)
4 option(DOXYGEN_GENERATE_MAN   "Generate man pages" OFF)
5 option(DOXYGEN_MAN_LINKS      "Generate man links" ON)
6 option(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.
12 macro(_convert_to_dx_cfg CMK_OPTION)
13   if (${CMK_OPTION})
14     set(${CMK_OPTION} YES)
15   else()
16     set(${CMK_OPTION} NO)
17   endif()
18 endmacro()
19
20 macro(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()
111 endmacro()