b3f4830ab3
The automatic dependency handling for Sphinx manuals only makes the output depend on the input documentation files. This means that if you edit the Python source of an extension then the documentation won't be rebuilt. Create a list of all the source files for the extensions and add it to the dependencies for the manuals. This is similar to how we handle the qapi_gen_depends list. Because we don't try to identify which manuals are using which Sphinx extensions, a change to the source of one extension will always rebuild the entire manual set, not merely the manuals which have changed. This is acceptable because we don't change the extensions all that often. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Message-Id: <20200925162316.21205-15-peter.maydell@linaro.org> Reviewed-by: Markus Armbruster <armbru@redhat.com> [Re rebuilding the enitre manual set being acceptable "because we don't change the extensions all that often": we also rebuild it when the QAPI generator code the qapidoc extension depends on changes. This will inconvenience QAPI developers. Can't be helped now.] Signed-off-by: Markus Armbruster <armbru@redhat.com>
70 lines
2.6 KiB
Meson
70 lines
2.6 KiB
Meson
if build_docs
|
|
configure_file(output: 'index.html',
|
|
input: files('index.html.in'),
|
|
configuration: {'VERSION': meson.project_version()},
|
|
install_dir: qemu_docdir)
|
|
manuals = [ 'devel', 'interop', 'tools', 'specs', 'system', 'user' ]
|
|
man_pages = {
|
|
'interop' : {
|
|
'qemu-ga.8': (have_tools ? 'man8' : ''),
|
|
'qemu-ga-ref.7': 'man7',
|
|
'qemu-qmp-ref.7': 'man7',
|
|
},
|
|
'tools': {
|
|
'qemu-img.1': (have_tools ? 'man1' : ''),
|
|
'qemu-nbd.8': (have_tools ? 'man8' : ''),
|
|
'qemu-trace-stap.1': (config_host.has_key('CONFIG_TRACE_SYSTEMTAP') ? 'man1' : ''),
|
|
'virtfs-proxy-helper.1': (have_virtfs_proxy_helper ? 'man1' : ''),
|
|
'virtiofsd.1': (have_virtiofsd ? 'man1' : ''),
|
|
},
|
|
'system': {
|
|
'qemu.1': 'man1',
|
|
'qemu-block-drivers.7': 'man7',
|
|
'qemu-cpu-models.7': 'man7'
|
|
},
|
|
}
|
|
|
|
sphinxdocs = []
|
|
sphinxmans = []
|
|
foreach manual : manuals
|
|
private_dir = meson.current_build_dir() / (manual + '.p')
|
|
output_dir = meson.current_build_dir() / manual
|
|
input_dir = meson.current_source_dir() / manual
|
|
|
|
this_manual = custom_target(manual + ' manual',
|
|
build_by_default: build_docs,
|
|
output: [manual + '.stamp'],
|
|
input: [files('conf.py'), files(manual / 'conf.py')],
|
|
depfile: manual + '.d',
|
|
depend_files: sphinx_extn_depends,
|
|
command: [SPHINX_ARGS, '-Ddepfile=@DEPFILE@',
|
|
'-Ddepfile_stamp=@OUTPUT0@',
|
|
'-b', 'html', '-d', private_dir,
|
|
input_dir, output_dir])
|
|
sphinxdocs += this_manual
|
|
if build_docs and manual != 'devel'
|
|
install_subdir(output_dir, install_dir: qemu_docdir)
|
|
endif
|
|
|
|
these_man_pages = []
|
|
install_dirs = []
|
|
foreach page, section : man_pages.get(manual, {})
|
|
these_man_pages += page
|
|
install_dirs += section == '' ? false : get_option('mandir') / section
|
|
endforeach
|
|
if these_man_pages.length() > 0
|
|
sphinxmans += custom_target(manual + ' man pages',
|
|
build_by_default: build_docs,
|
|
output: these_man_pages,
|
|
input: this_manual,
|
|
install: build_docs,
|
|
install_dir: install_dirs,
|
|
command: [SPHINX_ARGS, '-b', 'man', '-d', private_dir,
|
|
input_dir, meson.current_build_dir()])
|
|
endif
|
|
endforeach
|
|
alias_target('sphinxdocs', sphinxdocs)
|
|
alias_target('html', sphinxdocs)
|
|
alias_target('man', sphinxmans)
|
|
endif
|