Files
systemd/man/meson.build
T
Abderrahim Kitouni 3691e7fce7 man: add checks for missing version information
This adds a new script tools/check-version-history.py and a corresponding
test when building in developer mode. It checks manpages (except dbus
documentation which is handled by update-dbus-docs) for missing version
history information.

It also adds ignore lists based on version 183 (the version that our version
annotations go back to). These can be augmented if we want to ignore other
elements if it doesn't make sense for them to have version annotations.
2023-10-01 11:54:29 +01:00

246 lines
8.5 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.enabled() or want_html.enabled())
want_man = want_man.allowed() and xsltproc.found()
want_html = want_html.allowed() 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@:@2@'.format(meson.current_build_dir(),
meson.current_source_dir(),
libshared_build_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 : [jinja2_cmdline, '@INPUT@', '@OUTPUT@'])
man_page_depends += custom_entities_ent
man_pages = []
html_pages = []
source_xml_files = []
dbus_docs = []
foreach tuple : 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 = get_option('mandir') / ('man' + section)
if condition == '' or conf.get(condition) == 1
file = files(tuple[0] + '.xml')
source_xml_files += file
if tuple[0].startswith('org.freedesktop.')
dbus_docs += file
endif
if xsltproc.found()
p1 = custom_target(
man,
input : xml,
output : [man] + manaliases,
command : xslt_cmd + [custom_man_xsl, '@INPUT@'],
depends : man_page_depends,
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
meson.add_install_script(sh, '-c', ln_s.format(html, docdir / 'html' / htmlalias))
p2 += link
endif
html_pages += link
endforeach
p3 = custom_target(
html,
input : xml,
output : html,
command : xslt_cmd + [custom_html_xsl, '@INPUT@'],
depends : [man_page_depends, p2],
install : want_html,
install_dir : docdir / 'html')
html_pages += p3
endif
else
message('Skipping @0@.@1@ because @2@ is false'.format(stem, section, condition))
endif
endforeach
############################################################
have_lxml = run_command(xml_helper_py, check: false).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',
depends : man_page_depends,
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 = 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
meson.add_install_script(sh, '-c', ln_s.format(html, docdir / 'html' / htmlalias))
p2 += link
endif
html_pages += link
endif
p3 = custom_target(
html,
input : xml,
output : html,
command : xslt_cmd + [custom_html_xsl, '@INPUT@'],
depends : [man_page_depends, p2],
install : want_html and have_lxml,
install_dir : 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)
############################################################
update_dbus_docs = custom_target(
'update-dbus-docs-impl',
output : 'update-dbus-docs',
command : [update_dbus_docs_py, '--build-dir', project_build_root, '@INPUT@'],
input : dbus_docs)
if conf.get('BUILD_MODE_DEVELOPER') == 1
test('dbus-docs-fresh',
update_dbus_docs_py,
suite : 'dist',
args : ['--build-dir', project_build_root, '--test', dbus_docs],
depends : dbus_programs)
test('check-version-history',
check_version_history_py,
suite : 'dist',
args : source_xml_files)
endif
update_man_rules = custom_target(
'update-man-rules-impl',
output : 'update-man-rules',
command : [update_man_rules_py,
'@0@/man/*.xml'.format(project_source_root),
'@0@/rules/meson.build'.format(meson.current_source_dir())],
depends : man_page_depends)