From d25161f1b1be4b25a8bf774a3b6d2963ff65da1e Mon Sep 17 00:00:00 2001 From: Emil Velikov Date: Thu, 22 Aug 2024 17:04:21 +0100 Subject: [PATCH] meson: add support for building the manpages Not as brief as the pipeline and pattern matching that (auto)make can do, although it's fully functional ;-) v2: - move man/meson.build - move script under scripts/ Signed-off-by: Emil Velikov --- Makefile.am | 2 ++ man/meson.build | 56 ++++++++++++++++++++++++++++++++++++++++++ meson.build | 10 ++++++++ meson_options.txt | 7 ++++++ scripts/build-scdoc.sh | 9 +++++++ 5 files changed, 84 insertions(+) create mode 100644 man/meson.build create mode 100644 scripts/build-scdoc.sh diff --git a/Makefile.am b/Makefile.am index f72b3e9d..c0fe198e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -17,9 +17,11 @@ export GCC_COLORS # meson bigs EXTRA_DIST += \ + man/meson.build \ meson.build \ meson_options.txt \ testsuite/meson.build \ + scripts/build-scdoc.sh \ scripts/kmod-symlink.sh AM_CPPFLAGS = \ diff --git a/man/meson.build b/man/meson.build new file mode 100644 index 00000000..37da7798 --- /dev/null +++ b/man/meson.build @@ -0,0 +1,56 @@ +scdoc = find_program('scdoc') + +_man_pages = [ + [ '5', 'depmod.d' ], + [ '5', 'modprobe.d' ], + [ '5', 'modules.dep' ], + [ '8', 'depmod' ], + [ '8', 'insmod' ], + [ '8', 'kmod' ], + [ '8', 'lsmod' ], + [ '8', 'modinfo' ], + [ '8', 'modprobe' ], + [ '8', 'rmmod' ], +] +foreach tuple : _man_pages + section = tuple[0] + man = tuple[1] + + custom_target( + 'man_@0@_@1@'.format(section, man), + command : [ + build_scdoc, + scdoc, + '@INPUT@', + 's|@SYSCONFDIR@|@0@|g;'.format(sysconfdir) + + 's|@DISTCONFDIR@|@0@|g;'.format(distconfdir) + + 's|@MODULE_DIRECTORY@|@0@|g;'.format(moduledir), + ], + input : '@0@.@1@.scd'.format(man, section), + output : '@0@.@1@'.format(man, section), + capture : true, + build_by_default : get_option('manpages'), + install : true, + install_dir : join_paths(get_option('mandir'), 'man@0@'.format(section)) + ) +endforeach + +_man_aliases = [ + ['5', 'modules.dep.bin', 'modules.dep.5' ], +] + +foreach tuple : _man_aliases + section = tuple[0] + man = tuple[1] + dest = tuple[2] + + custom_target( + 'man_@0@_@1@'.format(section, man), + command : ['echo', '.so @0@'.format(dest)], + output : '@0@.@1@'.format(man, section), + capture : true, + build_by_default : get_option('manpages'), + install : true, + install_dir : join_paths(get_option('mandir'), 'man@0@'.format(section)) + ) +endforeach diff --git a/meson.build b/meson.build index e52c7b4f..b8de6259 100644 --- a/meson.build +++ b/meson.build @@ -408,6 +408,15 @@ if get_option('build-tests') subdir('testsuite') endif +# ------------------------------------------------------------------ +# documentation +# ------------------------------------------------------------------ + +if get_option('manpages') + build_scdoc = find_program('scripts/build-scdoc.sh') + subdir('man') +endif + summary({ 'moduledir' : moduledir, 'prefix' : get_option('prefix'), @@ -423,6 +432,7 @@ summary({ 'logging' : get_option('logging'), 'debug' : get_option('debug-messages'), 'build-tests' : get_option('build-tests'), + 'man' : get_option('manpages'), }, section : 'Options') summary({ diff --git a/meson_options.txt b/meson_options.txt index 848052ae..538bef68 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -78,3 +78,10 @@ option( value : false, description : 'Always build the test suite. Default: false', ) + +option( + 'manpages', + type : 'boolean', + value : true, + description : 'Build the manpages. Default: true', +) diff --git a/scripts/build-scdoc.sh b/scripts/build-scdoc.sh new file mode 100644 index 00000000..66aa673d --- /dev/null +++ b/scripts/build-scdoc.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +set -euo pipefail + +SCDOC=$1 +INPUT=$2 +SED_PATTERN=$3 + +cat $INPUT | sed -e $SED_PATTERN | $SCDOC