[v3] doc: support building HTML guides with meson

Message ID 20180920132208.14583-1-bluca@debian.org (mailing list archive)
State Accepted, archived
Delegated to: Thomas Monjalon
Headers
Series [v3] doc: support building HTML guides with meson |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Luca Boccassi Sept. 20, 2018, 1:22 p.m. UTC
  From: Bruce Richardson <bruce.richardson@intel.com>

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Signed-off-by: Luca Boccassi <bluca@debian.org>
---
v2: send on behalf of Bruce on request.
    - tell sphinx to create .doctrees working files in the
      parent of the target directory so that they don't get
      installed
    - change the output directory so that it matches the legacy
      makefiles directory structure (on install)
    - add install_dir to fix ninja install
    - add post-install calls to delete .buildinfo sphinx
      temporary file and to install custom.css as the makefiles
      do
The installed directory has been verified to be bit-by-bit
identical to the legacy makefiles with diffoscope.

v3: re-arranged sphinx parameters to make it work on older
    versions  (RHEL 7), and specify DEST filename on the
    install call, to make it work on older version (RHEL 7)

 doc/api/meson.build    |  5 ++---
 doc/guides/meson.build | 28 ++++++++++++++++++++++++++++
 doc/meson.build        | 11 +++++++++++
 3 files changed, 41 insertions(+), 3 deletions(-)
 create mode 100644 doc/guides/meson.build
  

Comments

Timothy Redaelli Sept. 20, 2018, 1:51 p.m. UTC | #1
On Thu, 20 Sep 2018 14:22:08 +0100
Luca Boccassi <bluca@debian.org> wrote:

> From: Bruce Richardson <bruce.richardson@intel.com>
> 
> Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
> Signed-off-by: Luca Boccassi <bluca@debian.org>

Tested on Fedora 28 (sphinx 1.7.5) and RHEL 7.5 (sphinx 1.1.3)

Tested-by: Timothy Redaelli <tredaelli@redhat.com>
  
Thomas Monjalon Oct. 27, 2018, 9:54 p.m. UTC | #2
20/09/2018 15:51, Timothy Redaelli:
> On Thu, 20 Sep 2018 14:22:08 +0100
> Luca Boccassi <bluca@debian.org> wrote:
> 
> > From: Bruce Richardson <bruce.richardson@intel.com>
> > 
> > Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
> > Signed-off-by: Luca Boccassi <bluca@debian.org>
> 
> Tested on Fedora 28 (sphinx 1.7.5) and RHEL 7.5 (sphinx 1.1.3)
> 
> Tested-by: Timothy Redaelli <tredaelli@redhat.com>

Applied, thanks

In the build directory, docs are in
	- doc/api/api/
	- doc/guides/guides/
Why having the last level of (redundant) directory?
  
Luca Boccassi Oct. 29, 2018, 10:01 a.m. UTC | #3
On Sat, 2018-10-27 at 23:54 +0200, Thomas Monjalon wrote:
> 20/09/2018 15:51, Timothy Redaelli:
> > On Thu, 20 Sep 2018 14:22:08 +0100
> > Luca Boccassi <bluca@debian.org> wrote:
> > 
> > > From: Bruce Richardson <bruce.richardson@intel.com>
> > > 
> > > Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
> > > Signed-off-by: Luca Boccassi <bluca@debian.org>
> > 
> > Tested on Fedora 28 (sphinx 1.7.5) and RHEL 7.5 (sphinx 1.1.3)
> > 
> > Tested-by: Timothy Redaelli <tredaelli@redhat.com>
> 
> Applied, thanks
> 
> In the build directory, docs are in
> 	- doc/api/api/
> 	- doc/guides/guides/
> Why having the last level of (redundant) directory?

Quirks due to the intersection of Meson and Sphinx/Doxygen and theirs
respective quirks - it needs to be a new directory, and it needs to be
called "guides/api" as that's what gets installed via ninja install.
Yes it's not the prettiest in the build tree - suggestions to improve
it are most welcome of course
  

Patch

diff --git a/doc/api/meson.build b/doc/api/meson.build
index 13fcbb8cd7..30bdc573b5 100644
--- a/doc/api/meson.build
+++ b/doc/api/meson.build
@@ -50,7 +50,6 @@  if doxygen.found()
 		install_dir: htmldir,
 		build_by_default: false)
 
-	run_target('doc', command: 'true', depends: doxy_build)
-else
-	run_target('doc', command: ['echo', 'doxygen', 'not', 'found'])
+	doc_targets += doxy_build
+	doc_target_names += 'Doxygen_API'
 endif
diff --git a/doc/guides/meson.build b/doc/guides/meson.build
new file mode 100644
index 0000000000..06f14882bb
--- /dev/null
+++ b/doc/guides/meson.build
@@ -0,0 +1,28 @@ 
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2018 Intel Corporation
+
+sphinx = find_program('sphinx-build', required: get_option('enable_docs'))
+
+if sphinx.found()
+	htmldir = join_paths('share', 'doc', 'dpdk')
+	html_guides_build = custom_target('html_guides_build',
+		input: meson.current_source_dir(),
+		output: 'guides',
+		command: [sphinx, '-b', 'html',
+			'-d', meson.current_build_dir() + '/.doctrees',
+			'@INPUT@', meson.current_build_dir() + '/guides'],
+		build_by_default: false,
+		install: get_option('enable_docs'),
+		install_dir: htmldir)
+
+	doc_targets += html_guides_build
+	doc_target_names += 'HTML_Guides'
+
+	# sphinx leaves a .buildinfo in the target directory, which we don't
+	# want to install. Note that sh -c has to be used, otherwise the
+	# env var does not get expanded if calling rm/install directly.
+	meson.add_install_script('sh', '-c',
+		'rm -f $MESON_INSTALL_DESTDIR_PREFIX/share/doc/dpdk/guides/.buildinfo')
+	meson.add_install_script('sh', '-c',
+		'install -D -m0644 $MESON_SOURCE_ROOT/doc/guides/custom.css $MESON_INSTALL_DESTDIR_PREFIX/share/doc/dpdk/guides/_static/css/custom.css')
+endif
diff --git a/doc/meson.build b/doc/meson.build
index afca2e7133..c5410d85d6 100644
--- a/doc/meson.build
+++ b/doc/meson.build
@@ -1,4 +1,15 @@ 
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2018 Luca Boccassi <bluca@debian.org>
 
+doc_targets = []
+doc_target_names = []
 subdir('api')
+subdir('guides')
+
+if doc_targets.length() == 0
+	message = 'No docs targets found'
+else
+	message = 'Building docs:'
+endif
+run_target('doc', command: ['echo', message, doc_target_names],
+	depends: doc_targets)