]> git.ipfire.org Git - thirdparty/bash.git/blob - support/bashbug.sh
Imported from ../bash-2.05.tar.gz.
[thirdparty/bash.git] / support / bashbug.sh
1 #!/bin/sh -
2 #
3 # bashbug - create a bug report and mail it to the bug address
4 #
5 # The bug address depends on the release status of the shell. Versions
6 # with status `alpha' or `beta' mail bug reports to chet@po.cwru.edu.
7 # Other versions send mail to bug-bash@gnu.org.
8 #
9 # configuration section:
10 # these variables are filled in by the make target in cpp-Makefile
11 #
12 MACHINE="!MACHINE!"
13 OS="!OS!"
14 CC="!CC!"
15 CFLAGS="!CFLAGS!"
16 RELEASE="!RELEASE!"
17 PATCHLEVEL="!PATCHLEVEL!"
18 RELSTATUS="!RELSTATUS!"
19 MACHTYPE="!MACHTYPE!"
20
21 PATH=/bin:/usr/bin:/usr/local/bin:$PATH
22 export PATH
23
24 # If the OS supplies a program to make temp files with semi-random names,
25 # use it.
26 TEMP=/tmp/bbug.$$
27 for d in /bin /usr/bin /usr/local/bin ; do
28 if [ -x $d/mktemp ]; then
29 TEMP=`$d/mktemp -t bbug ` ; break;
30 elif [ -x $d/tempfile ]; then
31 TEMP=` $d/tempfile --prefix bbug --mode 600 `; break
32 fi
33 done
34
35 USAGE="Usage: $0 [--help] [--version] [bug-report-email-address]"
36 VERSTR="GNU bashbug, version ${RELEASE}.${PATCHLEVEL}-${RELSTATUS}"
37
38 do_help= do_version=
39
40 while [ $# -gt 0 ]; do
41 case "$1" in
42 --help) shift ; do_help=y ;;
43 --version) shift ; do_version=y ;;
44 --) shift ; break ;;
45 -*) echo "bashbug: ${1}: invalid option" >&2
46 echo "$USAGE" >& 2
47 exit 2 ;;
48 *) break ;;
49 esac
50 done
51
52 if [ -n "$do_version" ]; then
53 echo "${VERSTR}"
54 exit 0
55 fi
56
57 if [ -n "$do_help" ]; then
58 echo "${VERSTR}"
59 echo "${USAGE}"
60 echo
61 cat << HERE_EOF
62 Bashbug is used to send mail to the Bash maintainers
63 for when Bash doesn't behave like you'd like, or expect.
64
65 Bashbug will start up your editor (as defined by the shell's
66 EDITOR environment variable) with a preformatted bug report
67 template for you to fill in. The report will be mailed to the
68 bash maintainers by default. See the manual for details.
69
70 If you invoke bashbug by accident, just quit your editor without
71 saving any changes to the template, and no bug report will be sent.
72 HERE_EOF
73 exit 0
74 fi
75
76 # Figure out how to echo a string without a trailing newline
77 N=`echo 'hi there\c'`
78 case "$N" in
79 *c) n=-n c= ;;
80 *) n= c='\c' ;;
81 esac
82
83 BASHTESTERS="bash-testers@po.cwru.edu"
84
85 case "$RELSTATUS" in
86 alpha*|beta*|devel*) BUGBASH=chet@po.cwru.edu ;;
87 *) BUGBASH=bug-bash@gnu.org ;;
88 esac
89
90 case "$RELSTATUS" in
91 alpha*|beta*|devel*)
92 echo "$0: This is a testing release. Would you like your bug report"
93 echo "$0: to be sent to the bash-testers mailing list?"
94 echo $n "$0: Send to bash-testers? $c"
95 read ans
96 case "$ans" in
97 y*|Y*) BUGBASH="${BUGBASH},${BASHTESTERS}" ;;
98 esac ;;
99 esac
100
101 BUGADDR="${1-$BUGBASH}"
102
103 if [ -z "$DEFEDITOR" ] && [ -z "$EDITOR" ]; then
104 if [ -x /usr/bin/editor ]; then
105 DEFEDITOR=editor
106 elif [ -x /usr/local/bin/ce ]; then
107 DEFEDITOR=ce
108 elif [ -x /usr/local/bin/emacs ]; then
109 DEFEDITOR=emacs
110 elif [ -x /usr/contrib/bin/emacs ]; then
111 DEFEDITOR=emacs
112 elif [ -x /usr/bin/emacs ]; then
113 DEFEDITOR=emacs
114 elif [ -x /usr/bin/xemacs ]; then
115 DEFEDITOR=xemacs
116 elif [ -x /usr/contrib/bin/jove ]; then
117 DEFEDITOR=jove
118 elif [ -x /usr/local/bin/jove ]; then
119 DEFEDITOR=jove
120 elif [ -x /usr/bin/vi ]; then
121 DEFEDITOR=vi
122 else
123 echo "$0: No default editor found: attempting to use vi" >&2
124 DEFEDITOR=vi
125 fi
126 fi
127
128
129 : ${EDITOR=$DEFEDITOR}
130
131 : ${USER=${LOGNAME-`whoami`}}
132
133 trap 'rm -f $TEMP $TEMP.x; exit 1' 1 2 3 13 15
134 trap 'rm -f $TEMP $TEMP.x' 0
135
136 UN=
137 if (uname) >/dev/null 2>&1; then
138 UN=`uname -a`
139 fi
140
141 if [ -f /usr/lib/sendmail ] ; then
142 RMAIL="/usr/lib/sendmail"
143 SMARGS="-i -t"
144 elif [ -f /usr/sbin/sendmail ] ; then
145 RMAIL="/usr/sbin/sendmail"
146 SMARGS="-i -t"
147 else
148 RMAIL=rmail
149 SMARGS="$BUGADDR"
150 fi
151
152 # this is raceable
153 rm -f $TEMP
154
155 cat > $TEMP <<EOF
156 From: ${USER}
157 To: ${BUGADDR}
158 Subject: [50 character or so descriptive subject here (for reference)]
159
160 Configuration Information [Automatically generated, do not change]:
161 Machine: $MACHINE
162 OS: $OS
163 Compiler: $CC
164 Compilation CFLAGS: $CFLAGS
165 uname output: $UN
166 Machine Type: $MACHTYPE
167
168 Bash Version: $RELEASE
169 Patch Level: $PATCHLEVEL
170 Release Status: $RELSTATUS
171
172 Description:
173 [Detailed description of the problem, suggestion, or complaint.]
174
175 Repeat-By:
176 [Describe the sequence of events that causes the problem
177 to occur.]
178
179 Fix:
180 [Description of how to fix the problem. If you don't know a
181 fix for the problem, don't include this section.]
182 EOF
183
184 # this is still raceable
185 rm -f $TEMP.x
186 cp $TEMP $TEMP.x
187 chmod u+w $TEMP
188
189 trap '' 2 # ignore interrupts while in editor
190
191 until $EDITOR $TEMP; do
192 echo "$0: editor \`$EDITOR' exited with nonzero status."
193 echo "$0: Perhaps it was interrupted."
194 echo "$0: Type \`y' to give up, and lose your bug report;"
195 echo "$0: type \`n' to re-enter the editor."
196 echo $n "$0: Do you want to give up? $c"
197
198 read ans
199 case "$ans" in
200 [Yy]*) exit 1 ;;
201 esac
202 done
203
204 trap 'rm -f $TEMP $TEMP.x; exit 1' 2 # restore trap on SIGINT
205
206 if cmp -s $TEMP $TEMP.x
207 then
208 echo "File not changed, no bug report submitted."
209 exit
210 fi
211
212 echo $n "Send bug report? [y/n] $c"
213 read ans
214 case "$ans" in
215 [Nn]*) exit 0 ;;
216 esac
217
218 ${RMAIL} $SMARGS < $TEMP || {
219 cat $TEMP >> $HOME/dead.bashbug
220 echo "$0: mail failed: report saved in $HOME/dead.bashbug" >&2
221 }
222
223 exit 0