pkgsrc/mk/check/check-subr.sh

98 lines
2.4 KiB
Bash

# $NetBSD: check-subr.sh,v 1.5 2007/01/02 17:58:11 rillig Exp $
#
# This file contains shell functions that are used by the various shell
# programs that check things in pkgsrc. All these programs must be
# called with the following environment variables set:
#
# SKIP_FILTER
# A shell expression of the form
#
# */pattern.*) continue;; *.txt) continue;;
#
# that can be passed to eval(1) in order to skip the files
# that are chosen by the respective *_SKIP variable in
# make(1).
#
# Implementation notes:
#
# 1. The SKIP_FILTER variable should only be used in the following
# pattern, usually inside a "for" or "while" loop.
#
# skip=no
# eval "case \"\$fname\" in $SKIP_FILTER *.orig) skip=yes;; esac"
# [ $skip = no ] || continue
#
# 2. The programs using this file are run with the tools wrapper
# directory in the PATH, so they call the utilities by their base names.
# They may also assume to be interpreted by a POSIX-conforming shell, in
# particular _not_ by the Solaris /bin/sh.
#
# All programs that check something are very strict.
set -eu
cs_exitcode=0
# usage: cs_setprogname "progname"
#
# This function sets the variable that will later be used in diagnostic
# messages to identify the program that generated the message.
cs_setprogname() {
cs_progname="${1##*/}"
}
# Each diagnostic message can be preceded by a heading to better identify
# messages that belong together. The heading will only be printed if it
# differs from the last one.
cs_last_heading=""
# usage: cs_error_heading "new heading"
cs_error_heading() {
if [ x"$1" != x"$cs_last_heading" ]; then
cs_last_heading="$1"
cs_error_msg "=> $1"
fi
}
# usage: cs_warning_heading "new heading"
cs_warning_heading() {
if [ x"$1" != x"$cs_last_heading" ]; then
cs_last_heading="$1"
cs_warning_msg "=> $1"
fi
}
# usage: cs_error_msg "error message"
cs_error_msg() {
echo "ERROR: [$cs_progname] $*" 1>&2
cs_exitcode=1
}
# usage: cs_warning_msg "warning message"
cs_warning_msg() {
echo "WARNING: [$cs_progname] $*" 1>&2
}
cs_hline=\
"==========================================================================="
# usage: cs_explain <<EOF
cs_explain() {
{ echo ""
echo "Explanation:"
echo "$cs_hline"
cat
echo "$cs_hline"
echo ""
} 1>&2
}
# usage: cs_exit
#
# At the end of the program, cs_exit should be called to return the
# appropriate exit status to the calling process. It is non-zero when
# any error messages have been printed and zero otherwise.
cs_exit() {
exit "$cs_exitcode"
}