# SPDX-License-Identifier: LGPL-2.1 # # Copyright (c) 2023 Daniel Wagner, SUSE LLC # input text file: man page section sources = { 'libtracecmd-files.txt': '3', 'libtracecmd-instances.txt': '3', 'libtracecmd-iterate.txt': '3', 'libtracecmd-log.txt': '3', 'libtracecmd-maps.txt': '3', 'libtracecmd-peer.txt': '3', 'libtracecmd-record.txt': '3', 'libtracecmd-timestamp.txt': '3', 'libtracecmd.txt': '3', } confdir = meson.current_source_dir() + '/../' top_source_dir = meson.current_source_dir() + '/../../' # # For asciidoc ... # -7.1.2, no extra settings are needed. # 8.0-, set ASCIIDOC8. # # # For docbook-xsl ... # -1.68.1, set ASCIIDOC_NO_ROFF? (based on changelog from 1.73.0) # 1.69.0, no extra settings are needed? # 1.69.1-1.71.0, set DOCBOOK_SUPPRESS_SP? # 1.71.1, no extra settings are needed? # 1.72.0, set DOCBOOK_XSL_172. # 1.73.0-, set ASCIIDOC_NO_ROFF # # # If you had been using DOCBOOK_XSL_172 in an attempt to get rid # of 'the ".ft C" problem' in your generated manpages, and you # instead ended up with weird characters around callouts, try # using ASCIIDOC_NO_ROFF instead (it works fine with ASCIIDOC8). # if get_option('asciidoctor') asciidoc = find_program('asciidoctor') asciidoc_extra = ['-a', 'compat-mode'] asciidoc_extra += ['-I.'] asciidoc_extra += ['-r', 'asciidoctor-extensions'] asciidoc_extra += ['-a', 'mansource=libtraceevent'] asciidoc_extra += ['-a', 'manmanual="libtraceevent Manual"'] asciidoc_html = 'xhtml5' else asciidoc = find_program('asciidoc') asciidoc_extra = ['--unsafe'] asciidoc_extra += ['-f', confdir + 'asciidoc.conf'] asciidoc_html = 'xhtml11' r = run_command(asciidoc, '--version', check: true) v = r.stdout().strip() if v.version_compare('>=8.0') asciidoc_extra += ['-a', 'asciidoc7compatible'] endif endif manpage_xsl = confdir + 'manpage-normal.xsl' if get_option('docbook-xls-172') asciidoc_extra += ['-a', 'libtraceevent-asciidoc-no-roff'] manpage_xsl = confdir + 'manpage-1.72.xsl' elif get_option('asciidoc-no-roff') # docbook-xsl after 1.72 needs the regular XSL, but will not # pass-thru raw roff codes from asciidoc.conf, so turn them off. asciidoc_extra += ['-a', 'libtraceevent-asciidoc-no-roff'] endif xmlto = find_program('xmlto') xmlto_extra = [] if get_option('man-bold-literal') xmlto_extra += ['-m ', confdir + 'manpage-bold-literal.xsl'] endif if get_option('docbook-suppress-sp') xmlto_extra += ['-m ', confdir + 'manpage-suppress-sp.xsl'] endif check_doc = custom_target( 'check-doc', output: 'dummy', command : [ top_source_dir + 'check-manpages.sh', meson.current_source_dir()]) gen = generator( asciidoc, output: '@BASENAME@.xml', arguments: [ '-b', 'docbook', '-d', 'manpage', '-a', 'libtraceevent_version=' + meson.project_version(), '-o', '@OUTPUT@'] + asciidoc_extra + ['@INPUT@']) man = [] html = [] foreach txt, section : sources # build man page(s) xml = gen.process(txt) man += custom_target( txt.underscorify() + '_man', input: xml, output: '@BASENAME@.' + section, depends: check_doc, command: [ xmlto, '-m', manpage_xsl, 'man', '-o', '@OUTPUT@'] + xmlto_extra + ['@INPUT@']) # build html pages html += custom_target( txt.underscorify() + '_html', input: txt, output: '@BASENAME@.html', depends: check_doc, command: [ asciidoc, '-b', asciidoc_html, '-d', 'manpage', '-a', 'libtraceevent_version=' + meson.project_version(), '-o', '@OUTPUT@'] + asciidoc_extra + ['@INPUT@']) endforeach # Install path workaround because: # # - xmlto might generate more than one file and we would to tell meson # about those output files. We could figure out which files are generated # (see sed match in check-manpages.sh). # # - The man page generation puts all the generated files under sub dirs # and it's not obvious how to tell Meson it should not do this without # causing the install step to fail (confusion where the generated files # are stored) # # - The documentation build is not part of the 'build' target. The user # has explicitly to trigger the doc build. Hence the documentation is # not added to the 'install' target. # # Thus just use a plain old shell script to move the generated files to the # right location. conf = configuration_data() conf.set('SRCDIR', meson.current_build_dir()) conf.set('MANDIR', mandir) conf.set('HTMLDIR', htmldir) configure_file( input: 'install-docs.sh.in', output: 'install-docs.sh', configuration: conf) meson.add_install_script( join_paths(meson.current_build_dir(), 'install-docs.sh'))