mirror of
https://github.com/systemd/systemd.git
synced 2024-12-01 06:13:38 +08:00
6939fb9eb4
https://github.com/mesonbuild/meson/issues/1644 was resolved in 0.42:
be4428005d
,
but still no-go.
210 lines
7.4 KiB
Meson
210 lines
7.4 KiB
Meson
# SPDX-License-Identifier: LGPL-2.1+
|
|
|
|
# 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 = configure_file(
|
|
input : 'custom-entities.ent.in',
|
|
output : 'custom-entities.ent',
|
|
configuration : conf)
|
|
|
|
man_pages = []
|
|
html_pages = []
|
|
source_xml_files = []
|
|
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@'],
|
|
depend_files : custom_entities_ent,
|
|
install : want_man,
|
|
install_dir : mandirn)
|
|
man_pages += p1
|
|
|
|
p2 = []
|
|
foreach htmlalias : htmlaliases
|
|
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
|
|
endforeach
|
|
|
|
p3 = custom_target(
|
|
html,
|
|
input : xml,
|
|
output : html,
|
|
command : xslt_cmd + [custom_html_xsl, '@INPUT@'],
|
|
depend_files : custom_entities_ent,
|
|
depends : p2,
|
|
install : want_html,
|
|
install_dir : join_paths(docdir, 'html'))
|
|
html_pages += p3
|
|
|
|
source_xml_files += files(tuple[0] + '.xml')
|
|
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 : source_xml_files,
|
|
output : 'systemd.directives.xml',
|
|
command : [make_directive_index_py, '@OUTPUT@'] + source_xml_files)
|
|
|
|
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@'],
|
|
depend_files : custom_entities_ent,
|
|
depends : 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'])
|
|
|
|
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')])
|
|
|
|
############################################################
|
|
|
|
if git.found()
|
|
custom_target(
|
|
'update-man-rules',
|
|
output : 'update-man-rules',
|
|
# slightly strange syntax because of
|
|
# https://github.com/mesonbuild/meson/issues/1643
|
|
# and https://github.com/mesonbuild/meson/issues/1512
|
|
command : ['sh', '-c',
|
|
'cd @0@ && '.format(meson.build_root()) +
|
|
'python3 @0@/tools/make-man-rules.py `git ls-files ":/man/*.xml"` >t && '.format(meson.source_root()) +
|
|
'mv t @0@/rules/meson.build'.format(meson.current_source_dir())],
|
|
depend_files : custom_entities_ent)
|
|
endif
|