summaryrefslogtreecommitdiff
path: root/cmake/modules/GIDocgen.cmake
blob: 7a661404c8504c6cf986df6587fc9ac7fadcc15c (plain)
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
# GIDocgen.cmake
#
# Adds an option -DENABLE_GI_DOCGEN=OFF and helper commands
#
# Functions:
#
# gi_docgen(_output_filename_noext _define_name _enums_header ...)
#    runs glib-mkenums to generate enumtypes .h and .c files from multiple
#    _enums_header. It searches for files in the current source directory and
#    exports to the current binary directory.

include(CMakeParseArguments)

add_printable_option(ENABLE_GI_DOCGEN "Use gi-docgen to build documentation" OFF)
if(ENABLE_GI_DOCGEN)
	if(NOT ENABLE_INTROSPECTION)
		message(FATAL_ERROR "Documentation generation with gi-docgen require introspection generation to be enabled, use -DENABLE_INTROSPECTION=ON to enable it, or disable gi-docgen documentation generation with -DENABLE_GI_DOCGEN=OFF")
	endif(NOT ENABLE_INTROSPECTION)
	find_program(GI_DOCGEN gi-docgen)
	if(NOT GI_DOCGEN)
		message(FATAL_ERROR "The gi-docgen command is not found. Install it or disable documentation generation with -DENABLE_GI_DOCGEN=OFF")
	endif(NOT GI_DOCGEN)
endif(ENABLE_GI_DOCGEN)

macro(generate_gi_documentation _target _config _gir_path)
	cmake_parse_arguments(GIDOCGEN_ARG "" "" "CONTENT_DIRS;INCLUDE_PATHS;TEMPLATE_DIRS" ${ARGN} )

	set(EXTRA_ARGS)
	foreach(_item IN LISTS GIDOCGEN_ARG_CONTENT_DIRS)
		list(APPEND EXTRA_ARGS "--content-dir=${_item}")
	endforeach()
	foreach(_item IN LISTS GIDOCGEN_ARG_INCLUDE_PATHS)
		list(APPEND EXTRA_ARGS "--add-include-path=${_item}")
	endforeach()
	foreach(_item IN LISTS GIDOCGEN_ARG_TEMPLATE_DIRS)
		list(APPEND EXTRA_ARGS "--templates-dir=${_item}")
	endforeach()
	get_filename_component(_gir_filename ${_gir_path} NAME)
	gir_girfilename_to_target(_gir_target ${_gir_filename})
	add_custom_target(
		${_target}-doc ALL
		COMMAND
			${GI_DOCGEN}
			generate
			--config ${_config}
			--content-dir ${CMAKE_CURRENT_SOURCE_DIR}
			--no-namespace-dir
			--output-dir ${CMAKE_CURRENT_BINARY_DIR}/${_target}
			--quiet
			${EXTRA_ARGS}
			${_gir_path}
		DEPENDS
			${_gir_target}
		WORKING_DIRECTORY
			${CMAKE_CURRENT_BINARY_DIR}
		COMMENT
		"Generate documentation for ${_target}"
	)
endmacro(generate_gi_documentation)