1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
|
# GtkDoc.cmake
#
# Macros to support develper documentation build from sources with gtk-doc.
#
# add_gtkdoc(_module _namespace _deprecated_guards _srcdirsvar _depsvar _ignoreheadersvar)
# Adds rules to build developer documentation using gtk-doc for some part.
# Arguments:
# _module - the module name, like 'camel'; it expects ${_part}-docs.sgml.in in the CMAKE_CURRENT_SOURCE_DIR
# _namespace - namespace for symbols
# _deprecated_guards - define name, which guards deprecated symbols
# _srcdirsvar - variable with dirs where the source files are located
# _depsvar - a variable with dependencies (targets)
# _ignoreheadersvar - a variable with a set of header files to ignore
#
# It also adds custom target gtkdoc-rebuild-${_module}-sgml to rebuild the sgml.in
# file based on the current sources.
include(PrintableOptions)
add_printable_option(ENABLE_GTK_DOC "Use gtk-doc to build documentation" OFF)
if(NOT ENABLE_GTK_DOC)
return()
endif(NOT ENABLE_GTK_DOC)
find_program(GTKDOC_SCAN gtkdoc-scan)
find_program(GTKDOC_MKDB gtkdoc-mkdb)
find_program(GTKDOC_MKHTML gtkdoc-mkhtml)
find_program(GTKDOC_FIXXREF gtkdoc-fixxref)
if(NOT (GTKDOC_SCAN AND GTKDOC_MKDB AND GTKDOC_MKHTML AND GTKDOC_FIXXREF))
message(FATAL_ERROR "Cannot find all gtk-doc binaries, install them or use -DENABLE_GTK_DOC=OFF instead")
return()
endif()
if(NOT TARGET gtkdocs)
add_custom_target(gtkdocs ALL)
endif(NOT TARGET gtkdocs)
if(NOT TARGET gtkdoc-rebuild-sgmls)
add_custom_target(gtkdoc-rebuild-sgmls)
endif(NOT TARGET gtkdoc-rebuild-sgmls)
macro(add_gtkdoc _module _namespace _deprecated_guards _srcdirsvar _depsvar _ignoreheadersvar)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/${_module}-docs.sgml.in
${CMAKE_CURRENT_BINARY_DIR}/${_module}-docs.sgml
@ONLY
)
set(OUTPUT_DOCDIR ${SHARE_INSTALL_PREFIX}/gtk-doc/html/${_module})
set(_filedeps)
set(_srcdirs)
foreach(_srcdir ${${_srcdirsvar}})
set(_srcdirs ${_srcdirs} --source-dir="${_srcdir}")
file(GLOB _files ${_srcdir}/*.h* ${_srcdir}/*.c*)
list(APPEND _filedeps ${_files})
endforeach(_srcdir)
set(_mkhtml_prefix "")
if(APPLE)
set(_mkhtml_prefix "${CMAKE_COMMAND} -E env XML_CATALOG_FILES=\"/usr/local/etc/xml/catalog\"")
endif(APPLE)
add_custom_command(OUTPUT html/index.html
COMMAND ${GTKDOC_SCAN}
--module=${_module}
--deprecated-guards="${_deprecated_guards}"
--ignore-headers="${${_ignoreheadersvar}}"
--rebuild-sections
--rebuild-types
${_srcdirs}
COMMAND ${GTKDOC_MKDB}
--module=${_module}
--name-space=${_namespace}
--main-sgml-file="${CMAKE_CURRENT_BINARY_DIR}/${_module}-docs.sgml"
--sgml-mode
--output-format=xml
${_srcdirs}
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/html"
COMMAND ${CMAKE_COMMAND} -E chdir "${CMAKE_CURRENT_BINARY_DIR}/html" ${_mkhtml_prefix} ${GTKDOC_MKHTML} --path=.. ${_module} ../${_module}-docs.sgml
COMMAND ${GTKDOC_FIXXREF}
--module=${_module}
--module-dir=html
--extra-dir=..
--html-dir="${OUTPUT_DOCDIR}"
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${_module}-docs.sgml"
${_filedeps}
COMMENT "Generating ${_module} documentation"
)
add_custom_target(gtkdoc-${_module}
DEPENDS html/index.html
)
if(${_depsvar})
add_dependencies(gtkdoc-${_module} ${${_depsvar}})
endif(${_depsvar})
add_dependencies(gtkdocs gtkdoc-${_module})
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html/
DESTINATION ${OUTPUT_DOCDIR}
)
# ***************************************
# sgml.in file rebuild, unconditional
# ***************************************
add_custom_target(gtkdoc-rebuild-${_module}-sgml
COMMAND ${CMAKE_COMMAND} -E remove_directory "${CMAKE_CURRENT_BINARY_DIR}/tmp"
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/tmp"
COMMAND ${CMAKE_COMMAND} -E chdir "${CMAKE_CURRENT_BINARY_DIR}/tmp"
${GTKDOC_SCAN}
--module=${_module}
--deprecated-guards="${_deprecated_guards}"
--ignore-headers="${_ignore_headers}"
--rebuild-sections
--rebuild-types
${_srcdirs}
COMMAND ${CMAKE_COMMAND} -E chdir "${CMAKE_CURRENT_BINARY_DIR}/tmp"
${GTKDOC_MKDB}
--module=${_module}
--name-space=${_namespace}
--main-sgml-file="${CMAKE_CURRENT_BINARY_DIR}/tmp/${_module}-docs.sgml"
--sgml-mode
--output-format=xml
${_srcdirs}
COMMAND ${CMAKE_COMMAND} -E rename ${CMAKE_CURRENT_BINARY_DIR}/tmp/${_module}-docs.sgml ${CMAKE_CURRENT_SOURCE_DIR}/${_module}-docs.sgml.in
COMMAND ${CMAKE_COMMAND} -E echo "File '${CMAKE_CURRENT_SOURCE_DIR}/${_module}-docs.sgml.in' overwritten, make sure you replace generated strings with proper content before committing."
)
add_dependencies(gtkdoc-rebuild-sgmls gtkdoc-rebuild-${_module}-sgml)
endmacro(add_gtkdoc)
|