Thread (39 messages) 39 messages, 3 authors, 2018-09-18

Re: [PATCH v2 4/4] build: generate API documentation with Meson

From: Bruce Richardson <hidden>
Date: 2018-09-10 15:47:12

On Fri, Sep 07, 2018 at 05:55:24PM +0100, Luca Boccassi wrote:
quoted hunk ↗ jump to hunk
Signed-off-by: Luca Boccassi <redacted>
---
v2: made doxygen dependency optional, skip doxygen build when not found

 doc/api/generate_doxygen.sh | 10 +++++++
 doc/api/meson.build         | 54 +++++++++++++++++++++++++++++++++++++
 doc/build-sdk-meson.txt     |  2 ++
 doc/meson.build             |  4 +++
 meson.build                 |  3 +++
 meson_options.txt           |  2 ++
 6 files changed, 75 insertions(+)
 create mode 100755 doc/api/generate_doxygen.sh
 create mode 100644 doc/api/meson.build
 create mode 100644 doc/meson.build
diff --git a/doc/api/generate_doxygen.sh b/doc/api/generate_doxygen.sh
new file mode 100755
index 0000000000..ab57660958
--- /dev/null
+++ b/doc/api/generate_doxygen.sh
@@ -0,0 +1,10 @@
+#! /bin/sh -e
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright 2018 Luca Boccassi <bluca@debian.org>
+
+DOXYCONF=$1
+OUTDIR=$2
+SCRIPTCSS=$3
+
+doxygen "${DOXYCONF}"
+"${SCRIPTCSS}" "${OUTDIR}"/doxygen.css
diff --git a/doc/api/meson.build b/doc/api/meson.build
new file mode 100644
index 0000000000..5dfa0fe044
--- /dev/null
+++ b/doc/api/meson.build
@@ -0,0 +1,54 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2018 Luca Boccassi <bluca@debian.org>
+
+doxygen = find_program('doxygen', required: false)
Thinking about it, I think that "required" should be set to
"get_option(enable_docs)", since if someone explicitly enables the docs
they should be built and cause error if they can't be.
+
+if doxygen.found()
+	# due to the CSS customisation script, which needs to run on a file that
+	# is in a subdirectory that is created at build time and thus it cannot
+	# be an individual custom_target, we need to wrap the doxygen call in a
+	# script to run the CSS modification afterwards
+	generate_doxygen = find_program('generate_doxygen.sh')
+	generate_examples = find_program('generate_examples.sh')
+	generate_css = find_program('doxy-html-custom.sh')
+
+	inputdir = join_paths(meson.source_root(), 'examples')
+	htmldir = join_paths('doc', 'html')
+
+	# due to the following bug: https://github.com/mesonbuild/meson/issues/4107
+	# if install is set to true it will override build_by_default and it will
+	# cause the target to always be built. If install were to be always set to
+	# false it would be impossible to install the docs.
+	# So use a configure option for now.
+	example = custom_target('examples.dox',
+		input: inputdir,
+		output: 'examples.dox',
+		command: [generate_examples, '@INPUT@', '@OUTPUT@'],
+		install: get_option('enable_docs'),
+		install_dir: htmldir,
+		build_by_default: false)
+
+	cdata = configuration_data()
+	cdata.set('VERSION', meson.project_version())
+	cdata.set('API_EXAMPLES', join_paths(meson.build_root(), 'doc', 'api', 'examples.dox'))
+	cdata.set('OUTPUT', join_paths(meson.build_root(), 'doc', 'api'))
+	cdata.set('HTML_OUTPUT', 'api')
+	cdata.set('TOPDIR', meson.source_root())
+	cdata.set('STRIP_FROM_PATH', meson.source_root())
+
+	doxy_conf = configure_file(input: 'doxy-api.conf.in',
+		output: 'doxy-api.conf',
+		configuration: cdata,
+		install: false)
+
+	doxy_build = custom_target('doxygen',
+		depends: example,
+		input: doxy_conf,
+		output: 'api',
+		command: [generate_doxygen, '@INPUT@', '@OUTPUT@', generate_css],
+		install: get_option('enable_docs'),
+		install_dir: htmldir,
+		build_by_default: false)
+
+	run_target('doc', command: 'true', depends: doxy_build)
+endif
Suggestion: add a run_target in an else leg to just print out "no
doxygen found" or similar message when ninja doc is called.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help