Files
libvirt/docs/meson.build
T

353 lines
8.0 KiB
Meson
Raw Normal View History

2020-06-18 02:20:37 +02:00
docs_html_dir = docdir / 'html'
# xsltproc requires that the -o path ends with '/'
# Not using '/' operator due to bug in meson 0.60.0
# https://github.com/mesonbuild/meson/issues/9450
docs_builddir = join_paths(meson.current_build_dir(), '')
2020-06-18 02:20:37 +02:00
docs_assets = [
'android-chrome-192x192.png',
'android-chrome-256x256.png',
'apple-touch-icon.png',
'browserconfig.xml',
'favicon.ico',
'favicon-16x16.png',
'favicon-32x32.png',
'manifest.json',
'mstile-150x150.png',
]
docs_html_in_files = [
'index',
]
docs_rst_files = [
2021-03-12 11:12:47 +01:00
'aclpolkit',
'advanced-tests',
2021-03-12 11:53:13 +01:00
'api',
2022-03-07 16:38:05 +01:00
'api_extension',
2021-03-12 12:14:57 +01:00
'apps',
2021-03-12 12:04:40 +01:00
'auditlog',
2021-03-04 16:48:12 +00:00
'auth',
'best-practices',
2022-03-07 16:38:05 +01:00
'bindings',
2022-03-07 14:39:24 +01:00
'bugs',
2022-03-10 17:57:53 +01:00
'cgroups',
'ci',
'coding-style',
'committer-guidelines',
2021-03-12 08:34:15 +01:00
'compiling',
2022-03-10 16:09:32 +01:00
'contact',
2022-03-07 14:29:40 +01:00
'contribute',
2022-04-04 14:49:54 +02:00
'csharp',
'daemons',
2021-03-24 00:10:39 +01:00
'dbus',
2022-04-04 16:14:31 +02:00
'docs',
2022-03-10 15:32:04 +01:00
'downloads',
2022-03-07 16:09:03 +01:00
'drivers',
2022-03-10 17:57:53 +01:00
'drvbhyve',
2021-05-12 10:01:31 -07:00
'drvch',
2022-03-10 17:57:53 +01:00
'drvesx',
2022-03-10 17:57:53 +01:00
'drvhyperv',
2022-03-10 17:57:53 +01:00
'drvlxc',
2022-03-10 17:57:53 +01:00
'drvnodedev',
2022-03-10 17:57:53 +01:00
'drvopenvz',
2022-03-07 16:38:05 +01:00
'drvqemu',
2022-03-10 17:57:53 +01:00
'drvsecret',
2022-03-10 17:57:53 +01:00
'drvtest',
2022-03-10 17:57:53 +01:00
'drvvbox',
2022-03-10 17:57:53 +01:00
'drvvirtuozzo',
2022-03-10 17:57:53 +01:00
'drvvmware',
2022-03-10 17:57:53 +01:00
'drvxen',
2022-03-07 14:46:22 +01:00
'errors',
2022-03-10 17:57:53 +01:00
'firewall',
2022-03-10 17:57:53 +01:00
'format',
'formatbackup',
2022-04-08 10:25:27 +02:00
'formatcaps',
'formatcheckpoint',
2020-07-10 17:09:35 +02:00
'formatdomain',
2022-03-10 17:57:53 +01:00
'formatdomaincaps',
2022-04-08 10:25:27 +02:00
'formatnetwork',
'formatnetworkport',
2022-04-08 10:25:27 +02:00
'formatnode',
2021-03-25 16:02:59 +01:00
'formatnwfilter',
2022-03-07 16:16:58 +01:00
'formatsecret',
2022-03-04 15:55:40 +01:00
'formatsnapshot',
2021-12-14 15:35:41 +01:00
'formatstorage',
'formatstoragecaps',
'formatstorageencryption',
2020-09-24 14:22:17 +02:00
'glib-adoption',
2022-03-04 17:08:31 +01:00
'goals',
2022-03-07 16:02:55 +01:00
'governance',
'hacking',
2022-03-10 17:57:54 +01:00
'hooks',
2022-03-10 17:57:54 +01:00
'java',
'libvirt-go',
'libvirt-go-xml',
2022-03-10 17:57:54 +01:00
'logging',
2018-11-20 03:12:17 +03:00
'macos',
2021-12-01 16:30:34 +01:00
'migration',
'newreposetup',
2022-03-10 16:25:15 +01:00
'nss',
'pci-addresses',
2022-03-10 16:28:52 +01:00
'pci-hotplug',
2022-03-10 17:57:54 +01:00
'php',
'platforms',
'programming-languages',
2021-03-25 16:58:44 +01:00
'python',
2022-04-08 10:25:27 +02:00
'remote',
2022-03-07 14:56:53 +01:00
'securityprocess',
2021-03-29 22:24:40 +02:00
'storage',
2022-03-04 17:11:45 +01:00
'strategy',
'styleguide',
'submitting-patches',
2022-03-07 14:54:23 +01:00
'support',
2022-03-10 16:23:24 +01:00
'testapi',
2022-03-10 16:36:15 +01:00
'testsuites',
2022-03-10 16:34:51 +01:00
'testtck',
2022-04-14 14:30:30 +02:00
'uri',
2021-03-25 18:08:51 +01:00
'windows',
]
# list of web targets to build for docs/web rule
install_web_deps = []
install_web_files = []
2020-06-18 02:20:37 +02:00
install_data(docs_assets, install_dir: docs_html_dir)
2020-06-25 14:31:59 +02:00
2020-07-23 18:16:14 +02:00
aclperms_gen = custom_target(
'aclperms.htmlinc',
input: access_perm_h,
output: 'aclperms.htmlinc',
command: [
2020-11-09 13:52:10 +00:00
meson_python_prog, python3_prog, genaclperms_prog, '@INPUT@',
2020-07-23 18:16:14 +02:00
],
capture: true,
)
2020-06-29 22:14:13 +02:00
docs_timestamp = run_command(
python3_prog, meson_timestamp_prog.path(), env: runutf8, check: true,
2020-06-29 22:14:13 +02:00
).stdout().strip()
2020-06-18 02:24:03 +02:00
site_xsl = files('site.xsl')
page_xsl = files('page.xsl')
newapi_xsl = files('newapi.xsl')
2020-06-25 14:31:59 +02:00
docs_api_generated = custom_target(
'generate-api',
output: [
'libvirt-api.xml',
'libvirt-lxc-api.xml',
'libvirt-qemu-api.xml',
'libvirt-admin-api.xml',
],
command: [
2020-11-09 13:52:10 +00:00
meson_python_prog, python3_prog, apibuild_prog,
2020-06-25 14:31:59 +02:00
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_programs_groups = [
{ 'name': 'rst2html5', 'prog': [ 'rst2html5', 'rst2html5.py', 'rst2html5-3' ] },
{ 'name': 'rst2man', 'prog': [ 'rst2man', 'rst2man.py', 'rst2man-3' ] },
]
foreach item : docs_programs_groups
prog = find_program(item.get('prog'), dirs: libvirt_sbin_path)
varname = item.get('name').underscorify()
conf.set_quoted(varname.to_upper(), prog.path())
set_variable('@0@_prog'.format(varname), prog)
endforeach
# There are two versions of rst2html5 in the wild: one is the version
# coming from the docutils package, and the other is the one coming
# from the rst2html5 package. These versions are subtly different,
# and the libvirt documentation can only be successfully generated
# using the docutils version. Every now and then, users will report
# build failures that can be traced back to having the wrong version
# installed.
#
# The only reliable way to tell the two binaries apart seems to be
# looking look at their version information: the docutils version
# will report
#
# rst2html5 (Docutils ..., Python ..., on ...)
#
# whereas the rst2html5 version will report
#
# rst2html5 ... (Docutils ..., Python ..., on ...)
#
# with the additional bit of information being the version number for
# the rst2html5 package itself.
#
# Use this knowledge to detect the version that we know doesn't work
# for building libvirt and reject it
rst2html5_version = run_command(rst2html5_prog, '--version', check: true)
rst2html5_version = rst2html5_version.stdout().split(' ')
if rst2html5_version[1] != '(Docutils'
error('Please uninstall the rst2html5 package and install the docutils package')
endif
docs_rst2html5_gen = generator(
rst2html5_prog,
output: '@BASENAME@.html.in',
arguments: [ '--stylesheet=', '--strict', '@INPUT@' ],
capture: true,
)
# html_xslt_gen config
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_rst2html5_gen.process(rst_file),
'source': 'docs' / rst_file,
}
endforeach
html_xslt_gen += {
'name': 'acl',
'source': 'docs' / 'acl.html.in',
'depends': aclperms_gen,
}
html_xslt_gen += {
'name': '404',
'source': 'docs' / '404.html.in',
'href_base': '/',
}
2020-06-25 14:32:40 +02:00
hvsupport_html_in = custom_target(
'hvsupport.html.in',
output: 'hvsupport.html.in',
command: [
meson_python_prog,
2020-11-09 13:52:10 +00:00
python3_prog,
hvsupport_prog,
2020-06-25 14:32:40 +02:00
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 += {
2020-06-25 14:32:40 +02:00
'name': 'hvsupport',
'file': hvsupport_html_in,
}
news_html_in = docs_rst2html5_gen.process(meson.source_root() / 'NEWS.rst')
html_xslt_gen += {
2020-06-25 14:32:55 +02:00
'name': 'news',
'file': news_html_in,
'source': 'NEWS.rst',
2020-06-25 14:32:55 +02:00
}
# 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,
'--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
2020-06-18 02:27:09 +02:00
html_xslt_gen = []
# --- end of XSLT processing ---
2021-12-21 16:10:13 +01:00
subdir('css')
2020-06-18 02:27:48 +02:00
subdir('fonts')
subdir('go')
subdir('html')
2021-12-21 12:11:25 +01:00
subdir('images')
2020-06-18 02:30:14 +02:00
subdir('js')
2020-06-18 02:30:40 +02:00
subdir('kbase')
2020-06-18 02:31:31 +02:00
subdir('logos')
2020-06-25 14:33:22 +02:00
subdir('manpages')
2020-06-18 02:27:09 +02:00
foreach file : docs_assets
# This hack enables us to view the web pages
# from within the uninstalled build tree
2020-06-18 02:27:09 +02:00
configure_file(input: file, output: file, copy: true)
install_web_files += '@0@:@1@'.format(meson.current_source_dir() / file, docs_html_dir)
2020-06-18 02:27:09 +02:00
endforeach
run_target(
'install-web',
command: [
meson_python_prog, python3_prog.path(), meson_install_web_prog.path(),
install_web_files,
],
depends: install_web_deps,
)