3 # Adds a doxygen target that runs doxygen to generate the html
4 # and optionally the LaTeX API documentation.
5 # The doxygen target is added to the doc target as a dependency.
6 # i.e.: the API documentation is built with:
9 # USAGE: GLOBAL INSTALL
12 # cmake ./ && sudo make install
13 # Add the following to the CMakeLists.txt of your project:
14 # include(UseDoxygen OPTIONAL)
15 # Optionally copy Doxyfile.in in the directory of CMakeLists.txt and edit it.
17 # USAGE: INCLUDE IN PROJECT
19 # set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
21 # Add the Doxyfile.in and UseDoxygen.cmake files to the projects source directory.
26 # To configure Doxygen you can edit Doxyfile.in and set some variables in cmake.
27 # Variables you may define are:
28 # DOXYFILE_SOURCE_DIR - Path where the Doxygen input files are.
29 # Defaults to the current source directory.
30 # DOXYFILE_EXTRA_SOURCES - Additional source diretories/files for Doxygen to scan.
31 # The Paths should be in double quotes and separated by space. e.g.:
32 # "${CMAKE_CURRENT_BINARY_DIR}/foo.c" "${CMAKE_CURRENT_BINARY_DIR}/bar/"
34 # DOXYFILE_OUTPUT_DIR - Path where the Doxygen output is stored.
35 # Defaults to "${CMAKE_CURRENT_BINARY_DIR}/doc".
37 # DOXYFILE_LATEX - ON/OFF; Set to "ON" if you want the LaTeX documentation
39 # DOXYFILE_LATEX_DIR - Directory relative to DOXYFILE_OUTPUT_DIR where
40 # the Doxygen LaTeX output is stored. Defaults to "latex".
42 # DOXYFILE_HTML_DIR - Directory relative to DOXYFILE_OUTPUT_DIR where
43 # the Doxygen html output is stored. Defaults to "html".
47 # Copyright (c) 2009, 2010, 2011 Tobias Rautenkranz <tobias@rautenkranz.ch>
49 # Redistribution and use is allowed according to the terms of the New
51 # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
54 macro(usedoxygen_set_default name value type docstring)
55 if(NOT DEFINED "${name}")
56 set("${name}" "${value}" CACHE "${type}" "${docstring}")
63 find_file(DOXYFILE_IN "Doxyfile.in"
64 PATHS "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_ROOT}/Modules/"
66 DOC "Path to the doxygen configuration template file")
67 set(DOXYFILE "${CMAKE_CURRENT_BINARY_DIR}/Doxyfile")
68 include(FindPackageHandleStandardArgs)
69 find_package_handle_standard_args(DOXYFILE_IN DEFAULT_MSG "DOXYFILE_IN")
72 if(DOXYGEN_FOUND AND DOXYFILE_IN_FOUND)
73 usedoxygen_set_default(DOXYFILE_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/doc"
74 PATH "Doxygen output directory")
75 usedoxygen_set_default(DOXYFILE_HTML_DIR "html"
76 STRING "Doxygen HTML output directory")
77 usedoxygen_set_default(DOXYFILE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}"
78 PATH "Input files source directory")
79 usedoxygen_set_default(DOXYFILE_EXTRA_SOURCE_DIRS ""
80 STRING "Additional source files/directories separated by space")
81 usedoxygen_set_default(DOXYFILE_IMAGE_DIR ${DOXYFILE_SOURCE_DIR}
82 STRING "Doxygen images input directory")
84 set(DOXYFILE_SOURCE_DIRS "\"${DOXYFILE_SOURCE_DIR}\" ${DOXYFILE_EXTRA_SOURCES}")
86 usedoxygen_set_default(DOXYFILE_LATEX YES BOOL "Generate LaTeX API documentation" OFF)
87 usedoxygen_set_default(DOXYFILE_LATEX_DIR "latex" STRING "LaTex output directory")
89 mark_as_advanced(DOXYFILE_OUTPUT_DIR DOXYFILE_HTML_DIR DOXYFILE_LATEX_DIR
90 DOXYFILE_SOURCE_DIR DOXYFILE_EXTRA_SOURCE_DIRS DOXYFILE_IN)
93 set_property(DIRECTORY
95 ADDITIONAL_MAKE_CLEAN_FILES
96 "${DOXYFILE_OUTPUT_DIR}/${DOXYFILE_HTML_DIR}")
98 add_custom_target(doxygen
99 COMMAND "${DOXYGEN_EXECUTABLE}"
101 COMMENT "Writing documentation to ${DOXYFILE_OUTPUT_DIR}..."
102 WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
104 set(DOXYFILE_DOT "NO")
105 if(DOXYGEN_DOT_EXECUTABLE)
106 set(DOXYFILE_DOT "YES")
110 set(DOXYFILE_PDFLATEX "NO")
112 set_property(DIRECTORY APPEND PROPERTY
113 ADDITIONAL_MAKE_CLEAN_FILES
114 "${DOXYFILE_OUTPUT_DIR}/${DOXYFILE_LATEX_DIR}")
116 if(DOXYFILE_LATEX STREQUAL "ON")
117 set(DOXYFILE_GENERATE_LATEX "YES")
119 find_program(DOXYFILE_MAKE make)
120 mark_as_advanced(DOXYFILE_MAKE)
121 if(LATEX_COMPILER AND MAKEINDEX_COMPILER AND DOXYFILE_MAKE)
122 if(PDFLATEX_COMPILER)
123 set(DOXYFILE_PDFLATEX "YES")
126 add_custom_command(TARGET doxygen
128 COMMAND "${DOXYFILE_MAKE}"
129 COMMENT "Running LaTeX for Doxygen documentation in ${DOXYFILE_OUTPUT_DIR}/${DOXYFILE_LATEX_DIR}..."
130 WORKING_DIRECTORY "${DOXYFILE_OUTPUT_DIR}/${DOXYFILE_LATEX_DIR}")
132 set(DOXYGEN_LATEX "NO")
135 set(DOXYFILE_GENERATE_LATEX "NO")
138 configure_file("${DOXYFILE_IN}" "${DOXYFILE}" @ONLY)
140 get_target_property(DOC_TARGET doc TYPE)
142 add_custom_target(doc)
145 add_dependencies(doc doxygen)