gccbug.in revision 225736
1316485Sdavidcs#!/bin/sh
2316485Sdavidcs# Submit a problem report to a GNATS site.
3316485Sdavidcs# Copyright (C) 1993, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
4316485Sdavidcs# Contributed by Brendan Kehoe (brendan@cygnus.com), based on a
5316485Sdavidcs# version written by Heinz G. Seidl (hgs@cygnus.com).
6316485Sdavidcs#
7316485Sdavidcs# This file is part of GNU GNATS.
8316485Sdavidcs#
9316485Sdavidcs# GNU GNATS is free software; you can redistribute it and/or modify
10316485Sdavidcs# it under the terms of the GNU General Public License as published by
11316485Sdavidcs# the Free Software Foundation; either version 2, or (at your option)
12316485Sdavidcs# any later version.
13316485Sdavidcs#
14316485Sdavidcs# GNU GNATS is distributed in the hope that it will be useful,
15316485Sdavidcs# but WITHOUT ANY WARRANTY; without even the implied warranty of
16316485Sdavidcs# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17316485Sdavidcs# GNU General Public License for more details.
18316485Sdavidcs#
19316485Sdavidcs# You should have received a copy of the GNU General Public License
20316485Sdavidcs# along with GNU GNATS; see the file COPYING.  If not, write to
21316485Sdavidcs# the Free Software Foundation, 51 Franklin Street, Fifth Floor,
22316485Sdavidcs# Boston, MA 02110-1301, USA.
23316485Sdavidcs
24316485Sdavidcs# The version of this send-pr.
25316485SdavidcsVERSION=3.113
26316485Sdavidcs
27316485Sdavidcs# The submitter-id for your site.
28316485SdavidcsSUBMITTER=net
29316485Sdavidcs
30316485Sdavidcs# The default mail address for PR submissions. 
31316485SdavidcsGNATS_ADDR=gcc-gnats@gcc.gnu.org
32316485Sdavidcs
33316485Sdavidcs# The default release for this host.
34316485Sdavidcs# We have to guess at what program_transform_name might have done.
35316485Sdavidcs# "sed 1q" because neither "head -1" nor "head -n 1" is universal, argh.
36316485Sdavidcs
37316485SdavidcsDEFAULT_GCC="`echo $0 | sed -e 's/bug//'`"
38316485SdavidcsDEFAULT_RELEASE="`$DEFAULT_GCC --version | sed 1q`"
39316485Sdavidcs
40316485Sdavidcs# The default organization.
41316485SdavidcsDEFAULT_ORGANIZATION=
42316485Sdavidcs
43316485Sdavidcs# What mailer to use.  This must come after the config file, since it is
44316485Sdavidcs# host-dependent.
45316485Sdavidcs# Copied from cvsbug
46316485Sdavidcsif [ -f /usr/sbin/sendmail ]; then  
47316485Sdavidcs    MAIL_AGENT="/usr/sbin/sendmail -oi -t"
48316485Sdavidcselse  
49316485Sdavidcs    MAIL_AGENT="/usr/lib/sendmail -oi -t"
50316485Sdavidcsfi
51316485SdavidcsMAILER=`echo $MAIL_AGENT | sed -e 's, .*,,'`
52316485Sdavidcsif [ ! -f "$MAILER" ] ; then
53316485Sdavidcs    echo "$COMMAND: Cannot file mail program \"$MAILER\"."
54316485Sdavidcs    echo "$COMMAND: Please fix the MAIL_AGENT entry in the $COMMAND file."
55316485Sdavidcs    exit 1
56316485Sdavidcsfi
57316485Sdavidcs
58316485Sdavidcs
59316485Sdavidcs# How to read the passwd database.
60316485SdavidcsPASSWD="cat /etc/passwd"
61316485Sdavidcs
62316485SdavidcsECHON=bsd
63316485Sdavidcs
64316485Sdavidcsif [ $ECHON = bsd ] ; then
65316485Sdavidcs  ECHON1="echo -n"
66316485Sdavidcs  ECHON2=
67316485Sdavidcselif [ $ECHON = sysv ] ; then
68316485Sdavidcs  ECHON1=echo
69316485Sdavidcs  ECHON2='\c'
70316485Sdavidcselse
71316485Sdavidcs  ECHON1=echo
72316485Sdavidcs  ECHON2=
73316485Sdavidcsfi
74316485Sdavidcs
75316485Sdavidcs#
76316485Sdavidcs
77316485Sdavidcsif [ -z "$TMPDIR" ]; then
78316485Sdavidcs  TMPDIR=/tmp
79316485Sdavidcselse
80316485Sdavidcs  if [ "`echo $TMPDIR | grep '/$'`" != "" ]; then
81316485Sdavidcs    TMPDIR="`echo $TMPDIR | sed -e 's,/$,,'`"
82316485Sdavidcs  fi
83316485Sdavidcsfi
84316485Sdavidcs
85316485Sdavidcsif [ @have_mktemp_command@ = yes ]; then
86316485Sdavidcs	TEMP0=`mktemp $TMPDIR/poXXXXXX` || exit 1
87316485Sdavidcs	TEMP=`mktemp $TMPDIR/pXXXXXX` || exit 1
88316485Sdavidcs	BAD=`mktemp $TMPDIR/pbadXXXXXX` || exit 1
89316485Sdavidcs	REF=`mktemp $TMPDIR/pfXXXXXX` || exit 1
90316485Sdavidcs	REMOVE_TEMP="rm -f $TEMP0 $TEMP $BAD $REF"
91316485Sdavidcselse
92316485Sdavidcs	TEMPD=$TMPDIR/pd$$
93320164Sdavidcs	TEMP0=$TEMPD/po$$
94320164Sdavidcs	TEMP=$TEMPD/p$$
95316485Sdavidcs	BAD=$TEMPD/pbad$$
96316485Sdavidcs	REF=$TEMPD/pf$$
97316485Sdavidcs	mkdir $TEMPD || exit 1
98316485Sdavidcs	REMOVE_TEMP="rm -rf $TEMPD"
99316485Sdavidcsfi
100316485Sdavidcs
101316485Sdavidcs# find a user name
102316485Sdavidcsif [ "$LOGNAME" = "" ]; then
103316485Sdavidcs	if [ "$USER" != "" ]; then
104316485Sdavidcs		LOGNAME="$USER"
105316485Sdavidcs	else
106316485Sdavidcs		LOGNAME="UNKNOWN"
107316485Sdavidcs	fi
108316485Sdavidcsfi
109316485Sdavidcs
110316485SdavidcsFROM="$LOGNAME"
111316485SdavidcsREPLY_TO="${REPLY_TO:-${REPLYTO:-$LOGNAME}}"
112316485Sdavidcs
113316485Sdavidcs# Find out the name of the originator of this PR.
114316485Sdavidcsif [ -n "$NAME" ]; then
115316485Sdavidcs  ORIGINATOR="$NAME"
116316485Sdavidcselif [ -f $HOME/.fullname ]; then
117316485Sdavidcs  ORIGINATOR="`sed -e '1q' $HOME/.fullname`"
118316485Sdavidcselse
119316485Sdavidcs  # Must use temp file due to incompatibilities in quoting behavior
120316485Sdavidcs  # and to protect shell metacharacters in the expansion of $LOGNAME
121316485Sdavidcs  $PASSWD | grep "^$LOGNAME:" | awk -F: '{print $5}' | sed -e 's/,.*//' > $TEMP0
122316485Sdavidcs  ORIGINATOR="`cat $TEMP0`"
123316485Sdavidcs  rm -f $TEMP0
124316485Sdavidcsfi
125337517Sdavidcs
126316485Sdavidcsif [ -n "$ORGANIZATION" ]; then
127316485Sdavidcs  if [ -f "$ORGANIZATION" ]; then
128316485Sdavidcs    ORGANIZATION="`cat $ORGANIZATION`"
129316485Sdavidcs  fi
130316485Sdavidcselse
131316485Sdavidcs  if [ -n "$DEFAULT_ORGANIZATION" ]; then
132316485Sdavidcs    ORGANIZATION="$DEFAULT_ORGANIZATION"
133316485Sdavidcs  elif [ -f $HOME/.organization ]; then
134316485Sdavidcs    ORGANIZATION="`cat $HOME/.organization`"
135316485Sdavidcs  fi
136316485Sdavidcsfi
137316485Sdavidcs
138316485Sdavidcs# If they don't have a preferred editor set, then use
139316485Sdavidcsif [ -z "$VISUAL" ]; then
140316485Sdavidcs  if [ -z "$EDITOR" ]; then
141316485Sdavidcs    EDIT=vi
142316485Sdavidcs  else
143316485Sdavidcs    EDIT="$EDITOR"
144316485Sdavidcs  fi
145316485Sdavidcselse
146316485Sdavidcs  EDIT="$VISUAL"
147316485Sdavidcsfi
148316485Sdavidcs
149316485Sdavidcs# Find out some information.
150316485SdavidcsSYSTEM=`( [ -f /bin/uname ] && /bin/uname -a ) || \
151316485Sdavidcs        ( [ -f /usr/bin/uname ] && /usr/bin/uname -a ) || echo ""`
152316485SdavidcsARCH=`[ -f /bin/arch ] && /bin/arch`
153316485SdavidcsMACHINE=`[ -f /bin/machine ] && /bin/machine`
154316485Sdavidcs
155316485SdavidcsCOMMAND=`echo $0 | sed -e 's,.*/,,'`
156316485SdavidcsUSAGE="Usage: $COMMAND [-PVL] [-t address] [-f filename] [-s severity]
157316485Sdavidcs       [-c address] [--request-id] [--version]"
158316485SdavidcsREMOVE=
159316485SdavidcsBATCH=
160316485SdavidcsCC=
161316485SdavidcsSEVERITY_C=
162316485Sdavidcs
163316485Sdavidcswhile [ $# -gt 0 ]; do
164316485Sdavidcs  case "$1" in
165316485Sdavidcs    -r) ;; 		# Ignore for backward compat.
166316485Sdavidcs    -t | --to) if [ $# -eq 1 ]; then echo "$USAGE"; $REMOVE_TEMP; exit 1; fi
167316485Sdavidcs	shift ; GNATS_ADDR="$1"
168316485Sdavidcs	EXPLICIT_GNATS_ADDR=true
169316485Sdavidcs        ;;
170316485Sdavidcs    -f | --file) if [ $# -eq 1 ]; then echo "$USAGE"; $REMOVE_TEMP; exit 1; fi
171316485Sdavidcs	shift ; IN_FILE="$1"
172316485Sdavidcs	if [ "$IN_FILE" != "-" -a ! -r "$IN_FILE" ]; then
173316485Sdavidcs	  echo "$COMMAND: cannot read $IN_FILE"
174316485Sdavidcs	  $REMOVE_TEMP
175316485Sdavidcs	  exit 1
176316485Sdavidcs	fi
177316485Sdavidcs	;;
178316485Sdavidcs    -b | --batch) BATCH=true ;;
179316485Sdavidcs    -c | --cc) if [ $# -eq 1 ]; then echo "$USAGE"; $REMOVE_TEMP; exit 1; fi
180316485Sdavidcs	shift ; CC="$1"
181316485Sdavidcs	;;
182316485Sdavidcs    -s | --severity) if [ $# -eq 1 ]; then echo "$USAGE"; $REMOVE_TEMP; exit 1; fi
183316485Sdavidcs	shift ; SEVERITY_C="$1"
184316485Sdavidcs	;;
185316485Sdavidcs    -p | -P | --print) PRINT=true ;;
186316485Sdavidcs    -L | --list) FORMAT=norm ;;
187316485Sdavidcs    -l | -CL | --lisp) FORMAT=lisp ;;
188316485Sdavidcs    --request-id) REQUEST_ID=true ;;
189316485Sdavidcs    -h | --help) echo "$USAGE"; $REMOVE_TEMP; exit 0 ;;
190316485Sdavidcs    -V | --version) cat <<EOF
191316485Sdavidcsgccbug (GCC) $DEFAULT_RELEASE
192316485SdavidcsCopyright (C) 2002 Free Software Foundation, Inc.
193316485SdavidcsThis is free software; see the source for copying conditions.  There is NO
194316485Sdavidcswarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
195316485Sdavidcs
196316485SdavidcsEOF
197316485Sdavidcs	$REMOVE_TEMP; exit 0 ;;
198316485Sdavidcs    -*) echo "$USAGE" ; $REMOVE_TEMP; exit 1 ;;
199316485Sdavidcs    *) echo "$USAGE" ; $REMOVE_TEMP; exit 1
200316485Sdavidcs esac
201316485Sdavidcs shift
202316485Sdavidcsdone
203316485Sdavidcs
204316485Sdavidcs# spam does not need to be listed here
205316485SdavidcsCATEGORIES="ada bootstrap c++ c debug driver fortran inline-asm java libgcj libobjc libstdc++ middle-end objc other pch preprocessor rtl-optimization target tree-optimization web"
206316485Sdavidcs
207316485Sdavidcscase "$FORMAT" in
208316485Sdavidcs  lisp) echo "$CATEGORIES" | \
209316485Sdavidcs        awk 'BEGIN {printf "( "} {printf "(\"%s\") ",$0} END {printf ")\n"}'
210316485Sdavidcs	$REMOVE_TEMP
211316485Sdavidcs        exit 0
212316485Sdavidcs        ;;
213316485Sdavidcs  norm) l=`echo "$CATEGORIES" | \
214316485Sdavidcs	awk 'BEGIN {max = 0; } { if (length($0) > max) { max = length($0); } }
215316485Sdavidcs	     END {print max + 1;}'`
216316485Sdavidcs	c=`expr 70 / $l`
217316485Sdavidcs	if [ $c -eq 0 ]; then c=1; fi
218316485Sdavidcs	echo "$CATEGORIES" | \
219337517Sdavidcs        awk 'BEGIN {print "Known categories:"; i = 0 }
220316485Sdavidcs          { printf ("%-'$l'.'$l's", $0); if ((++i % '$c') == 0) { print "" } }
221316485Sdavidcs            END { print ""; }'
222316485Sdavidcs	$REMOVE_TEMP
223316485Sdavidcs        exit 0
224316485Sdavidcs        ;;
225316485Sdavidcsesac
226316485Sdavidcs
227316485SdavidcsORIGINATOR_C='<name of the PR author (one line)>'
228316485SdavidcsORGANIZATION_C='<organization of PR author (multiple lines)>'
229316485SdavidcsSYNOPSIS_C='<synopsis of the problem (one line)>'
230316485Sdavidcsif [ -z "$SEVERITY_C" ]; then
231316485Sdavidcs  SEVERITY_C='<[ non-critical | serious | critical ] (one line)>'
232316485Sdavidcsfi
233316485SdavidcsPRIORITY_C='<[ low | medium ] (one line)>'
234316485SdavidcsCATEGORY_C='<choose from the top of this file (one line)>'
235316485SdavidcsRELEASE_C='<release number or tag (one line)>'
236316485SdavidcsENVIRONMENT_C='<machine, os, target, libraries (multiple lines)>'
237316485SdavidcsDESCRIPTION_C='<precise description of the problem (multiple lines)>'
238316485SdavidcsHOW_TO_REPEAT_C='<When reporting a compiler error, preprocessor output must be included>'
239316485SdavidcsFIX_C='<how to correct or work around the problem, if known (multiple lines)>'
240316485Sdavidcs
241316485Sdavidcs# Catch some signals. ($xs kludge needed by Sun /bin/sh)
242316485Sdavidcsxs=0
243316485Sdavidcstrap '$REMOVE_TEMP; exit $xs' 0
244316485Sdavidcstrap 'echo "$COMMAND: Aborting ..."; $REMOVE_TEMP; xs=1; exit' 1 3 13 15
245316485Sdavidcs
246316485Sdavidcs# If they told us to use a specific file, then do so.
247316485Sdavidcsif [ -n "$IN_FILE" ]; then
248316485Sdavidcs  if [ "$IN_FILE" = "-" ]; then
249316485Sdavidcs    # The PR is coming from the standard input.
250316485Sdavidcs    if [ -n "$EXPLICIT_GNATS_ADDR" ]; then
251316485Sdavidcs      sed -e "s;^[Tt][Oo]:.*;To: $GNATS_ADDR;" > $TEMP
252316485Sdavidcs    else
253316485Sdavidcs      cat > $TEMP
254316485Sdavidcs    fi
255316485Sdavidcs  else
256337517Sdavidcs    # Use the file they named.
257316485Sdavidcs    if [ -n "$EXPLICIT_GNATS_ADDR" ]; then
258316485Sdavidcs      sed -e "s;^[Tt][Oo]:.*;To: $GNATS_ADDR;" $IN_FILE > $TEMP
259316485Sdavidcs    else
260316485Sdavidcs      cat $IN_FILE > $TEMP
261316485Sdavidcs    fi
262316485Sdavidcs  fi
263316485Sdavidcselse
264316485Sdavidcs
265316485Sdavidcs  if [ -n "$PR_FORM" -a -z "$PRINT_INTERN" ]; then
266316485Sdavidcs    # If their PR_FORM points to a bogus entry, then bail.
267316485Sdavidcs    if [ ! -f "$PR_FORM" -o ! -r "$PR_FORM" -o ! -s "$PR_FORM" ]; then
268316485Sdavidcs      echo "$COMMAND: can't seem to read your template file (\`$PR_FORM'), ignoring PR_FORM"
269337517Sdavidcs      sleep 1
270337517Sdavidcs      PRINT_INTERN=bad_prform
271316485Sdavidcs    fi
272316485Sdavidcs  fi
273337517Sdavidcs
274316485Sdavidcs  if [ -n "$PR_FORM" -a -z "$PRINT_INTERN" ]; then
275316485Sdavidcs    cp $PR_FORM $TEMP || 
276316485Sdavidcs      ( echo "$COMMAND: could not copy $PR_FORM" ; xs=1; exit )
277316485Sdavidcs  else
278316485Sdavidcs    for file in $TEMP $REF ; do
279316485Sdavidcs      cat  > $file << '__EOF__'
280316485SdavidcsSEND-PR: -*- send-pr -*-
281316485SdavidcsSEND-PR: Lines starting with `SEND-PR' will be removed automatically, as
282316485SdavidcsSEND-PR: will all comments (text enclosed in `<' and `>').
283316485SdavidcsSEND-PR: 
284316485SdavidcsSEND-PR: Please consult the GCC manual if you are not sure how to
285316485SdavidcsSEND-PR: fill out a problem report.
286316485SdavidcsSEND-PR: Note that the Synopsis field is mandatory.  The Subject (for
287316485SdavidcsSEND-PR: the mail) will be made the same as Synopsis unless explicitly
288316485SdavidcsSEND-PR: changed.
289316485SdavidcsSEND-PR:
290337517SdavidcsSEND-PR: Choose from the following categories:
291316485SdavidcsSEND-PR:
292316485Sdavidcs__EOF__
293316485Sdavidcs
294316485Sdavidcs      # Format the categories so they fit onto lines.
295337517Sdavidcs	l=`echo "$CATEGORIES" | \
296337517Sdavidcs	awk 'BEGIN {max = 0; } { if (length($0) > max) { max = length($0); } }
297337517Sdavidcs	     END {print max + 1;}'`
298337517Sdavidcs	c=`expr 61 / $l`
299316485Sdavidcs	if [ $c -eq 0 ]; then c=1; fi
300316485Sdavidcs	echo "$CATEGORIES" | \
301316485Sdavidcs        awk 'BEGIN {printf "SEND-PR: "; i = 0 }
302316485Sdavidcs          { printf ("%-'$l'.'$l's", $0);
303316485Sdavidcs	    if ((++i % '$c') == 0) { printf "\nSEND-PR: " } }
304316485Sdavidcs            END { printf "\nSEND-PR:\n"; }' >> $file
305316485Sdavidcs
306316485Sdavidcs      cat >> $file << __EOF__
307316485SdavidcsTo: $GNATS_ADDR
308316485SdavidcsSubject: 
309316485SdavidcsFrom: $FROM
310316485SdavidcsReply-To: $REPLYTO
311316485SdavidcsCc: $CC
312337517SdavidcsX-send-pr-version: $VERSION
313316485SdavidcsX-GNATS-Notify: 
314316485Sdavidcs
315316485Sdavidcs
316316485Sdavidcs>Submitter-Id:	$SUBMITTER
317316485Sdavidcs>Originator:	$ORIGINATOR
318316485Sdavidcs>Organization:	${ORGANIZATION-$ORGANIZATION_C}
319316485Sdavidcs>Confidential:	no
320316485SdavidcsSEND-PR: Leave "Confidential" as "no"; all GCC PRs are public.
321316485Sdavidcs>Synopsis:	$SYNOPSIS_C
322316485Sdavidcs>Severity:	$SEVERITY_C
323337517SdavidcsSEND-PR: critical     GCC is completely not operational; no work-around known.
324316485SdavidcsSEND-PR: serious      GCC is not working properly; a work-around is possible.
325316485SdavidcsSEND-PR: non-critical Report indicates minor problem.
326316485Sdavidcs>Priority:	$PRIORITY_C
327316485SdavidcsSEND-PR: medium       The problem should be solved in the next release.
328316485SdavidcsSEND-PR: low          The problem should be solve in a future release.
329316485Sdavidcs>Category:	$CATEGORY_C
330316485Sdavidcs>Class:		<[ doc-bug | accepts-illegal | rejects-legal | wrong-code | ice-on-legal-code| ice-on-illegal-code | pessimizes-code | sw-bug | change-request | support ] (one line)>
331316485SdavidcsSEND-PR: doc-bug          The documentation is incorrect.
332316485SdavidcsSEND-PR: accepts-illegal  GCC fails to reject erroneous code.
333316485SdavidcsSEND-PR: rejects-legal    GCC gives an error message for correct code.
334316485SdavidcsSEND-PR: wrong-code       The machine code generated by gcc is incorrect.
335316485SdavidcsSEND-PR: ice-on-legal-code   GCC gives an Internal Compiler Error (ICE)
336337517SdavidcsSEND-PR:                     for correct code
337337517SdavidcsSEND-PR: ice-on-illegal-code GCC gives an ICE instead of reporting an error
338316485SdavidcsSEND-PR: pessimizes-code     GCC misses an important optimization opportunity
339316485SdavidcsSEND-PR: sw-bug              Software bug of some other class than above
340316485SdavidcsSEND-PR: change-request      A feature in GCC is missing.
341316485SdavidcsSEND-PR: support             I need help with gcc.
342337517Sdavidcs>Release:	${DEFAULT_RELEASE-$RELEASE_C}
343337517Sdavidcs>Environment:
344316485Sdavidcs`[ -n "$SYSTEM" ] && echo System: $SYSTEM`
345316485Sdavidcs`[ -n "$ARCH" ] && echo Architecture: $ARCH`
346316485Sdavidcs`[ -n "$MACHINE" ] && echo Machine: $MACHINE`
347316485Sdavidcs	$ENVIRONMENT_C
348316485Sdavidcshost: @host@
349316485Sdavidcsbuild: @build@
350316485Sdavidcstarget: @target@
351316485Sdavidcs__EOF__
352316485Sdavidcs      cat >> $file << \__EOF__
353316485Sdavidcsconfigured with: @gcc_config_arguments@
354316485Sdavidcs__EOF__
355316485Sdavidcs      cat >> $file << __EOF__
356316485Sdavidcs>Description:
357316485Sdavidcs	$DESCRIPTION_C
358316485Sdavidcs>How-To-Repeat:
359316485Sdavidcs	$HOW_TO_REPEAT_C
360316485Sdavidcs>Fix:
361316485Sdavidcs	$FIX_C
362316485Sdavidcs__EOF__
363316485Sdavidcs    done
364316485Sdavidcs  fi
365316485Sdavidcs
366337517Sdavidcs  if [ "$PRINT" = true -o "$PRINT_INTERN" = true ]; then
367316485Sdavidcs    cat $TEMP
368316485Sdavidcs    xs=0; exit
369316485Sdavidcs  fi
370316485Sdavidcs
371316485Sdavidcs  chmod u+w $TEMP
372316485Sdavidcs  if [ -z "$REQUEST_ID" ]; then
373316485Sdavidcs    eval $EDIT $TEMP
374316485Sdavidcs  else
375316485Sdavidcs    ed -s $TEMP << '__EOF__'
376316485Sdavidcs/^Subject/s/^Subject:.*/Subject: request for a customer id/
377337517Sdavidcs/^>Category/s/^>Category:.*/>Category: send-pr/
378316485Sdavidcsw
379316485Sdavidcsq
380316485Sdavidcs__EOF__
381316485Sdavidcs  fi
382316485Sdavidcs
383316485Sdavidcs  if cmp -s $REF $TEMP ; then
384316485Sdavidcs    echo "$COMMAND: problem report not filled out, therefore not sent"
385316485Sdavidcs    xs=1; exit
386316485Sdavidcs  fi
387316485Sdavidcsfi
388316485Sdavidcs
389316485Sdavidcs#
390316485Sdavidcs#	Check the enumeration fields
391316485Sdavidcs
392316485Sdavidcs# This is a "sed-subroutine" with one keyword parameter 
393316485Sdavidcs# (with workaround for Sun sed bug)
394316485Sdavidcs#
395316485SdavidcsSED_CMD='
396316485Sdavidcs/$PATTERN/{
397316485Sdavidcss|||
398316485Sdavidcss|<.*>||
399316485Sdavidcss|^[ 	]*||
400316485Sdavidcss|[ 	]*$||
401316485Sdavidcsp
402316485Sdavidcsq
403316485Sdavidcs}'
404316485Sdavidcs
405316485Sdavidcs
406316485Sdavidcswhile [ -z "$REQUEST_ID" ]; do
407316485Sdavidcs  CNT=0
408316485Sdavidcs
409316485Sdavidcs  # 1) Confidential
410316485Sdavidcs  #
411316485Sdavidcs  PATTERN=">Confidential:"
412316485Sdavidcs  CONFIDENTIAL=`eval sed -n -e "\"$SED_CMD\"" $TEMP`
413337517Sdavidcs  case "$CONFIDENTIAL" in
414316485Sdavidcs    no) CNT=`expr $CNT + 1` ;;
415316485Sdavidcs    *) echo "$COMMAND: \`$CONFIDENTIAL' is not a valid value for \`Confidential'." ;;
416316485Sdavidcs  esac
417316485Sdavidcs  #
418337517Sdavidcs  # 2) Severity
419316485Sdavidcs  #
420316485Sdavidcs  PATTERN=">Severity:"
421316485Sdavidcs  SEVERITY=`eval sed -n -e "\"$SED_CMD\"" $TEMP`
422316485Sdavidcs  case "$SEVERITY" in
423316485Sdavidcs    ""|non-critical|serious|critical) CNT=`expr $CNT + 1` ;;
424316485Sdavidcs    *)  echo "$COMMAND: \`$SEVERITY' is not a valid value for \`Severity'."
425316485Sdavidcs  esac
426316485Sdavidcs  #
427316485Sdavidcs  # 3) Priority
428316485Sdavidcs  #
429316485Sdavidcs  PATTERN=">Priority:"
430316485Sdavidcs  PRIORITY=`eval sed -n -e "\"$SED_CMD\"" $TEMP`
431316485Sdavidcs  case "$PRIORITY" in
432316485Sdavidcs    ""|low|medium) CNT=`expr $CNT + 1` ;;
433337517Sdavidcs    high) echo "$COMMAND: \`Priority: high' is reserved for GCC maintainers." ;;
434316485Sdavidcs    *)  echo "$COMMAND: \`$PRIORITY' is not a valid value for \`Priority'."
435316485Sdavidcs  esac
436316485Sdavidcs  #
437316485Sdavidcs  # 4) Category
438316485Sdavidcs  #
439316485Sdavidcs  PATTERN=">Category:"
440316485Sdavidcs  CATEGORY=`eval sed -n -e "\"$SED_CMD\"" $TEMP`
441316485Sdavidcs  FOUND=
442316485Sdavidcs  for C in $CATEGORIES
443316485Sdavidcs  do
444316485Sdavidcs    if [ "$C" = "$CATEGORY" ]; then FOUND=true ; break ; fi
445316485Sdavidcs  done
446316485Sdavidcs  if [ -n "$FOUND" ]; then
447316485Sdavidcs    CNT=`expr $CNT + 1`	
448337517Sdavidcs  else
449316485Sdavidcs    if [ -z "$CATEGORY" ]; then
450316485Sdavidcs      echo "$COMMAND: you must include a Category: field in your report."
451316485Sdavidcs    else
452316485Sdavidcs      echo "$COMMAND: \`$CATEGORY' is not a known category."
453316485Sdavidcs    fi
454316485Sdavidcs  fi
455316485Sdavidcs  #
456316485Sdavidcs  # 5) Class
457316485Sdavidcs  #
458316485Sdavidcs  PATTERN=">Class:"
459316485Sdavidcs  CLASS=`eval sed -n -e "\"$SED_CMD\"" $TEMP`
460316485Sdavidcs  case "$CLASS" in
461316485Sdavidcs    ""|doc-bug|accepts-illegal|rejects-legal|wrong-code|ice-on-legal-code|ice-on-illegal-code|pessimizes-code|sw-bug|change-request|support) CNT=`expr $CNT + 1` ;;
462337517Sdavidcs    *)  echo "$COMMAND: \`$CLASS' is not a valid value for \`Class'."
463316485Sdavidcs  esac
464316485Sdavidcs  #
465316485Sdavidcs  # 6) Check that synopsis is not empty
466316485Sdavidcs  #
467316485Sdavidcs  if grep "^>Synopsis:[ 	]*${SYNOPSIS_C}\$" $TEMP > /dev/null
468316485Sdavidcs  then
469316485Sdavidcs    echo "$COMMAND: Synopsis must not be empty."
470316485Sdavidcs  else
471337517Sdavidcs    CNT=`expr $CNT + 1`
472316485Sdavidcs  fi
473316485Sdavidcs
474316485Sdavidcs  [ $CNT -lt 6 -a -z "$BATCH" ] && 
475316485Sdavidcs    echo "Errors were found with the problem report."
476316485Sdavidcs
477316485Sdavidcs  while true; do
478337517Sdavidcs    if [ -z "$BATCH" ]; then
479316485Sdavidcs      $ECHON1 "a)bort, e)dit or s)end? $ECHON2"
480316485Sdavidcs      read input
481316485Sdavidcs    else
482316485Sdavidcs      if [ $CNT -eq 6 ]; then
483316485Sdavidcs        input=s
484316485Sdavidcs      else
485316485Sdavidcs        input=a
486316485Sdavidcs      fi
487316485Sdavidcs    fi
488316485Sdavidcs    case "$input" in
489337517Sdavidcs      a*)
490316485Sdavidcs	if [ -z "$BATCH" ]; then
491316485Sdavidcs	  echo "$COMMAND: the problem report remains in $BAD and is not sent."
492316485Sdavidcs	  REMOVE_TEMP="rm -f $TEMP0 $TEMP $REF"
493316485Sdavidcs	  mv $TEMP $BAD
494316485Sdavidcs        else
495316485Sdavidcs	  echo "$COMMAND: the problem report is not sent."
496337517Sdavidcs	fi
497316485Sdavidcs	xs=1; exit
498316485Sdavidcs	;;
499316485Sdavidcs      e*)
500316485Sdavidcs        eval $EDIT $TEMP
501316485Sdavidcs	continue 2
502316485Sdavidcs	;;
503316485Sdavidcs      s*)
504316485Sdavidcs	break 2
505316485Sdavidcs	;;
506316485Sdavidcs    esac
507316485Sdavidcs  done
508316485Sdavidcsdone
509316485Sdavidcs
510316485Sdavidcs#
511316485Sdavidcs# Make sure the mail has got a Subject.  If not, use the same as
512316485Sdavidcs# in Synopsis.
513316485Sdavidcs#
514316485Sdavidcs
515316485Sdavidcsif grep '^Subject:[ 	]*$' $TEMP > /dev/null
516337517Sdavidcsthen
517337517Sdavidcs  SYNOPSIS=`grep '^>Synopsis:' $TEMP | sed -e 's/^>Synopsis:[ 	]*//'`
518316485Sdavidcs  ed -s $TEMP << __EOF__
519316485Sdavidcs/^Subject:/s/:.*\$/: $SYNOPSIS/
520316485Sdavidcsw
521316485Sdavidcsq
522316485Sdavidcs__EOF__
523316485Sdavidcsfi
524316485Sdavidcs
525316485Sdavidcs#
526316485Sdavidcs#	Remove comments and send the problem report
527316485Sdavidcs#	(we have to use patterns, where the comment contains regex chars)
528316485Sdavidcs#
529316485Sdavidcs# /^>Originator:/s;$ORIGINATOR;;
530316485Sdavidcssed  -e "
531316485Sdavidcs/^SEND-PR:/d
532316485Sdavidcs/^>Organization:/,/^>[A-Za-z-]*:/s;$ORGANIZATION_C;;
533316485Sdavidcs/^>Confidential:/s;<.*>;;
534316485Sdavidcs/^>Synopsis:/s;$SYNOPSIS_C;;
535316485Sdavidcs/^>Severity:/s;<.*>;;
536337517Sdavidcs/^>Priority:/s;<.*>;;
537316485Sdavidcs/^>Category:/s;$CATEGORY_C;;
538316485Sdavidcs/^>Class:/s;<.*>;;
539316485Sdavidcs/^>Release:/,/^>[A-Za-z-]*:/s;$RELEASE_C;;
540316485Sdavidcs/^>Environment:/,/^>[A-Za-z-]*:/s;$ENVIRONMENT_C;;
541316485Sdavidcs/^>Description:/,/^>[A-Za-z-]*:/s;$DESCRIPTION_C;;
542316485Sdavidcs/^>How-To-Repeat:/,/^>[A-Za-z-]*:/s;$HOW_TO_REPEAT_C;;
543316485Sdavidcs/^>Fix:/,/^>[A-Za-z-]*:/s;$FIX_C;;
544316485Sdavidcs" $TEMP > $REF
545337517Sdavidcs
546316485Sdavidcsif $MAIL_AGENT < $REF; then
547316485Sdavidcs  echo "$COMMAND: problem report sent"
548316485Sdavidcs  xs=0; exit
549316485Sdavidcselse
550316485Sdavidcs  echo "$COMMAND: mysterious mail failure."
551316485Sdavidcs  if [ -z "$BATCH" ]; then
552337517Sdavidcs    echo "$COMMAND: the problem report remains in $BAD and is not sent."
553337517Sdavidcs    REMOVE_TEMP="rm -f $TEMP0 $TEMP $REF"
554316485Sdavidcs    mv $REF $BAD
555316485Sdavidcs  else
556316485Sdavidcs    echo "$COMMAND: the problem report is not sent."
557316485Sdavidcs  fi
558316485Sdavidcs  xs=1; exit
559316485Sdavidcsfi
560316485Sdavidcs