]> gerrit.simantics Code Review - simantics/fmil.git/blob - org.simantics.fmil.core/native/FMILibrary/ThirdParty/CMakeModules/UseDoxygen/UseDoxygen.cmake
30a0318311063f5970dd190833f4754243fd0763
[simantics/fmil.git] / org.simantics.fmil.core / native / FMILibrary / ThirdParty / CMakeModules / UseDoxygen / UseDoxygen.cmake
1 # - Run Doxygen
2 #
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:
7 #  make doc
8 #
9 # USAGE: GLOBAL INSTALL
10 #
11 # Install it with:
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.
16 #
17 # USAGE: INCLUDE IN PROJECT
18 #
19 #  set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
20 #  include(UseDoxygen)
21 # Add the Doxyfile.in and UseDoxygen.cmake files to the projects source directory.
22 #
23 #
24 # CONFIGURATION
25 #
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/"
33 #  
34 #  DOXYFILE_OUTPUT_DIR - Path where the Doxygen output is stored.
35 #       Defaults to "${CMAKE_CURRENT_BINARY_DIR}/doc".
36 #  
37 #  DOXYFILE_LATEX - ON/OFF; Set to "ON" if you want the LaTeX documentation
38 #       to be built.
39 #  DOXYFILE_LATEX_DIR - Directory relative to DOXYFILE_OUTPUT_DIR where
40 #       the Doxygen LaTeX output is stored. Defaults to "latex".
41 #  
42 #  DOXYFILE_HTML_DIR - Directory relative to DOXYFILE_OUTPUT_DIR where
43 #       the Doxygen html output is stored. Defaults to "html".
44 #
45
46 #
47 #  Copyright (c) 2009, 2010, 2011 Tobias Rautenkranz <tobias@rautenkranz.ch>
48 #
49 #  Redistribution and use is allowed according to the terms of the New
50 #  BSD license.
51 #  For details see the accompanying COPYING-CMAKE-SCRIPTS file.
52 #
53
54 macro(usedoxygen_set_default name value type docstring)
55         if(NOT DEFINED "${name}")
56                 set("${name}" "${value}" CACHE "${type}" "${docstring}")
57         endif()
58 endmacro()
59
60 find_package(Doxygen)
61
62 if(DOXYGEN_FOUND)
63         find_file(DOXYFILE_IN "Doxyfile.in"
64                         PATHS "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_ROOT}/Modules/"
65                         NO_DEFAULT_PATH
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")
70 endif()
71
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")
83                 
84         set(DOXYFILE_SOURCE_DIRS "\"${DOXYFILE_SOURCE_DIR}\" ${DOXYFILE_EXTRA_SOURCES}")
85
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")
88
89         mark_as_advanced(DOXYFILE_OUTPUT_DIR DOXYFILE_HTML_DIR DOXYFILE_LATEX_DIR
90                 DOXYFILE_SOURCE_DIR DOXYFILE_EXTRA_SOURCE_DIRS DOXYFILE_IN)
91
92
93         set_property(DIRECTORY 
94                 APPEND PROPERTY
95                 ADDITIONAL_MAKE_CLEAN_FILES
96                 "${DOXYFILE_OUTPUT_DIR}/${DOXYFILE_HTML_DIR}")
97
98         add_custom_target(doxygen
99                 COMMAND "${DOXYGEN_EXECUTABLE}"
100                         "${DOXYFILE}" 
101                 COMMENT "Writing documentation to ${DOXYFILE_OUTPUT_DIR}..."
102                 WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
103
104         set(DOXYFILE_DOT "NO")
105         if(DOXYGEN_DOT_EXECUTABLE)
106                 set(DOXYFILE_DOT "YES")
107         endif()
108
109         ## LaTeX
110         set(DOXYFILE_PDFLATEX "NO")
111
112         set_property(DIRECTORY APPEND PROPERTY
113                 ADDITIONAL_MAKE_CLEAN_FILES
114                 "${DOXYFILE_OUTPUT_DIR}/${DOXYFILE_LATEX_DIR}")
115
116         if(DOXYFILE_LATEX STREQUAL "ON")
117                 set(DOXYFILE_GENERATE_LATEX "YES")
118                 find_package(LATEX)
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")
124                         endif()
125
126                         add_custom_command(TARGET doxygen
127                                 POST_BUILD
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}")
131                 else()
132                         set(DOXYGEN_LATEX "NO")
133                 endif()
134         else()
135                 set(DOXYFILE_GENERATE_LATEX "NO")
136         endif()
137
138         configure_file("${DOXYFILE_IN}" "${DOXYFILE}" @ONLY)
139
140         get_target_property(DOC_TARGET doc TYPE)
141         if(NOT DOC_TARGET)
142                 add_custom_target(doc)
143         endif()
144
145         add_dependencies(doc doxygen)
146 endif()