1
0
mirror of https://github.com/systemd/systemd.git synced 2025-01-26 14:04:03 +03:00
systemd/man/meson.build
Zbigniew Jędrzejewski-Szmek 46c4f8dc8a meson: use jinja2 also for custom-entities.ent
This doesn't matter too much, but makes things a bit more consistent.
A minor advantage is that the file is not a configuration file for meson
anymore, so:
 a) It is not built unless pulled in by another target. Since
    we don't usually build man pages by default, this saves a tiny
    amount of work.
 b) When the .in file is updated, meson does not reconfigure everything,
    but just rebuilds the dependent targets.

Now that the conversion is finished, time for benchmarking:
a full build with default settings (and -Dstandalonebinaries=true), yields

before this pull request: 1687 targets, 148.13s user 35.17s system 317% cpu 57.697 total
with the full pull request: 1714 targets, 143.07s user 27.87s system 314% cpu 54.369 total

The difference doesn't seem significant. Partial rebuilds might be faster as
mentioned before.
2021-05-19 10:25:26 +09:00

215 lines
7.3 KiB
Meson

# SPDX-License-Identifier: LGPL-2.1-or-later
# This is lame, I know, but meson has no other include mechanism
subdir('rules')
want_man = get_option('man')
want_html = get_option('html')
xsltproc = find_program('xsltproc',
required : want_man == 'true' or want_html == 'true')
want_man = want_man != 'false' and xsltproc.found()
want_html = want_html != 'false' and xsltproc.found()
xsltproc_flags = [
'--nonet',
'--xinclude',
'--maxdepth', '9000',
'--stringparam', 'man.output.quietly', '1',
'--stringparam', 'funcsynopsis.style', 'ansi',
'--stringparam', 'man.authors.section.enabled', '0',
'--stringparam', 'man.copyright.section.enabled', '0',
'--stringparam', 'systemd.version', '@0@'.format(meson.project_version()),
'--path',
'@0@:@1@'.format(meson.current_build_dir(), meson.current_source_dir())]
custom_man_xsl = files('custom-man.xsl')
custom_html_xsl = files('custom-html.xsl')
xslt_cmd = [xsltproc, '-o', '@OUTPUT0@'] + xsltproc_flags
custom_entities_ent = custom_target(
'custom-entities.ent',
input : 'custom-entities.ent.in',
output : 'custom-entities.ent',
command : [meson_render_jinja2, config_h, '@INPUT@'],
capture : true)
man_pages = []
html_pages = []
source_xml_files = []
dbus_docs = []
foreach tuple : xsltproc.found() ? manpages : []
stem = tuple[0]
section = tuple[1]
aliases = tuple[2]
condition = tuple[3]
xml = stem + '.xml'
html = stem + '.html'
man = stem + '.' + section
manaliases = []
htmlaliases = []
foreach alias : aliases
manaliases += alias + '.' + section
htmlaliases += alias + '.html'
endforeach
mandirn = join_paths(get_option('mandir'), 'man' + section)
if condition == '' or conf.get(condition) == 1
p1 = custom_target(
man,
input : xml,
output : [man] + manaliases,
command : xslt_cmd + [custom_man_xsl, '@INPUT@'],
depends : custom_entities_ent,
install : want_man,
install_dir : mandirn)
man_pages += p1
p2 = []
foreach htmlalias : htmlaliases
link = custom_target(
htmlalias,
output : htmlalias,
command : [ln, '-fs', html, '@OUTPUT@'])
if want_html
dst = join_paths(docdir, 'html', htmlalias)
cmd = 'ln -fs @0@ $DESTDIR@1@'.format(html, dst)
meson.add_install_script('sh', '-c', cmd)
p2 += link
endif
html_pages += link
endforeach
p3 = custom_target(
html,
input : xml,
output : html,
command : xslt_cmd + [custom_html_xsl, '@INPUT@'],
depends : [custom_entities_ent, p2],
install : want_html,
install_dir : join_paths(docdir, 'html'))
html_pages += p3
file = files(tuple[0] + '.xml')
source_xml_files += file
if tuple[0].startswith('org.freedesktop.')
dbus_docs += file
endif
else
message('Skipping @0@.@1@ because @2@ is false'.format(stem, section, condition))
endif
endforeach
############################################################
have_lxml = run_command(xml_helper_py).returncode() == 0
if not have_lxml
message('python-lxml not available, not making man page indices')
endif
systemd_directives_xml = custom_target(
'systemd.directives.xml',
input : ['directives-template.xml', source_xml_files],
output : 'systemd.directives.xml',
command : [make_directive_index_py, '@OUTPUT@', '@INPUT@'])
nonindex_xml_files = source_xml_files + [systemd_directives_xml]
systemd_index_xml = custom_target(
'systemd.index.xml',
input : nonindex_xml_files,
output : 'systemd.index.xml',
command : [make_man_index_py, '@OUTPUT@'] + nonindex_xml_files)
foreach tuple : xsltproc.found() ? [['systemd.directives', '7', systemd_directives_xml],
['systemd.index', '7', systemd_index_xml]] : []
stem = tuple[0]
section = tuple[1]
xml = tuple[2]
html = stem + '.html'
man = stem + '.' + section
mandirn = join_paths(get_option('mandir'), 'man' + section)
p1 = custom_target(
man,
input : xml,
output : man,
command : xslt_cmd + [custom_man_xsl, '@INPUT@'],
install : want_man and have_lxml,
install_dir : mandirn)
man_pages += p1
p2 = []
if html == 'systemd.index.html'
htmlalias = 'index.html'
link = custom_target(
htmlalias,
input : p2,
output : htmlalias,
command : [ln, '-fs', html, '@OUTPUT@'])
if want_html
dst = join_paths(docdir, 'html', htmlalias)
cmd = 'ln -fs @0@ $DESTDIR@1@'.format(html, dst)
meson.add_install_script('sh', '-c', cmd)
p2 += link
endif
html_pages += link
endif
p3 = custom_target(
html,
input : xml,
output : html,
command : xslt_cmd + [custom_html_xsl, '@INPUT@'],
depends : [custom_entities_ent, p2],
install : want_html and have_lxml,
install_dir : join_paths(docdir, 'html'))
html_pages += p3
endforeach
# Cannot use run_target because those targets are used in depends
# Also see https://github.com/mesonbuild/meson/issues/368.
man = custom_target(
'man',
output : 'man',
depends : man_pages,
command : [echo])
html = custom_target(
'html',
output : 'html',
depends : html_pages,
command : [echo])
if rsync.found()
run_target(
'doc-sync',
depends : man_pages + html_pages,
command : [rsync, '-rlv',
'--delete-excluded',
'--include=man',
'--include=*.html',
'--exclude=*',
'--omit-dir-times',
meson.current_build_dir(),
get_option('www-target')])
endif
############################################################
buildroot_substs = configuration_data()
buildroot_substs.set_quoted('BUILD_ROOT', project_build_root)
configure_file(
input : 'man.in',
output : 'man',
configuration : buildroot_substs)
configure_file(
input : 'html.in',
output : 'html',
configuration : buildroot_substs)