1) Display failure messages that were hidden.
2) Display location of log file at end, if not in current directory,
the build failed, or verbose was enabled.
3) Replaced use of showbuildenv with less invasive platform info.
4) Don't colorize tests summary if TERM is unset or dumb.
# see docs/README.developers
# -r to build rpm
#
# see docs/README.developers
# -r to build rpm
#
-# On Fedora, at least these rpms must be installed:
-# gdbm-devel
-# ncurses-devel
-# cyrus-sasl-devel, if using sasl
-# openssl-devel, if using TLS
-# libcurl-devel, if using oauth
-# autoconf and automake, with -s (see docs/README.developers for versions)
-# rpm-build, with -r
+# To disable colorization of the test summary, either unset the TERM
+# environment variable or set it to dumb, e.g., TERM=dumb build_nmh.
+#
+# See the nmh MACHINES file for build prerequisites. In addition, the rpmbuild
+# is required to be available if the -r option is used.
usage="usage: $0
[-b <branch>, only if downloading]
usage="usage: $0
[-b <branch>, only if downloading]
#### Exit with error message.
die() {
#### Exit with error message.
die() {
+ status=1
+ exec 1>&3 3>&- 2>&4 4>&-
+ cat "$tmpfile" 1>&2
echo "$0: $*" 1>&2
exit 1
}
echo "$0: $*" 1>&2
exit 1
}
+#### Make sure user sees error output even on early termination. Assumes
+#### that called programs exit with non-zero status when terminated.
+cleanup() {
+ if [ $status -eq 0 ]; then
+ rm -f "$tmpfile"
+ else
+ [ $logfile = - ] && cat "$tmpfile" 1>&3 || mv "$tmpfile" "$logfile"
+ fi
+}
+trap cleanup EXIT
+
+directory=
gitrepo=git.savannah.nongnu.org
invocation="$0 $*"
tmpfile=/tmp/build_nmh-$$.log
gitrepo=git.savannah.nongnu.org
invocation="$0 $*"
tmpfile=/tmp/build_nmh-$$.log
-trap 'rm -f "$tmpfile"' EXIT
####
#### Interpret command arguments.
####
#### Interpret command arguments.
#### Redirect all output to tmp file. Then at end of script, copy
#### it to either logfile or stdout. Also, grep it for errors and
#### warnings.
#### Redirect all output to tmp file. Then at end of script, copy
#### it to either logfile or stdout. Also, grep it for errors and
#### warnings.
-exec 3>&1 >"$tmpfile" 2>&1
+exec 3>&1 4>&2 >"$tmpfile" 2>&1
:
else
#### Download sources from repo.
:
else
#### Download sources from repo.
+ [ $verbose -ge 1 ] && echo downloading . . . >&3
gitdir=`finddir git`
if [ "$gitdir" ]; then
#### Use git repo.
[ "$verbose" -eq 0 ] && git_opts=--quiet
[ "$branch" == master ] ||
git_opts="${git_opts:+$git_opts }--branch $branch"
gitdir=`finddir git`
if [ "$gitdir" ]; then
#### Use git repo.
[ "$verbose" -eq 0 ] && git_opts=--quiet
[ "$branch" == master ] ||
git_opts="${git_opts:+$git_opts }--branch $branch"
- if "$gitdir"/git clone --depth 1 $git_opts "git://$gitrepo/nmh.git"; then
- cd nmh || die "failed to clone nmh"
+ if "$gitdir"/git clone --depth 1 $git_opts "git://$gitrepo/nmh.git" >&3; then
+ directory=nmh
+ cd "$directory" || die "failed to clone $directory"
printf "commit %s\n" `git log --max-count=1 --pretty=format:%H`
else
die 'failed to clone git repo'
printf "commit %s\n" `git log --max-count=1 --pretty=format:%H`
else
die 'failed to clone git repo'
snapshot="$repo/$tarball"
if [ "`finddir wget`" ]; then
[ "$verbose" -eq 0 ] && wget_opts='--quiet'
snapshot="$repo/$tarball"
if [ "`finddir wget`" ]; then
[ "$verbose" -eq 0 ] && wget_opts='--quiet'
- wget --output-document - $wget_opts "$snapshot" | gzip -d | tar xf -
+ wget --output-document - $wget_opts "$snapshot" 2>&3 | gzip -d | tar xf -
elif [ "`finddir curl`" ]; then
[ "$verbose" -eq 0 ] && curl_opts='--silent --show-error'
elif [ "`finddir curl`" ]; then
[ "$verbose" -eq 0 ] && curl_opts='--silent --show-error'
- curl --location $curl_opts "$snapshot" | gzip -d | tar xf -
+ curl --location $curl_opts "$snapshot" 2>&3 | gzip -d | tar xf -
else
die 'unable to find program to download nmh sources'
fi
if [ -d nmh-"$branch" ]; then
else
die 'unable to find program to download nmh sources'
fi
if [ -d nmh-"$branch" ]; then
- cd nmh-"$branch" || die "failed to download and extract nmh-$branch"
+ directory=nmh-"$branch"
+ cd "$directory" || die "failed to download and extract $directory"
else
die "failed to download nmh-$branch sources"
fi
else
die "failed to download nmh-$branch sources"
fi
-[ -x tools/showbuildenv ] && tools/showbuildenv | grep -Ev 'PID=|SHLVL'
-
+printf '\n%s %s %s %s\n\n' "`uname -m`" "`uname -s`" "`uname -r`" "`uname -v`"
+[ -f /etc/os-release ] && printf '%s\n\n' "`cat /etc/os-release`"
####
#### Set up with autoconfig if necessary.
####
#### Set up with autoconfig if necessary.
fi
[ $verbose -ge 1 ] && echo testing . . . >&3
fi
[ $verbose -ge 1 ] && echo testing . . . >&3
- checkoutput=`make $check AM_COLOR_TESTS=always`
+ [ "${TERM:-dumb}" = dumb ] && color=no || color=always
+ checkoutput=`make $check AM_COLOR_TESTS=$color`
status=$?
tests_summary=`echo "$checkoutput" | grep tests`
status=$?
tests_summary=`echo "$checkoutput" | grep tests`
+else
+ echo "see nmh MACHINES file for build dependences"
####
#### Disable output redirection (and flush) so that we can grep.
####
#### Disable output redirection (and flush) so that we can grep.
+exec 1>&3 3>&- 2>&4 4>&-
if [ "$logfile" != - ]; then
rm -f "$logfile"
exec 3>&1 >"$logfile" 2>&1
fi
if [ "$logfile" != - ]; then
rm -f "$logfile"
exec 3>&1 >"$logfile" 2>&1
fi
-cat "$tmpfile"
-grep -E 'Error|warn' "$tmpfile"
+[ -f "$tmpfile" ] && cat "$tmpfile"
+[ -f "$tmpfile" ] && grep -E 'Error|warn' "$tmpfile"
-if [ $status -eq 0 ]; then
- [ $verbose -ge 1 ] && echo build completed successfully >&3
-else
- echo build failed!
- [ "$logfile" = - ] || echo "build failed, build log is in $logfile" >&3
+#### Put message on stdout, and in log if different.
+if [ $status -ne 0 -o $verbose -ge 1 -o "$directory" ]; then
+ [ $status -eq 0 ] && indication=succeeded || indication=failed
+ message="build $indication, build log is in ${directory:+$directory/}$logfile"
+ echo "$message"
+ [ "$logfile" = - ] || echo "$message" >&3