libvirt/docs/manpages/meson.build
Peter Krempa 98ffd82060 docs: Simplify passing of 'href_base' XSL variable
Historically we had two top level XSL files for top level and nested
documents which only differ in what they pass for 'href_base' to the
main 'page.xsl' file.

We can instead pass the variable as argument from the build system so
that we have just one XSL file and also allow for more nested document
trees in the future.

The '404' page is special even with the current XSL way so we add a
special case for it.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2022-04-12 12:53:32 +02:00

171 lines
5.9 KiB
Meson

html_xslt_gen_install_dir = docs_html_dir / 'manpages'
html_xslt_gen = []
# docs_man_files
# each entry is a dictionary with following items:
# name - man page name (required)
# section - man page section (required)
# install - whether to build and install the man page (required)
# file - generated RST file (optional, default none)
docs_man_files = [
{ 'name': 'index', 'section': '', 'install': false },
{ 'name': 'virsh', 'section': '1', 'install': true },
{ 'name': 'virt-admin', 'section': '1', 'install': true },
{ 'name': 'virt-host-validate', 'section': '1', 'install': conf.has('WITH_HOST_VALIDATE') },
{ 'name': 'virt-login-shell', 'section': '1', 'install': conf.has('WITH_LOGIN_SHELL') },
{ 'name': 'virt-pki-query-dn', 'section': '1', 'install': true },
{ 'name': 'virt-pki-validate', 'section': '1', 'install': true },
{ 'name': 'virt-qemu-run', 'section': '1', 'install': conf.has('WITH_QEMU') },
{ 'name': 'virt-xml-validate', 'section': '1', 'install': true },
{ 'name': 'libvirt-guests', 'section': '8', 'install': conf.has('WITH_LIBVIRTD') },
{ 'name': 'libvirtd', 'section': '8', 'install': conf.has('WITH_LIBVIRTD') },
{ 'name': 'virt-sanlock-cleanup', 'section': '8', 'install': conf.has('WITH_SANLOCK') },
{ 'name': 'virt-ssh-helper', 'section': '8', 'install': conf.has('WITH_LIBVIRTD') },
{ 'name': 'virtbhyved', 'section': '8', 'install': conf.has('WITH_BHYVE') },
{ 'name': 'virtinterfaced', 'section': '8', 'install': conf.has('WITH_INTERFACE') },
{ 'name': 'virtlockd', 'section': '8', 'install': conf.has('WITH_LIBVIRTD') },
{ 'name': 'virtlogd', 'section': '8', 'install': conf.has('WITH_LIBVIRTD') },
{ 'name': 'virtlxcd', 'section': '8', 'install': conf.has('WITH_LXC') },
{ 'name': 'virtnetworkd', 'section': '8', 'install': conf.has('WITH_NETWORK') },
{ 'name': 'virtnodedevd', 'section': '8', 'install': conf.has('WITH_NODE_DEVICES') },
{ 'name': 'virtnwfilterd', 'section': '8', 'install': conf.has('WITH_NWFILTER') },
{ 'name': 'virtproxyd', 'section': '8', 'install': conf.has('WITH_LIBVIRTD') },
{ 'name': 'virtqemud', 'section': '8', 'install': conf.has('WITH_QEMU') },
{ 'name': 'virtsecretd', 'section': '8', 'install': conf.has('WITH_SECRETS') },
{ 'name': 'virtstoraged', 'section': '8', 'install': conf.has('WITH_STORAGE') },
{ 'name': 'virtvboxd', 'section': '8', 'install': conf.has('WITH_VBOX') },
{ 'name': 'virtvzd', 'section': '8', 'install': conf.has('WITH_VZ') },
{ 'name': 'virtxend', 'section': '8', 'install': conf.has('WITH_LIBXL') },
]
foreach name : keycode_list
rst_file = custom_target(
'virkeycode-@0@.rst'.format(name),
input: keymap_src_file,
output: 'virkeycode-@0@.rst'.format(name),
command: [
meson_python_prog, python3_prog, keymap_gen_prog, 'code-docs',
'--lang', 'rst',
'--title', 'virkeycode-@0@'.format(name),
'--subtitle', 'Key code values for @0@'.format(name),
'@INPUT@', name,
],
capture: true,
build_by_default: true,
)
docs_man_files += {
'name': 'virkeycode-@0@'.format(name), 'section': '7', 'install': true, 'file': rst_file,
}
endforeach
foreach name : keyname_list
rst_file = custom_target(
'virkeyname-@0@.rst'.format(name),
input: keymap_src_file,
output: 'virkeyname-@0@.rst'.format(name),
command: [
meson_python_prog, python3_prog, keymap_gen_prog, 'name-docs',
'--lang', 'rst',
'--title', 'virkeyname-@0@'.format(name),
'--subtitle', 'Key name values for @0@'.format(name),
'@INPUT@', name,
],
capture: true,
build_by_default: true,
)
docs_man_files += {
'name': 'virkeyname-@0@'.format(name), 'section': '7', 'install': true, 'file': rst_file,
}
endforeach
docs_man_conf = configuration_data({
'SYSCONFDIR': sysconfdir,
'RUNSTATEDIR': runstatedir,
'VERSION': meson.project_version(),
})
foreach data : docs_man_files
rst_in_file = '@0@.rst'.format(data['name'])
html_in_file = '@0@.html.in'.format(data['name'])
html_file = '@0@.html'.format(data['name'])
if data.has_key('file')
rst_file = data['file']
else
rst_file = configure_file(
input: rst_in_file,
output: '@0@.rst'.format(data['name']),
configuration: docs_man_conf,
)
endif
if data['install']
man_file = '@0@.@1@'.format(data['name'], data['section'])
man_page = custom_target(
man_file,
input: rst_file,
output: man_file,
# 'contents' element is the table of contents which is undesired in manpage
command: [ rst2man_prog, '--strip-elements-with-class', 'contents', '--strict', '@INPUT@', '@OUTPUT@' ],
install: true,
install_dir: mandir / 'man@0@'.format(data['section']),
)
endif
html_in = custom_target(
html_in_file,
input: rst_file,
output: html_in_file,
command: [ rst2html5_prog, '--stylesheet=', '--strict', '@INPUT@' ],
capture: true,
)
html_xslt_gen += {
'name': data['name'],
'file': html_in,
'source': 'docs' / 'manpages' / rst_in_file,
'href_base': '../',
}
endforeach
# keep the XSLT processing code block in sync with docs/meson.build
# --- begin of XSLT processing ---
foreach data : html_xslt_gen
html_filename = data['name'] + '.html'
html_file = custom_target(
html_filename,
input: data.get('file', data['name'] + '.html.in'),
output: html_filename,
command: [
xsltproc_prog,
'--stringparam', 'pagesrc', data.get('source', ''),
'--stringparam', 'builddir', meson.build_root(),
'--stringparam', 'timestamp', docs_timestamp,
'--stringparam', 'href_base', data.get('href_base', ''),
'--nonet',
site_xsl,
'@INPUT@',
],
depends: data.get('depends', []),
depend_files: [ page_xsl ],
capture: true,
install: true,
install_dir: html_xslt_gen_install_dir,
)
install_web_deps += html_file
install_web_files += html_file.full_path() + ':' + html_xslt_gen_install_dir
endforeach
html_xslt_gen = []
# --- end of XSLT processing ---