3 if (LLVM_ENABLE_DOXYGEN)
4 set(abs_srcdir ${CMAKE_CURRENT_SOURCE_DIR})
5 set(abs_builddir ${CMAKE_CURRENT_BINARY_DIR})
8 set(DOT ${LLVM_PATH_DOT})
11 if (LLVM_DOXYGEN_EXTERNAL_SEARCH)
12 set(enable_searchengine "YES")
13 set(searchengine_url "${LLVM_DOXYGEN_SEARCHENGINE_URL}")
14 set(enable_server_based_search "YES")
15 set(enable_external_search "YES")
16 set(extra_search_mappings "${LLVM_DOXYGEN_SEARCH_MAPPINGS}")
18 set(enable_searchengine "NO")
19 set(searchengine_url "")
20 set(enable_server_based_search "NO")
21 set(enable_external_search "NO")
22 set(extra_search_mappings "")
25 # If asked, configure doxygen for the creation of a Qt Compressed Help file.
26 if (LLVM_ENABLE_DOXYGEN_QT_HELP)
27 set(CLANG_DOXYGEN_QCH_FILENAME "org.llvm.clang.qch" CACHE STRING
28 "Filename of the Qt Compressed help file")
29 set(CLANG_DOXYGEN_QHP_NAMESPACE "org.llvm.clang" CACHE STRING
30 "Namespace under which the intermediate Qt Help Project file lives")
31 set(CLANG_DOXYGEN_QHP_CUST_FILTER_NAME "Clang ${CLANG_VERSION}" CACHE STRING
32 "See http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-filters")
33 set(CLANG_DOXYGEN_QHP_CUST_FILTER_ATTRS "Clang,${CLANG_VERSION}" CACHE STRING
34 "See http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes")
35 set(clang_doxygen_generate_qhp "YES")
36 set(clang_doxygen_qch_filename "${CLANG_DOXYGEN_QCH_FILENAME}")
37 set(clang_doxygen_qhp_namespace "${CLANG_DOXYGEN_QHP_NAMESPACE}")
38 set(clang_doxygen_qhelpgenerator_path "${LLVM_DOXYGEN_QHELPGENERATOR_PATH}")
39 set(clang_doxygen_qhp_cust_filter_name "${CLANG_DOXYGEN_QHP_CUST_FILTER_NAME}")
40 set(clang_doxygen_qhp_cust_filter_attrs "${CLANG_DOXYGEN_QHP_CUST_FILTER_ATTRS}")
42 set(clang_doxygen_generate_qhp "NO")
43 set(clang_doxygen_qch_filename "")
44 set(clang_doxygen_qhp_namespace "")
45 set(clang_doxygen_qhelpgenerator_path "")
46 set(clang_doxygen_qhp_cust_filter_name "")
47 set(clang_doxygen_qhp_cust_filter_attrs "")
50 option(LLVM_DOXYGEN_SVG
51 "Use svg instead of png files for doxygen graphs." OFF)
53 set(DOT_IMAGE_FORMAT "svg")
55 set(DOT_IMAGE_FORMAT "png")
58 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/doxygen.cfg.in
59 ${CMAKE_CURRENT_BINARY_DIR}/doxygen.cfg @ONLY)
64 set(enable_searchengine)
66 set(enable_server_based_search)
67 set(enable_external_search)
68 set(extra_search_mappings)
69 set(clang_doxygen_generate_qhp)
70 set(clang_doxygen_qch_filename)
71 set(clang_doxygen_qhp_namespace)
72 set(clang_doxygen_qhelpgenerator_path)
73 set(clang_doxygen_qhp_cust_filter_name)
74 set(clang_doxygen_qhp_cust_filter_attrs)
77 add_custom_target(doxygen-clang
78 COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/doxygen.cfg
79 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
80 COMMENT "Generating clang doxygen documentation." VERBATIM)
81 set_target_properties(doxygen-clang PROPERTIES FOLDER "Clang/Docs")
84 add_dependencies(doxygen doxygen-clang)
87 if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
88 install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doxygen/html
89 DESTINATION docs/html)
94 function (gen_rst_file_from_td output_file td_option source docs_targets)
95 if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${source}")
96 message(FATAL_ERROR "Cannot find source file: ${source} in ${CMAKE_CURRENT_SOURCE_DIR}")
98 get_filename_component(TABLEGEN_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${source}" DIRECTORY)
99 list(APPEND LLVM_TABLEGEN_FLAGS "-I${TABLEGEN_INCLUDE_DIR}")
100 clang_tablegen(${output_file} ${td_option} SOURCE ${source} TARGET "gen-${output_file}")
101 foreach(target ${docs_targets})
102 add_dependencies(${target} gen-${output_file})
106 if (LLVM_ENABLE_SPHINX)
107 include(AddSphinxTarget)
108 if (SPHINX_FOUND AND (${SPHINX_OUTPUT_HTML} OR ${SPHINX_OUTPUT_MAN}))
109 # Copy rst files to build directory before generating the html
110 # documentation. Some of the rst files are generated, so they
111 # only exist in the build directory. Sphinx needs all files in
112 # the same directory in order to generate the html, so we need to
113 # copy all the non-gnerated rst files from the source to the build
114 # directory before we run sphinx.
115 add_custom_target(copy-clang-rst-docs
116 COMMAND "${CMAKE_COMMAND}" -E copy_directory
117 "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}"
119 COMMAND "${CMAKE_COMMAND}" -E copy_if_different
120 "${CMAKE_CURRENT_SOURCE_DIR}/../Maintainers.rst"
121 "${CMAKE_CURRENT_BINARY_DIR}"
126 if (${SPHINX_OUTPUT_HTML})
127 add_sphinx_target(html clang SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}")
129 add_custom_command(TARGET docs-clang-html POST_BUILD
130 COMMAND "${CMAKE_COMMAND}" -E copy
131 "${CMAKE_CURRENT_SOURCE_DIR}/LibASTMatchersReference.html"
132 "${CMAKE_CURRENT_BINARY_DIR}/html/LibASTMatchersReference.html")
134 list(APPEND docs_targets "docs-clang-html")
136 if (${SPHINX_OUTPUT_MAN})
137 add_sphinx_target(man clang SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}")
138 list(APPEND docs_targets "docs-clang-man")
142 gen_rst_file_from_td(AttributeReference.rst -gen-attr-docs ../include/clang/Basic/Attr.td "${docs_targets}")
143 gen_rst_file_from_td(DiagnosticsReference.rst -gen-diag-docs ../include/clang/Basic/Diagnostic.td "${docs_targets}")
144 gen_rst_file_from_td(ClangCommandLineReference.rst -gen-opt-docs ../include/clang/Driver/ClangOptionDocs.td "${docs_targets}")
146 foreach(target ${docs_targets})
147 add_dependencies(${target} copy-clang-rst-docs)