From 25206a60015ff2ef3f3c60b7f50ca573e7fa6d44 Mon Sep 17 00:00:00 2001 From: Emil Velikov Date: Mon, 2 Sep 2024 18:58:35 +0100 Subject: [PATCH] meson: allow 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 Link: https://github.com/kmod-project/kmod/pull/86 Signed-off-by: Lucas De Marchi --- 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 74b11303..1a518585 100644 --- a/Makefile.am +++ b/Makefile.am @@ -17,9 +17,11 @@ export GCC_COLORS # meson bits 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..f2c2c8d2 --- /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 63002dc7..3aee0eb4 100644 --- a/meson.build +++ b/meson.build @@ -407,6 +407,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'), @@ -422,6 +431,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 f8607ece..7de6258e 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 -- 2.47.3