X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/575e7d2bc9e8bee61114431c4dc7fb6e9087b667..68fbbcad880d3f246c858838c11104c38f3cf76e:/docs/contrib/build_nmh diff --git a/docs/contrib/build_nmh b/docs/contrib/build_nmh index 10ad7df6..90e733a5 100755 --- a/docs/contrib/build_nmh +++ b/docs/contrib/build_nmh @@ -8,6 +8,10 @@ # * Unless the -y option is provided, this script then interactively # walks you through confirmation of common configuration settings. # +# This file can be downloaded and immediately run using, e.g., +# wget http://git.savannah.gnu.org/cgit/nmh.git/plain/docs/contrib/build_nmh +# sh build_nmh +# # Typical usage: # The first time you invoke this script, use the -i option to install # nmh in the specified location. The script will walk you through the @@ -34,14 +38,11 @@ # 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 , only if downloading] @@ -56,6 +57,9 @@ usage="usage: $0 #### Exit with error message. die() { + status=1 + exec 1>&3 3>&- 2>&4 4>&- + cat "$tmpfile" 1>&2 echo "$0: $*" 1>&2 exit 1 } @@ -72,10 +76,22 @@ finddir() { esac } +#### 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 -trap 'rm -f "$tmpfile"' EXIT + #### #### Interpret command arguments. @@ -109,7 +125,7 @@ shift `expr $OPTIND - 1` #### 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 echo "$invocation" @@ -121,15 +137,17 @@ if grep 'the authors of nmh' COPYRIGHT >/dev/null 2>&1; then : 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" - if "$gitdir"/git clone $git_opts "git://$gitrepo/nmh.git"; then - cd nmh || die "failed to clone nmh" - git log --max-count=1 --pretty-format:%H + 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' fi @@ -142,16 +160,17 @@ else snapshot="$repo/$tarball" if [ "`finddir wget`" ]; then [ "$verbose" -eq 0 ] && wget_opts='--quiet' - wget --output-document - $wget_opts "$snapshot" | tar xzf - + wget --output-document - $wget_opts "$snapshot" 2>&3 | gzip -d | tar xf - elif [ "`finddir curl`" ]; then - [ "$verbose" -eq 0 ] && curl_opts=--silent - curl --location $curl_opts "$snapshot" | tar xzf - + [ "$verbose" -eq 0 ] && curl_opts='--silent --show-error' + 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 - 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 @@ -289,14 +308,14 @@ if [ $install -ge 1 -a "$LOGNAME" != root ]; then fi fi -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. #### if [ -f Makefile ]; then - [ $verbose -ge 1 ] && echo cleaning . . . + [ $verbose -ge 1 ] && echo cleaning . . . >&3 if [ $superclean -ge 1 ]; then make superclean >/dev/null else @@ -305,7 +324,7 @@ if [ -f Makefile ]; then fi if [ ! -f configure -o ! -f Makefile.in ]; then - [ $verbose -ge 1 ] && echo autoconfiguring . . . + [ $verbose -ge 1 ] && echo autoconfiguring . . . >&3 ./autogen.sh [ $? -ne 0 ] && die "autogen failed, see MACHINES file for autoconf, @@ -316,7 +335,7 @@ fi #### #### Build. #### -[ $verbose -ge 1 ] && echo configuring . . . +[ $verbose -ge 1 ] && echo configuring . . . >&3 if [ -z "$CFLAGS" ]; then #### Only use these flags with gcc. if cc -dM -E - &1 | grep __GNUC__ >/dev/null; then @@ -331,7 +350,7 @@ printf '\n./configure %s\n' "$config_opts${smtpservers:+ $smtpservers}" status=$? if [ $status -eq 0 ]; then - [ $verbose -ge 1 ] && echo building . . . + [ $verbose -ge 1 ] && echo building . . . >&3 make status=$? @@ -352,8 +371,9 @@ if [ $status -eq 0 ]; then export DISTCHECK_CONFIGURE_FLAGS fi - [ $verbose -ge 1 ] && echo testing . . . - checkoutput=`make $check AM_COLOR_TESTS=always` + [ $verbose -ge 1 ] && echo testing . . . >&3 + [ "${TERM:-dumb}" = dumb ] && color=no || color=always + checkoutput=`make $check AM_COLOR_TESTS=$color` status=$? tests_summary=`echo "$checkoutput" | grep tests` @@ -372,18 +392,20 @@ if [ $status -eq 0 ]; then if [ $status -eq 0 ]; then if [ $install -ge 1 ]; then - [ $verbose -ge 1 ] && echo installing . . . + [ $verbose -ge 1 ] && echo installing . . . >&3 ($installpriv make install) >/dev/null status=$? fi if [ $status -eq 0 -a $build_rpm -ge 1 ]; then - [ $verbose -ge 1 ] && echo building rpm . . . + [ $verbose -ge 1 ] && echo building rpm . . . >&3 make rpm >/dev/null status=$? fi fi fi +else + echo "see nmh MACHINES file for build dependences" fi #### @@ -391,21 +413,22 @@ fi #### #### Disable output redirection (and flush) so that we can grep. -exec 1>&3 3>&- +exec 1>&3 3>&- 2>&4 4>&- 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 -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 fi exit $status