aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am7
-rw-r--r--scripts/Makefile.am3
-rwxr-xr-xscripts/mancheck.sh43
3 files changed, 46 insertions, 7 deletions
diff --git a/Makefile.am b/Makefile.am
index 8e4fffc5d793..4e7e29589fc0 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -137,12 +137,7 @@ storeabi: lib
PHONY += mancheck
mancheck:
- @if type mandoc > /dev/null 2>&1; then \
- find ${top_srcdir}/man ${top_srcdir}/tests/test-runner/man -type f -name '*[1-9]*' \
- -exec mandoc -Tlint -Werror {} \+; \
- else \
- echo "skipping mancheck because mandoc is not installed"; \
- fi
+ ${top_srcdir}/scripts/mancheck.sh ${top_srcdir}/man ${top_srcdir}/tests/test-runner/man
if BUILD_LINUX
stat_fmt = -c '%A %n'
diff --git a/scripts/Makefile.am b/scripts/Makefile.am
index f338cdc39195..6c59fd7d4faf 100644
--- a/scripts/Makefile.am
+++ b/scripts/Makefile.am
@@ -17,7 +17,8 @@ EXTRA_SCRIPTS = \
kmodtool \
make_gitrev.sh \
man-dates.sh \
- paxcheck.sh
+ paxcheck.sh \
+ mancheck.sh
EXTRA_DIST = \
cstyle.pl \
diff --git a/scripts/mancheck.sh b/scripts/mancheck.sh
new file mode 100755
index 000000000000..a5b8b0d0a6e7
--- /dev/null
+++ b/scripts/mancheck.sh
@@ -0,0 +1,43 @@
+#!/bin/sh
+#
+# Permission to use, copy, modify, and/or distribute this software for
+# any purpose with or without fee is hereby granted.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
+# AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+# shellcheck disable=SC2086
+
+if [ "$#" -eq 0 ]; then
+ echo "Usage: $0 manpage-directory..."
+ exit 1
+fi
+
+if ! command -v mandoc > /dev/null; then
+ echo "skipping mancheck because mandoc is not installed"
+ exit 0
+fi
+
+IFS="
+"
+
+files="$(find "$@" -type f -name '*[1-9]*' ! -name '*module-param*' ! -name 'zpool-features*' ! -name 'zfs-mount-generator*')" || exit 1
+
+add_excl="$(awk '
+ /^.\\" lint-ok:/ {
+ print "-e"
+ $1 = "mandoc:"
+ $2 = FILENAME ":[[:digit:]]+:[[:digit:]]+:"
+ print
+ }' $files)"
+
+# Redirect to file instead of 2>&1ing because mandoc flushes inconsistently(?) which tears lines
+# https://github.com/openzfs/zfs/pull/12129/checks?check_run_id=2701608671#step:5:3
+etmp="$(mktemp)"
+! { mandoc -Tlint $files 2>"$etmp"; cat "$etmp"; rm -f "$etmp"; } |
+ grep -vE -e 'mandoc: outdated mandoc.db' -e 'STYLE: referenced manual not found' $add_excl >&2