mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-24 06:35:24 +00:00
4ced77a309
Meson unfortunately doesn't give us any means to share the code using xsltproc to output HTMLs processed by our template. This means we will have to resort to copy&paste engineering. To make things simpler, let's use the same block of code in docs/meson.build but also any of the subdirs which generate htmls. This will be achieved by making it configurable and wrapping it in a comment that instructs anybody editing it to keep it identical. We need to be able to configure the template file used and installation directory. The rest of the processing is same as we do in docs/meson.build. This code will then be copied to subdirs to refactor the current approach used there. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
327 lines
6.7 KiB
Meson
327 lines
6.7 KiB
Meson
docs_html_dir = docdir / 'html'
|
|
|
|
# xsltproc requires that the -o path ends with '/'
|
|
docs_builddir = meson.current_build_dir() / ''
|
|
|
|
docs_assets = [
|
|
'android-chrome-192x192.png',
|
|
'android-chrome-256x256.png',
|
|
'apple-touch-icon.png',
|
|
'architecture.gif',
|
|
'browserconfig.xml',
|
|
'favicon.ico',
|
|
'favicon-16x16.png',
|
|
'favicon-32x32.png',
|
|
'generic.css',
|
|
'libvirt.css',
|
|
'libvirt-daemon-arch.png',
|
|
'libvirt-driver-arch.png',
|
|
'libvirt-object-model.png',
|
|
'libvirt-virConnect-example.png',
|
|
'main.css',
|
|
'manifest.json',
|
|
'migration-managed-direct.png',
|
|
'migration-managed-p2p.png',
|
|
'migration-native.png',
|
|
'migration-tunnel.png',
|
|
'migration-unmanaged-direct.png',
|
|
'mobile.css',
|
|
'mstile-150x150.png',
|
|
'node.gif',
|
|
]
|
|
|
|
docs_html_in_files = [
|
|
'404',
|
|
'aclpolkit',
|
|
'api_extension',
|
|
'api',
|
|
'apps',
|
|
'architecture',
|
|
'auditlog',
|
|
'auth',
|
|
'bindings',
|
|
'bugs',
|
|
'cgroups',
|
|
'compiling',
|
|
'contact',
|
|
'contribute',
|
|
'csharp',
|
|
'dbus',
|
|
'devguide',
|
|
'docs',
|
|
'downloads',
|
|
'drivers',
|
|
'drvbhyve',
|
|
'drvesx',
|
|
'drvhyperv',
|
|
'drvlxc',
|
|
'drvnodedev',
|
|
'drvopenvz',
|
|
'drvqemu',
|
|
'drvremote',
|
|
'drvsecret',
|
|
'drvtest',
|
|
'drvvbox',
|
|
'drvvirtuozzo',
|
|
'drvvmware',
|
|
'drvxen',
|
|
'errors',
|
|
'firewall',
|
|
'formatcaps',
|
|
'formatdomaincaps',
|
|
'format',
|
|
'formatnetwork',
|
|
'formatnetworkport',
|
|
'formatnode',
|
|
'formatnwfilter',
|
|
'formatsecret',
|
|
'formatsnapshot',
|
|
'formatstoragecaps',
|
|
'formatstorageencryption',
|
|
'formatstorage',
|
|
'goals',
|
|
'governance',
|
|
'hooks',
|
|
'index',
|
|
'internals',
|
|
'java',
|
|
'logging',
|
|
'migration',
|
|
'nss',
|
|
'pci-hotplug',
|
|
'php',
|
|
'python',
|
|
'remote',
|
|
'securityprocess',
|
|
'storage',
|
|
'strategy',
|
|
'support',
|
|
'testapi',
|
|
'testsuites',
|
|
'testtck',
|
|
'tlscerts',
|
|
'uri',
|
|
'virshcmdref',
|
|
'windows',
|
|
]
|
|
|
|
docs_rst_files = [
|
|
'advanced-tests',
|
|
'best-practices',
|
|
'ci',
|
|
'coding-style',
|
|
'committer-guidelines',
|
|
'daemons',
|
|
'developer-tooling',
|
|
'formatbackup',
|
|
'formatcheckpoint',
|
|
'formatdomain',
|
|
'glib-adoption',
|
|
'hacking',
|
|
'kbase',
|
|
'libvirt-go',
|
|
'libvirt-go-xml',
|
|
'newreposetup',
|
|
'pci-addresses',
|
|
'platforms',
|
|
'programming-languages',
|
|
'styleguide',
|
|
'submitting-patches',
|
|
]
|
|
|
|
# list of web targets to build for docs/web rule
|
|
install_web_deps = []
|
|
install_web_files = []
|
|
|
|
install_data(docs_assets, install_dir: docs_html_dir)
|
|
|
|
aclperms_gen = custom_target(
|
|
'aclperms.htmlinc',
|
|
input: access_perm_h,
|
|
output: 'aclperms.htmlinc',
|
|
command: [
|
|
meson_python_prog, python3_prog.path(), genaclperms_prog.path(), '@INPUT@',
|
|
],
|
|
capture: true,
|
|
)
|
|
|
|
docs_timestamp = run_command(
|
|
python3_prog, meson_timestamp_prog.path(), env: runutf8
|
|
).stdout().strip()
|
|
|
|
site_xsl = files('site.xsl')
|
|
subsite_xsl = files('subsite.xsl')
|
|
page_xsl = files('page.xsl')
|
|
newapi_xsl = files('newapi.xsl')
|
|
|
|
docs_api_generated = custom_target(
|
|
'generate-api',
|
|
output: [
|
|
'libvirt-api.xml',
|
|
'libvirt-lxc-api.xml',
|
|
'libvirt-qemu-api.xml',
|
|
'libvirt-admin-api.xml',
|
|
],
|
|
command: [
|
|
meson_python_prog, python3_prog.path(), apibuild_prog.path(),
|
|
meson.current_source_dir(),
|
|
meson.current_build_dir(),
|
|
],
|
|
install: true,
|
|
install_dir: pkgdatadir / 'api',
|
|
depend_files: [
|
|
libvirt_common_h_in,
|
|
libvirt_include,
|
|
driver_sources,
|
|
libvirt_qemu_sources,
|
|
libvirt_lxc_sources,
|
|
admin_sources,
|
|
util_public_sources,
|
|
],
|
|
)
|
|
|
|
docs_api_xml = docs_api_generated[0]
|
|
docs_lxc_api_xml = docs_api_generated[1]
|
|
docs_qemu_api_xml = docs_api_generated[2]
|
|
docs_admin_api_xml = docs_api_generated[3]
|
|
|
|
docs_rst2html_gen = generator(
|
|
rst2html_prog,
|
|
output: '@BASENAME@.html.in',
|
|
arguments: [ '--stylesheet=', '--strict', '@INPUT@' ],
|
|
capture: true,
|
|
)
|
|
|
|
|
|
# html_xslt_gen config
|
|
|
|
html_xslt_gen_xslt = site_xsl
|
|
html_xslt_gen_install_dir = docs_html_dir
|
|
|
|
html_xslt_gen = []
|
|
# html_xslt_gen:
|
|
# each entry is a dictionary with following items:
|
|
# name - base file name (required), output file will become 'name.html'
|
|
# file - input file (optional, 'name.html.in' assumed if missing)
|
|
# source - source filename relative to repository root (optional, if there is no source)
|
|
# depends - explicit dependency on other input (optional)
|
|
|
|
foreach name : docs_html_in_files
|
|
html_xslt_gen += {
|
|
'name': name,
|
|
'source': 'docs' / name + '.html.in',
|
|
}
|
|
endforeach
|
|
|
|
foreach name : docs_rst_files
|
|
rst_file = '@0@.rst'.format(name)
|
|
html_xslt_gen += {
|
|
'name': name,
|
|
'file': docs_rst2html_gen.process(rst_file),
|
|
'source': 'docs' / rst_file,
|
|
}
|
|
endforeach
|
|
|
|
html_xslt_gen += {
|
|
'name': 'acl',
|
|
'source': 'docs' / 'acl.html.in',
|
|
'depends': aclperms_gen,
|
|
}
|
|
|
|
hvsupport_html_in = custom_target(
|
|
'hvsupport.html.in',
|
|
output: 'hvsupport.html.in',
|
|
command: [
|
|
meson_python_prog,
|
|
python3_prog.path(),
|
|
hvsupport_prog.path(),
|
|
meson.source_root(),
|
|
meson.build_root(),
|
|
],
|
|
capture: true,
|
|
depend_files: [
|
|
public_sym_file,
|
|
libvirt_qemu_syms,
|
|
libvirt_lxc_syms,
|
|
driver_header,
|
|
],
|
|
depends: [
|
|
docs_api_generated,
|
|
],
|
|
)
|
|
html_xslt_gen += {
|
|
'name': 'hvsupport',
|
|
'file': hvsupport_html_in,
|
|
}
|
|
|
|
news_html_in = docs_rst2html_gen.process(meson.source_root() / 'NEWS.rst')
|
|
html_xslt_gen += {
|
|
'name': 'news',
|
|
'file': news_html_in,
|
|
'source': 'NEWS.rst',
|
|
}
|
|
|
|
# The following code between the markers must be kept identical with the other
|
|
# copies of the code in various subdirs, since meson doesn't support any kind
|
|
# of functions.
|
|
|
|
# --- 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,
|
|
'--nonet',
|
|
html_xslt_gen_xslt,
|
|
'@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 ---
|
|
|
|
subdir('fonts')
|
|
subdir('html')
|
|
subdir('internals')
|
|
subdir('js')
|
|
subdir('kbase')
|
|
subdir('logos')
|
|
subdir('manpages')
|
|
subdir('schemas')
|
|
|
|
|
|
foreach file : docs_assets
|
|
# This hack enables us to view the web pages
|
|
# from within the uninstalled build tree
|
|
configure_file(input: file, output: file, copy: true)
|
|
|
|
install_web_files += '@0@:@1@'.format(meson.current_source_dir() / file, docs_html_dir)
|
|
endforeach
|
|
|
|
run_target(
|
|
'install-web',
|
|
command: [
|
|
meson_python_prog, python3_prog.path(), meson_install_web_prog.path(),
|
|
install_web_files,
|
|
],
|
|
depends: install_web_deps,
|
|
)
|