Both a configuration-time "enable_docs" boolean option and an optional
'ninja doc' target are available. Note that due to a Meson bug for now
the latter will only build, but not install the files.

Signed-off-by: Luca Boccassi <bl...@debian.org>
---
 doc/api/generate_doxygen.sh | 10 ++++++++
 doc/api/meson.build         | 51 +++++++++++++++++++++++++++++++++++++
 doc/build-sdk-meson.txt     |  2 ++
 doc/meson.build             |  4 +++
 meson.build                 |  3 +++
 meson_options.txt           |  2 ++
 6 files changed, 72 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 <bl...@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..e44963e4a9
--- /dev/null
+++ b/doc/api/meson.build
@@ -0,0 +1,51 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2018 Luca Boccassi <bl...@debian.org>
+
+# 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')
+doxygen = find_program('doxygen')
+
+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)
diff --git a/doc/build-sdk-meson.txt b/doc/build-sdk-meson.txt
index 9618e759ea..508e2cb642 100644
--- a/doc/build-sdk-meson.txt
+++ b/doc/build-sdk-meson.txt
@@ -85,6 +85,8 @@ Project-specific options are passed used -Doption=value::
 
        meson -Dmax_lcores=8 smallbuild  # scale build for smaller systems
 
+       meson -Denable_docs=true fullbuild  # build and install docs
+
 Examples of setting the same options using meson configure::
 
        meson configure -Dwerror=true
diff --git a/doc/meson.build b/doc/meson.build
new file mode 100644
index 0000000000..afca2e7133
--- /dev/null
+++ b/doc/meson.build
@@ -0,0 +1,4 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2018 Luca Boccassi <bl...@debian.org>
+
+subdir('api')
diff --git a/meson.build b/meson.build
index 9999e8640a..09506ec48c 100644
--- a/meson.build
+++ b/meson.build
@@ -34,6 +34,9 @@ subdir('usertools')
 subdir('app')
 subdir('test')
 
+# build docs
+subdir('doc')
+
 # build any examples explicitly requested - useful for developers
 if get_option('examples') != ''
        subdir('examples')
diff --git a/meson_options.txt b/meson_options.txt
index f20887212a..d38ba56e29 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -2,6 +2,8 @@ option('allow_invalid_socket_id', type: 'boolean', value: false,
        description: 'allow out-of-range NUMA socket id\'s for platforms that 
don\'t report the value correctly')
 option('enable_kmods', type: 'boolean', value: true,
        description: 'build kernel modules')
+option('enable_docs', type: 'boolean', value: false,
+       description: 'build documentation')
 option('examples', type: 'string', value: '',
        description: 'Comma-separated list of examples to build by default')
 option('include_subdir_arch', type: 'string', value: '',
-- 
2.18.0

Reply via email to