xref: /freebsd-src/sys/contrib/openzfs/scripts/mancheck.sh (revision 2a58b312b62f908ec92311d1bd8536dbaeb8e55b)
116038816SMartin Matuska#!/bin/sh
216038816SMartin Matuska#
316038816SMartin Matuska# Permission to use, copy, modify, and/or distribute this software for
416038816SMartin Matuska# any purpose with or without fee is hereby granted.
516038816SMartin Matuska#
616038816SMartin Matuska# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
716038816SMartin Matuska# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
816038816SMartin Matuska# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
916038816SMartin Matuska# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1016038816SMartin Matuska# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
1116038816SMartin Matuska# AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
1216038816SMartin Matuska# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1316038816SMartin Matuska#
14681ce946SMartin Matuska# shellcheck disable=SC2086
1581b22a98SMartin Matuska
1681b22a98SMartin Matuskatrap 'rm -f "$stdout_file" "$stderr_file" "$result_file"' EXIT
1716038816SMartin Matuska
1816038816SMartin Matuskaif [ "$#" -eq 0 ]; then
1916038816SMartin Matuska    echo "Usage: $0 manpage-directory..."
2016038816SMartin Matuska    exit 1
2116038816SMartin Matuskafi
2216038816SMartin Matuska
2316038816SMartin Matuskaif ! command -v mandoc > /dev/null; then
2416038816SMartin Matuska    echo "skipping mancheck because mandoc is not installed"
2516038816SMartin Matuska    exit 0
2616038816SMartin Matuskafi
2716038816SMartin Matuska
2816038816SMartin MatuskaIFS="
2916038816SMartin Matuska"
30*2a58b312SMartin Matuskafiles="$(find "$@" -type f -name '*[1-9]*' -not -name '.*')" || exit 1
3116038816SMartin Matuska
3216038816SMartin Matuskaadd_excl="$(awk '
3316038816SMartin Matuska    /^.\\" lint-ok:/ {
3416038816SMartin Matuska        print "-e"
3516038816SMartin Matuska        $1 = "mandoc:"
3616038816SMartin Matuska        $2 = FILENAME ":[[:digit:]]+:[[:digit:]]+:"
3716038816SMartin Matuska        print
3816038816SMartin Matuska    }' $files)"
3916038816SMartin Matuska
4016038816SMartin Matuska# Redirect to file instead of 2>&1ing because mandoc flushes inconsistently(?) which tears lines
4116038816SMartin Matuska# https://github.com/openzfs/zfs/pull/12129/checks?check_run_id=2701608671#step:5:3
4281b22a98SMartin Matuskastdout_file="$(mktemp)"
4381b22a98SMartin Matuskastderr_file="$(mktemp)"
4481b22a98SMartin Matuskamandoc -Tlint $files 1>"$stdout_file" 2>"$stderr_file"
4581b22a98SMartin Matuskaresult_file="$(mktemp)"
4681b22a98SMartin Matuskagrep -vhE -e 'mandoc: outdated mandoc.db' -e 'STYLE: referenced manual not found' $add_excl "$stdout_file" "$stderr_file" > "$result_file"
4781b22a98SMartin Matuska
4881b22a98SMartin Matuskaif [ -s "$result_file" ]; then
4981b22a98SMartin Matuska    cat "$result_file"
5081b22a98SMartin Matuska    exit 1
5181b22a98SMartin Matuskaelse
5281b22a98SMartin Matuska    echo "no errors found"
5381b22a98SMartin Matuskafi
54