# Here be dragons

dot_gv = {
	'wayland-architecture': files('dot/wayland-architecture.gv'),
	'x-architecture': files('dot/x-architecture.gv'),
}

# This is a workaround for Meson's custom_target() directive, which
# currently does not support outputs pointing to a sub-directory
# XXX: try turning these into maps, so they can be indexed with picture name
dot_png = []
dot_map = []

doxygen_conf = configuration_data()
doxygen_conf.set('VERSION', meson.project_version())
doxygen_conf.set('top_builddir', meson.build_root())
wayland_doxygen = configure_file(
	input: 'wayland.doxygen.in',
	output: 'wayland.doxygen',
	configuration: doxygen_conf,
)

shared_files = files([
	'../../src/wayland-util.h',
])

client_files = files([
	'../../src/wayland-client.c',
	'../../src/wayland-client.h',
	'../../src/wayland-client-core.h',
])

server_files = files([
	'../../src/event-loop.c',
	'../../src/wayland-server.c',
	'../../src/wayland-server.h',
	'../../src/wayland-server-core.h',
	'../../src/wayland-shm.c',
])

cursor_files = files([
	'../../cursor/wayland-cursor.c',
	'../../cursor/wayland-cursor.h',
])

extra_client_files = [
	'mainpage.dox',
	wayland_client_protocol_h,
]

extra_server_files = [
	'mainpage.dox',
	wayland_server_protocol_h,
]

extra_cursor_files = [
	'mainpage.dox',
]

gen_doxygen = find_program('gen-doxygen.py')

subdir('xml')

formats = {
	'html': {
		'Client': shared_files + client_files + extra_client_files,
		'Server': shared_files + server_files + extra_server_files,
		'Cursor': shared_files + cursor_files + extra_cursor_files,
	},
}

foreach f_name, sections: formats
	foreach s_name, s_files: sections
		t_name = '@0@-@1@-doc'.format(f_name, s_name)

		# We do not really need an output file, but Meson
		# will complain if one is not set, so we use a
		# dummy 'stamp' file
		custom_target(
			t_name,
			command: [
				gen_doxygen,
				# XXX pass doxygen path as argument
				'--builddir=@OUTDIR@',
				'--section=@0@'.format(s_name),
				'--output-format=@0@'.format(f_name),
				'--stamp=doc/doxygen/@0@.stamp'.format(t_name),
				wayland_doxygen,
				'@INPUT@',
			],
			input: s_files,
			output: '@0@.stamp'.format(t_name),
			depends: [dot_png, dot_map],
			build_by_default: true,
		)
	endforeach
endforeach

man_files = shared_files + server_files + client_files + cursor_files
custom_target(
	'man-pages-3',
	command: [
		gen_doxygen,
		'--builddir=@OUTDIR@',
		'--output-format=man3',
		'--stamp=doc/doxygen/man3.stamp',
		wayland_doxygen,
		'@INPUT@',
	],
	input: man_files,
	output: 'man3',
	build_by_default: true,
	install: true,
	install_dir: join_paths(get_option('prefix'), get_option('mandir')),
)
