doc: rebuild with meson whenever a file changes
Add proper support for calling sphinx whenever a file in the doc directory changes. This is accomplished by using a wrapper script for sphinx, which runs sphinx but also emits a gcc-format dependency file listing all the doc files. This is used by ninja so that any change to the doc files triggers a rebuild of the docs. Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> Acked-by: Aaron Conole <aconole@redhat.com> Acked-by: Luca Boccassi <bluca@debian.org>
This commit is contained in:
parent
affc17c821
commit
f5ab2074cf
@ -128,6 +128,7 @@ F: meson.build
|
|||||||
F: lib/librte_eal/freebsd/BSDmakefile.meson
|
F: lib/librte_eal/freebsd/BSDmakefile.meson
|
||||||
F: meson_options.txt
|
F: meson_options.txt
|
||||||
F: config/rte_config.h
|
F: config/rte_config.h
|
||||||
|
F: buildtools/call-sphinx-build.py
|
||||||
F: buildtools/gen-pmdinfo-cfile.sh
|
F: buildtools/gen-pmdinfo-cfile.sh
|
||||||
F: buildtools/map_to_def.py
|
F: buildtools/map_to_def.py
|
||||||
F: buildtools/symlink-drivers-solibs.sh
|
F: buildtools/symlink-drivers-solibs.sh
|
||||||
|
31
buildtools/call-sphinx-build.py
Executable file
31
buildtools/call-sphinx-build.py
Executable file
@ -0,0 +1,31 @@
|
|||||||
|
#! /usr/bin/env python3
|
||||||
|
# SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
# Copyright(c) 2019 Intel Corporation
|
||||||
|
#
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
from os.path import join
|
||||||
|
from subprocess import run, PIPE
|
||||||
|
from distutils.version import StrictVersion
|
||||||
|
|
||||||
|
(sphinx, src, dst) = sys.argv[1:] # assign parameters to variables
|
||||||
|
|
||||||
|
# for sphinx version >= 1.7 add parallelism using "-j auto"
|
||||||
|
ver = run([sphinx, '--version'], stdout=PIPE).stdout.decode().split()[-1]
|
||||||
|
sphinx_cmd = [sphinx]
|
||||||
|
if StrictVersion(ver) >= StrictVersion('1.7'):
|
||||||
|
sphinx_cmd += ['-j', 'auto']
|
||||||
|
|
||||||
|
# find all the files sphinx will process so we can write them as dependencies
|
||||||
|
srcfiles = []
|
||||||
|
for root, dirs, files in os.walk(src):
|
||||||
|
srcfiles.extend([join(root, f) for f in files])
|
||||||
|
|
||||||
|
# run sphinx, putting the html output in a "html" directory
|
||||||
|
process = run(sphinx_cmd + ['-b', 'html', src, join(dst, 'html')], check=True)
|
||||||
|
print(str(process.args) + ' Done OK')
|
||||||
|
|
||||||
|
# create a gcc format .d file giving all the dependencies of this doc build
|
||||||
|
with open(join(dst, '.html.d'), 'w') as d:
|
||||||
|
d.write('html: ' + ' '.join(srcfiles) + '\n')
|
@ -10,10 +10,12 @@ check_experimental_syms = find_program('check-experimental-syms.sh')
|
|||||||
# set up map-to-def script using python, either built-in or external
|
# set up map-to-def script using python, either built-in or external
|
||||||
python3 = import('python').find_installation(required: false)
|
python3 = import('python').find_installation(required: false)
|
||||||
if python3.found()
|
if python3.found()
|
||||||
map_to_def_cmd = [python3, files('map_to_def.py')]
|
py3 = [python3]
|
||||||
else
|
else
|
||||||
map_to_def_cmd = ['meson', 'runpython', files('map_to_def.py')]
|
py3 = ['meson', 'runpython']
|
||||||
endif
|
endif
|
||||||
|
map_to_def_cmd = py3 + files('map_to_def.py')
|
||||||
|
sphinx_wrapper = py3 + files('call-sphinx-build.py')
|
||||||
|
|
||||||
# stable ABI always starts with "DPDK_"
|
# stable ABI always starts with "DPDK_"
|
||||||
is_experimental_cmd = [find_program('grep', 'findstr'), '^DPDK_']
|
is_experimental_cmd = [find_program('grep', 'findstr'), '^DPDK_']
|
||||||
|
@ -7,24 +7,18 @@ if not sphinx.found()
|
|||||||
subdir_done()
|
subdir_done()
|
||||||
endif
|
endif
|
||||||
|
|
||||||
htmldir = join_paths('share', 'doc', 'dpdk')
|
htmldir = join_paths(get_option('datadir'), 'doc', 'dpdk')
|
||||||
html_guides = custom_target('html_guides',
|
html_guides = custom_target('html_guides',
|
||||||
input: meson.current_source_dir(),
|
input: files('index.rst'),
|
||||||
output: 'guides',
|
output: 'html',
|
||||||
command: [sphinx, '-b', 'html',
|
command: [sphinx_wrapper, sphinx, meson.current_source_dir(), meson.current_build_dir()],
|
||||||
'-d', meson.current_build_dir() + '/.doctrees',
|
depfile: '.html.d',
|
||||||
'@INPUT@', meson.current_build_dir() + '/guides'],
|
|
||||||
build_by_default: get_option('enable_docs'),
|
build_by_default: get_option('enable_docs'),
|
||||||
install: get_option('enable_docs'),
|
install: get_option('enable_docs'),
|
||||||
install_dir: htmldir)
|
install_dir: htmldir)
|
||||||
|
|
||||||
|
install_data(files('custom.css'),
|
||||||
|
install_dir: join_paths(htmldir,'_static', 'css'))
|
||||||
|
|
||||||
doc_targets += html_guides
|
doc_targets += html_guides
|
||||||
doc_target_names += 'HTML_Guides'
|
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')
|
|
||||||
|
Loading…
Reference in New Issue
Block a user