1 2if (DOXYGEN_FOUND) 3if (LLVM_ENABLE_DOXYGEN) 4 set(abs_srcdir ${CMAKE_CURRENT_SOURCE_DIR}) 5 set(abs_builddir ${CMAKE_CURRENT_BINARY_DIR}) 6 7 if (HAVE_DOT) 8 set(DOT ${LLVM_PATH_DOT}) 9 endif() 10 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}") 17 else() 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 "") 23 endif() 24 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}") 41 else() 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 "") 48 endif() 49 50 option(LLVM_DOXYGEN_SVG 51 "Use svg instead of png files for doxygen graphs." OFF) 52 if (LLVM_DOXYGEN_SVG) 53 set(DOT_IMAGE_FORMAT "svg") 54 else() 55 set(DOT_IMAGE_FORMAT "png") 56 endif() 57 58 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/doxygen.cfg.in 59 ${CMAKE_CURRENT_BINARY_DIR}/doxygen.cfg @ONLY) 60 61 set(abs_top_srcdir) 62 set(abs_top_builddir) 63 set(DOT) 64 set(enable_searchengine) 65 set(searchengine_url) 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) 75 set(DOT_IMAGE_FORMAT) 76 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 82 if (LLVM_BUILD_DOCS) 83 add_dependencies(doxygen doxygen-clang) 84 endif() 85 86 if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY) 87 install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doxygen/html 88 DESTINATION docs/html) 89 endif() 90endif() 91endif() 92 93function (gen_rst_file_from_td output_file td_option source docs_target) 94 if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${source}") 95 message(FATAL_ERROR "Cannot find source file: ${source} in ${CMAKE_CURRENT_SOURCE_DIR}") 96 endif() 97 get_filename_component(TABLEGEN_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${source}" DIRECTORY) 98 list(APPEND LLVM_TABLEGEN_FLAGS "-I${TABLEGEN_INCLUDE_DIR}") 99 clang_tablegen(${output_file} ${td_option} SOURCE ${source} TARGET "gen-${output_file}") 100 add_dependencies(${docs_target} "gen-${output_file}") 101endfunction() 102 103if (LLVM_ENABLE_SPHINX) 104 include(AddSphinxTarget) 105 if (SPHINX_FOUND) 106 if (${SPHINX_OUTPUT_HTML}) 107 add_sphinx_target(html clang SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}") 108 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}" 118 "${CMAKE_CURRENT_BINARY_DIR}") 119 add_dependencies(docs-clang-html copy-clang-rst-docs) 120 121 add_custom_command(TARGET docs-clang-html POST_BUILD 122 COMMAND "${CMAKE_COMMAND}" -E copy 123 "${CMAKE_CURRENT_SOURCE_DIR}/LibASTMatchersReference.html" 124 "${CMAKE_CURRENT_BINARY_DIR}/html/LibASTMatchersReference.html") 125 126 # Generated files 127 gen_rst_file_from_td(AttributeReference.rst -gen-attr-docs ../include/clang/Basic/Attr.td docs-clang-html) 128 gen_rst_file_from_td(DiagnosticsReference.rst -gen-diag-docs ../include/clang/Basic/Diagnostic.td docs-clang-html) 129 gen_rst_file_from_td(ClangCommandLineReference.rst -gen-opt-docs ../include/clang/Driver/ClangOptionDocs.td docs-clang-html) 130 endif() 131 if (${SPHINX_OUTPUT_MAN}) 132 add_sphinx_target(man clang) 133 endif() 134 endif() 135endif() 136