diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2022-02-27 21:32:56 +0200 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2022-02-27 21:32:56 +0200 |
commit | fb39babe890863fcdd6c290af8e19759387fe04b (patch) | |
tree | a5824219e9ec8390be3a6968373934b89a7adc21 /gawkbug.in | |
parent | 6083e965fac1b272f9ccb491902b24a24ea14122 (diff) | |
download | egawk-fb39babe890863fcdd6c290af8e19759387fe04b.tar.gz egawk-fb39babe890863fcdd6c290af8e19759387fe04b.tar.bz2 egawk-fb39babe890863fcdd6c290af8e19759387fe04b.zip |
Add gawkbug script and man page.
Diffstat (limited to 'gawkbug.in')
-rw-r--r-- | gawkbug.in | 277 |
1 files changed, 277 insertions, 0 deletions
diff --git a/gawkbug.in b/gawkbug.in new file mode 100644 index 00000000..7e13ec5e --- /dev/null +++ b/gawkbug.in @@ -0,0 +1,277 @@ +#!/bin/sh - +# +# gawkbug - create a bug report and mail it to the bug address +# +# All mail defaults to bug-gawk@gnu.org. Unlike the original bashbug +# script, we don't differentiate on the release status. +# +# Copyright (C) 1996-2022 Free Software Foundation, Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# +# configuration section: +# these variables are filled in by the make target in Makefile +# +MACHINE="@host_cpu@" +OS="@host_os@" +CC="@CC@" +CFLAGS="@CFLAGS@" +VERSION="@PACKAGE_VERSION@" +MACHTYPE="@host@" + +PATH=/bin:/usr/bin:/usr/local/bin:$PATH +export PATH + +# Check if TMPDIR is set, default to /tmp +: ${TMPDIR:=/tmp} + +#Securely create a temporary directory for the temporary files +TEMPDIR=$TMPDIR/bbug.$$ +(umask 077 && mkdir "$TEMPDIR") || { + echo "$0: could not create temporary directory" >&2 + exit 1 +} + +TEMPFILE1=$TEMPDIR/bbug1 +TEMPFILE2=$TEMPDIR/bbug2 + +USAGE="Usage: $0 [--help] [--version] [bug-report-email-address]" +VERSTR="GNU gawkbug, version ${VERSION}" + +do_help= do_version= + +while [ $# -gt 0 ] +do + case "$1" in + --help) shift ; do_help=y ;; + --version) shift ; do_version=y ;; + --) shift ; break ;; + -*) echo "gawkbug: ${1}: invalid option" >&2 + echo "$USAGE" >&2 + exit 2 ;; + *) break ;; + esac +done + +if [ -n "$do_version" ] +then + echo "${VERSTR}" + exit 0 +fi + +if [ -n "$do_help" ] +then + echo "${VERSTR}" + echo "${USAGE}" + echo + cat << HERE_EOF +Gawkbug is used to send mail to the Gawk maintainers +for when Gawk doesn't behave like you'd like, or expect. + +Gawkbug will start up your editor (as defined by the shell's +EDITOR environment variable) with a preformatted bug report +template for you to fill in. The report will be mailed to the +bug-gawk mailing list by default. See the manual for details. + +If you invoke gawkbug by accident, just quit your editor without +saving any changes to the template, and no bug report will be sent. +HERE_EOF + exit 0 +fi + +# Figure out how to echo a string without a trailing newline +N=`echo 'hi there\c'` +case "$N" in +*c) n=-n c= ;; +*) n= c='\c' ;; +esac + +BUGGAWK=bug-gawk@gnu.org + +BUGADDR="${1-$BUGGAWK}" + +if [ -z "$DEFEDITOR" ] && [ -z "$EDITOR" ] +then + if [ -x /usr/bin/editor ] + then + DEFEDITOR=editor + elif [ -x /usr/bin/vim ] + then + DEFEDITOR=vim + elif [ -x /usr/bin/gvim ] + then + DEFEDITOR=gvim + elif [ -x /usr/local/bin/ce ] + then + DEFEDITOR=ce + elif [ -x /usr/local/bin/emacs ] + then + DEFEDITOR=emacs + elif [ -x /usr/contrib/bin/emacs ] + then + DEFEDITOR=emacs + elif [ -x /usr/bin/emacs ] + then + DEFEDITOR=emacs + elif [ -x /usr/bin/xemacs ] + then + DEFEDITOR=xemacs + elif [ -x /usr/bin/nano ] + then + DEFEDITOR=nano + elif [ -x /usr/contrib/bin/jove ] + then + DEFEDITOR=jove + elif [ -x /usr/local/bin/jove ] + then + DEFEDITOR=jove + elif [ -x /usr/bin/vi ] + then + DEFEDITOR=vi + else + echo "$0: No default editor found: attempting to use vi" >&2 + DEFEDITOR=vi + fi +fi + + +: ${EDITOR=$DEFEDITOR} + +: ${USER=${LOGNAME-`whoami`}} + +trap 'rm -rf "$TEMPDIR"; exit 1' 1 2 3 13 15 +trap 'rm -rf "$TEMPDIR"' 0 + +UN= +if (uname) >/dev/null 2>&1 +then + UN=`uname -a` +fi + +if [ -f /usr/lib/sendmail ] +then + RMAIL="/usr/lib/sendmail" + SMARGS="-i -t" +elif [ -f /usr/sbin/sendmail ] +then + RMAIL="/usr/sbin/sendmail" + SMARGS="-i -t" +else + RMAIL=rmail + SMARGS="$BUGADDR" +fi + +INITIAL_SUBJECT='[50 character or so descriptive subject here (for reference)]' + +cat > "$TEMPFILE1" <<EOF +From: ${USER} +To: ${BUGADDR} +Subject: ${INITIAL_SUBJECT} + +Configuration Information [Automatically generated, do not change]: +Machine: $MACHINE +OS: $OS +Compiler: $CC +Compilation CFLAGS: $CFLAGS +uname output: $UN +Machine Type: $MACHTYPE + +Gawk Version: $VERSION + +Description: + [Detailed description of the problem, suggestion, or complaint.] + +Repeat-By: + [Describe the sequence of events that causes the problem + to occur.] + +Fix: + [Description of how to fix the problem. If you don't know a + fix for the problem, don't include this section.] +EOF + +cp "$TEMPFILE1" "$TEMPFILE2" +chmod u+w "$TEMPFILE1" + +trap '' 2 # ignore interrupts while in editor + +edstat=1 +while [ $edstat -ne 0 ] +do + $EDITOR "$TEMPFILE1" + edstat=$? + + if [ $edstat -ne 0 ] + then + echo "$0: editor \`$EDITOR' exited with nonzero status." + echo "$0: Perhaps it was interrupted." + echo "$0: Type \`y' to give up, and lose your bug report;" + echo "$0: type \`n' to re-enter the editor." + echo $n "$0: Do you want to give up? $c" + + read ans + case "$ans" in + [Yy]*) exit 1 ;; + esac + + continue + fi + + # find the subject from the temp file and see if it's been changed + CURR_SUB=`grep '^Subject: ' "$TEMPFILE1" | sed 's|^Subject:[ ]*||' | sed 1q` + + case "$CURR_SUB" in + "${INITIAL_SUBJECT}") + echo + echo "$0: You have not changed the subject from the default." + echo "$0: Please use a more descriptive subject header." + echo "$0: Type \`y' to give up, and lose your bug report;" + echo "$0: type \`n' to re-enter the editor." + echo $n "$0: Do you want to give up? $c" + + read ans + case "$ans" in + [Yy]*) exit 1 ;; + esac + + echo "$0: The editor will be restarted in five seconds." + sleep 5 + edstat=1 + ;; + esac + +done + +trap 'rm -rf "$TEMPDIR"; exit 1' 2 # restore trap on SIGINT + +if cmp -s "$TEMPFILE1" "$TEMPFILE2" +then + echo "File not changed, no bug report submitted." + exit +fi + +echo $n "Send bug report to ${BUGADDR}? [y/n] $c" +read ans +case "$ans" in +[Nn]*) exit 0 ;; +esac + +${RMAIL} $SMARGS < "$TEMPFILE1" || { + cat "$TEMPFILE1" >> $HOME/dead.gawkbug + echo "$0: mail to ${BUGADDR} failed: report saved in $HOME/dead.gawkbug" >&2 + echo "$0: please send it manually to ${BUGADDR}" >&2 +} + +exit 0 |