summaryrefslogtreecommitdiffstats
path: root/src/pmdk/utils/check-manpage
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 18:45:59 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 18:45:59 +0000
commit19fcec84d8d7d21e796c7624e521b60d28ee21ed (patch)
tree42d26aa27d1e3f7c0b8bd3fd14e7d7082f5008dc /src/pmdk/utils/check-manpage
parentInitial commit. (diff)
downloadceph-19fcec84d8d7d21e796c7624e521b60d28ee21ed.tar.xz
ceph-19fcec84d8d7d21e796c7624e521b60d28ee21ed.zip
Adding upstream version 16.2.11+ds.upstream/16.2.11+dsupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rwxr-xr-xsrc/pmdk/utils/check-manpage62
-rwxr-xr-xsrc/pmdk/utils/check-manpages16
2 files changed, 78 insertions, 0 deletions
diff --git a/src/pmdk/utils/check-manpage b/src/pmdk/utils/check-manpage
new file mode 100755
index 000000000..d0c0d4d2e
--- /dev/null
+++ b/src/pmdk/utils/check-manpage
@@ -0,0 +1,62 @@
+#!/bin/bash
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright 2019, Intel Corporation
+
+# check-manpage -- a tool to check a single man page against errors
+#
+# While it can handle multiple files, it's recommended to use
+# check-manpages instead.
+set -e
+
+check_link()
+{
+ [ $(wc -l <"$file") = 1 ] ||
+ { echo ".so link isn't the only line" && return; }
+ link=$(cat "$file")
+ link=${link#.so }
+ [ "${link##*/}" = "$link" ] ||
+ grep -q '^\.so man\([0-9]\)/[a-z0-9+_-]\+\.\1$' "$file" ||
+ { echo ".so link directory is not matching manX" && return; }
+ [ -e "${link##*/}" ] ||
+ { echo ".so link target doesn't exist: ${link##*/}" && return; }
+}
+
+for m in "$@"; do
+ dir="$(dirname $m)"
+ file="$(basename $m)"
+ [ -n "$dir" ] && pushd "$dir" >/dev/null
+
+ if grep -q '^\.so' "$file"; then
+ err=$(check_link)
+ [ -z "$err" ] || {
+ echo >&2 "$file: $err"
+ FAILED=1
+ }
+ popd >/dev/null 2>/dev/null
+ continue
+ fi
+
+ # man can emit warnings and errors. Even non-fatal errors are normally
+ # suppressed if a pager is in use (ie, all interactive usage). Common
+ # messages include an unknown macro, an unbreakable line, etc.
+ err=$(MANWIDTH=80 man --warnings -E UTF-8 -l -Tutf8 -Z "$file" 2>&1 >/dev/null|
+ grep -v 'cannot adjust line' || true)
+ [ -z "$err" ] || {
+ echo >&2 "$file: $err"
+ FAILED=1
+ }
+
+ # If a "NAME" section exists, call lexgrog to see if it's properly
+ # formatted.
+ if grep -q '^\.SH NAME' "$file"; then
+ if ! lexgrog "$file" >/dev/null; then
+ # lexgrog doesn't give any interesting messages.
+ echo 2>&1 "lexgrog failed on $file"
+ FAILED=1
+ fi
+ fi
+
+ popd >/dev/null 2>/dev/null
+done
+
+exit $FAILED
diff --git a/src/pmdk/utils/check-manpages b/src/pmdk/utils/check-manpages
new file mode 100755
index 000000000..415db124c
--- /dev/null
+++ b/src/pmdk/utils/check-manpages
@@ -0,0 +1,16 @@
+#!/bin/bash
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright 2019-2020, Intel Corporation
+
+# check-manpages -- a tool to test against some manpage errors
+
+MANS="$*"
+[ -n "$MANS" ] || MANS="$(find doc -name '*.1' -o -name '*.3' -o -name '*.5' -o -name '*.7')"
+[ -n "$MANS" ] || { echo >&2 "No man pages given, and none found in doc/"; exit 1;}
+
+for page in $MANS;do
+ if [ "${page/rpmem/}" != "$page" ] && [ "$BUILD_RPMEM" != "y" ]; then
+ continue
+ fi
+ echo $page
+done | xargs -P `nproc` -n1 -- utils/check-manpage