OpenCores
URL https://opencores.org/ocsvn/scarts/scarts/trunk

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gcc/] [gcc-4.1.1/] [gcc/] [gccbug.in] - Blame information for rev 20

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 12 jlechner
#!/bin/sh
2
# Submit a problem report to a GNATS site.
3
# Copyright (C) 1993, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
4
# Contributed by Brendan Kehoe (brendan@cygnus.com), based on a
5
# version written by Heinz G. Seidl (hgs@cygnus.com).
6
#
7
# This file is part of GNU GNATS.
8
#
9
# GNU GNATS is free software; you can redistribute it and/or modify
10
# it under the terms of the GNU General Public License as published by
11
# the Free Software Foundation; either version 2, or (at your option)
12
# any later version.
13
#
14
# GNU GNATS is distributed in the hope that it will be useful,
15
# but WITHOUT ANY WARRANTY; without even the implied warranty of
16
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
# GNU General Public License for more details.
18
#
19
# You should have received a copy of the GNU General Public License
20
# along with GNU GNATS; see the file COPYING.  If not, write to
21
# the Free Software Foundation, 51 Franklin Street, Fifth Floor,
22
# Boston, MA 02110-1301, USA.
23
 
24
# The version of this send-pr.
25
VERSION=3.113
26
 
27
# The submitter-id for your site.
28
SUBMITTER=net
29
 
30
# The default mail address for PR submissions.
31
GNATS_ADDR=gcc-gnats@gcc.gnu.org
32
 
33
# The default release for this host.
34
# We have to guess at what program_transform_name might have done.
35
# "sed 1q" because neither "head -1" nor "head -n 1" is universal, argh.
36
 
37
DEFAULT_GCC="`echo $0 | sed -e 's/bug//'`"
38
DEFAULT_RELEASE="`$DEFAULT_GCC --version | sed 1q`"
39
 
40
# The default organization.
41
DEFAULT_ORGANIZATION=
42
 
43
# What mailer to use.  This must come after the config file, since it is
44
# host-dependent.
45
# Copied from cvsbug
46
if [ -f /usr/sbin/sendmail ]; then
47
    MAIL_AGENT="/usr/sbin/sendmail -oi -t"
48
else
49
    MAIL_AGENT="/usr/lib/sendmail -oi -t"
50
fi
51
MAILER=`echo $MAIL_AGENT | sed -e 's, .*,,'`
52
if [ ! -f "$MAILER" ] ; then
53
    echo "$COMMAND: Cannot file mail program \"$MAILER\"."
54
    echo "$COMMAND: Please fix the MAIL_AGENT entry in the $COMMAND file."
55
    exit 1
56
fi
57
 
58
 
59
# How to read the passwd database.
60
PASSWD="cat /etc/passwd"
61
 
62
ECHON=bsd
63
 
64
if [ $ECHON = bsd ] ; then
65
  ECHON1="echo -n"
66
  ECHON2=
67
elif [ $ECHON = sysv ] ; then
68
  ECHON1=echo
69
  ECHON2='\c'
70
else
71
  ECHON1=echo
72
  ECHON2=
73
fi
74
 
75
#
76
 
77
if [ -z "$TMPDIR" ]; then
78
  TMPDIR=/tmp
79
else
80
  if [ "`echo $TMPDIR | grep '/$'`" != "" ]; then
81
    TMPDIR="`echo $TMPDIR | sed -e 's,/$,,'`"
82
  fi
83
fi
84
 
85
if [ @have_mktemp_command@ = yes ]; then
86
        TEMP0=`mktemp $TMPDIR/poXXXXXX` || exit 1
87
        TEMP=`mktemp $TMPDIR/pXXXXXX` || exit 1
88
        BAD=`mktemp $TMPDIR/pbadXXXXXX` || exit 1
89
        REF=`mktemp $TMPDIR/pfXXXXXX` || exit 1
90
        REMOVE_TEMP="rm -f $TEMP0 $TEMP $BAD $REF"
91
else
92
        TEMPD=$TMPDIR/pd$$
93
        TEMP0=$TEMPD/po$$
94
        TEMP=$TEMPD/p$$
95
        BAD=$TEMPD/pbad$$
96
        REF=$TEMPD/pf$$
97
        mkdir $TEMPD || exit 1
98
        REMOVE_TEMP="rm -rf $TEMPD"
99
fi
100
 
101
# find a user name
102
if [ "$LOGNAME" = "" ]; then
103
        if [ "$USER" != "" ]; then
104
                LOGNAME="$USER"
105
        else
106
                LOGNAME="UNKNOWN"
107
        fi
108
fi
109
 
110
FROM="$LOGNAME"
111
REPLY_TO="${REPLY_TO:-${REPLYTO:-$LOGNAME}}"
112
 
113
# Find out the name of the originator of this PR.
114
if [ -n "$NAME" ]; then
115
  ORIGINATOR="$NAME"
116
elif [ -f $HOME/.fullname ]; then
117
  ORIGINATOR="`sed -e '1q' $HOME/.fullname`"
118
else
119
  # Must use temp file due to incompatibilities in quoting behavior
120
  # and to protect shell metacharacters in the expansion of $LOGNAME
121
  $PASSWD | grep "^$LOGNAME:" | awk -F: '{print $5}' | sed -e 's/,.*//' > $TEMP0
122
  ORIGINATOR="`cat $TEMP0`"
123
  rm -f $TEMP0
124
fi
125
 
126
if [ -n "$ORGANIZATION" ]; then
127
  if [ -f "$ORGANIZATION" ]; then
128
    ORGANIZATION="`cat $ORGANIZATION`"
129
  fi
130
else
131
  if [ -n "$DEFAULT_ORGANIZATION" ]; then
132
    ORGANIZATION="$DEFAULT_ORGANIZATION"
133
  elif [ -f $HOME/.organization ]; then
134
    ORGANIZATION="`cat $HOME/.organization`"
135
  fi
136
fi
137
 
138
# If they don't have a preferred editor set, then use
139
if [ -z "$VISUAL" ]; then
140
  if [ -z "$EDITOR" ]; then
141
    EDIT=vi
142
  else
143
    EDIT="$EDITOR"
144
  fi
145
else
146
  EDIT="$VISUAL"
147
fi
148
 
149
# Find out some information.
150
SYSTEM=`( [ -f /bin/uname ] && /bin/uname -a ) || \
151
        ( [ -f /usr/bin/uname ] && /usr/bin/uname -a ) || echo ""`
152
ARCH=`[ -f /bin/arch ] && /bin/arch`
153
MACHINE=`[ -f /bin/machine ] && /bin/machine`
154
 
155
COMMAND=`echo $0 | sed -e 's,.*/,,'`
156
USAGE="Usage: $COMMAND [-PVL] [-t address] [-f filename] [-s severity]
157
       [-c address] [--request-id] [--version]"
158
REMOVE=
159
BATCH=
160
CC=
161
SEVERITY_C=
162
 
163
while [ $# -gt 0 ]; do
164
  case "$1" in
165
    -r) ;;              # Ignore for backward compat.
166
    -t | --to) if [ $# -eq 1 ]; then echo "$USAGE"; $REMOVE_TEMP; exit 1; fi
167
        shift ; GNATS_ADDR="$1"
168
        EXPLICIT_GNATS_ADDR=true
169
        ;;
170
    -f | --file) if [ $# -eq 1 ]; then echo "$USAGE"; $REMOVE_TEMP; exit 1; fi
171
        shift ; IN_FILE="$1"
172
        if [ "$IN_FILE" != "-" -a ! -r "$IN_FILE" ]; then
173
          echo "$COMMAND: cannot read $IN_FILE"
174
          $REMOVE_TEMP
175
          exit 1
176
        fi
177
        ;;
178
    -b | --batch) BATCH=true ;;
179
    -c | --cc) if [ $# -eq 1 ]; then echo "$USAGE"; $REMOVE_TEMP; exit 1; fi
180
        shift ; CC="$1"
181
        ;;
182
    -s | --severity) if [ $# -eq 1 ]; then echo "$USAGE"; $REMOVE_TEMP; exit 1; fi
183
        shift ; SEVERITY_C="$1"
184
        ;;
185
    -p | -P | --print) PRINT=true ;;
186
    -L | --list) FORMAT=norm ;;
187
    -l | -CL | --lisp) FORMAT=lisp ;;
188
    --request-id) REQUEST_ID=true ;;
189
    -h | --help) echo "$USAGE"; $REMOVE_TEMP; exit 0 ;;
190
    -V | --version) cat <
191
gccbug (GCC) $DEFAULT_RELEASE
192
Copyright (C) 2002 Free Software Foundation, Inc.
193
This is free software; see the source for copying conditions.  There is NO
194
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
195
 
196
EOF
197
        $REMOVE_TEMP; exit 0 ;;
198
    -*) echo "$USAGE" ; $REMOVE_TEMP; exit 1 ;;
199
    *) echo "$USAGE" ; $REMOVE_TEMP; exit 1
200
 esac
201
 shift
202
done
203
 
204
# spam does not need to be listed here
205
CATEGORIES="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"
206
 
207
case "$FORMAT" in
208
  lisp) echo "$CATEGORIES" | \
209
        awk 'BEGIN {printf "( "} {printf "(\"%s\") ",$0} END {printf ")\n"}'
210
        $REMOVE_TEMP
211
        exit 0
212
        ;;
213
  norm) l=`echo "$CATEGORIES" | \
214
        awk 'BEGIN {max = 0; } { if (length($0) > max) { max = length($0); } }
215
             END {print max + 1;}'`
216
        c=`expr 70 / $l`
217
        if [ $c -eq 0 ]; then c=1; fi
218
        echo "$CATEGORIES" | \
219
        awk 'BEGIN {print "Known categories:"; i = 0 }
220
          { printf ("%-'$l'.'$l's", $0); if ((++i % '$c') == 0) { print "" } }
221
            END { print ""; }'
222
        $REMOVE_TEMP
223
        exit 0
224
        ;;
225
esac
226
 
227
ORIGINATOR_C=''
228
ORGANIZATION_C=''
229
SYNOPSIS_C=''
230
if [ -z "$SEVERITY_C" ]; then
231
  SEVERITY_C='<[ non-critical | serious | critical ] (one line)>'
232
fi
233
PRIORITY_C='<[ low | medium ] (one line)>'
234
CATEGORY_C=''
235
RELEASE_C=''
236
ENVIRONMENT_C=''
237
DESCRIPTION_C=''
238
HOW_TO_REPEAT_C=''
239
FIX_C=''
240
 
241
# Catch some signals. ($xs kludge needed by Sun /bin/sh)
242
xs=0
243
trap '$REMOVE_TEMP; exit $xs' 0
244
trap 'echo "$COMMAND: Aborting ..."; $REMOVE_TEMP; xs=1; exit' 1 3 13 15
245
 
246
# If they told us to use a specific file, then do so.
247
if [ -n "$IN_FILE" ]; then
248
  if [ "$IN_FILE" = "-" ]; then
249
    # The PR is coming from the standard input.
250
    if [ -n "$EXPLICIT_GNATS_ADDR" ]; then
251
      sed -e "s;^[Tt][Oo]:.*;To: $GNATS_ADDR;" > $TEMP
252
    else
253
      cat > $TEMP
254
    fi
255
  else
256
    # Use the file they named.
257
    if [ -n "$EXPLICIT_GNATS_ADDR" ]; then
258
      sed -e "s;^[Tt][Oo]:.*;To: $GNATS_ADDR;" $IN_FILE > $TEMP
259
    else
260
      cat $IN_FILE > $TEMP
261
    fi
262
  fi
263
else
264
 
265
  if [ -n "$PR_FORM" -a -z "$PRINT_INTERN" ]; then
266
    # If their PR_FORM points to a bogus entry, then bail.
267
    if [ ! -f "$PR_FORM" -o ! -r "$PR_FORM" -o ! -s "$PR_FORM" ]; then
268
      echo "$COMMAND: can't seem to read your template file (\`$PR_FORM'), ignoring PR_FORM"
269
      sleep 1
270
      PRINT_INTERN=bad_prform
271
    fi
272
  fi
273
 
274
  if [ -n "$PR_FORM" -a -z "$PRINT_INTERN" ]; then
275
    cp $PR_FORM $TEMP ||
276
      ( echo "$COMMAND: could not copy $PR_FORM" ; xs=1; exit )
277
  else
278
    for file in $TEMP $REF ; do
279
      cat  > $file << '__EOF__'
280
SEND-PR: -*- send-pr -*-
281
SEND-PR: Lines starting with `SEND-PR' will be removed automatically, as
282
SEND-PR: will all comments (text enclosed in `<' and `>').
283
SEND-PR:
284
SEND-PR: Please consult the GCC manual if you are not sure how to
285
SEND-PR: fill out a problem report.
286
SEND-PR: Note that the Synopsis field is mandatory.  The Subject (for
287
SEND-PR: the mail) will be made the same as Synopsis unless explicitly
288
SEND-PR: changed.
289
SEND-PR:
290
SEND-PR: Choose from the following categories:
291
SEND-PR:
292
__EOF__
293
 
294
      # Format the categories so they fit onto lines.
295
        l=`echo "$CATEGORIES" | \
296
        awk 'BEGIN {max = 0; } { if (length($0) > max) { max = length($0); } }
297
             END {print max + 1;}'`
298
        c=`expr 61 / $l`
299
        if [ $c -eq 0 ]; then c=1; fi
300
        echo "$CATEGORIES" | \
301
        awk 'BEGIN {printf "SEND-PR: "; i = 0 }
302
          { printf ("%-'$l'.'$l's", $0);
303
            if ((++i % '$c') == 0) { printf "\nSEND-PR: " } }
304
            END { printf "\nSEND-PR:\n"; }' >> $file
305
 
306
      cat >> $file << __EOF__
307
To: $GNATS_ADDR
308
Subject:
309
From: $FROM
310
Reply-To: $REPLYTO
311
Cc: $CC
312
X-send-pr-version: $VERSION
313
X-GNATS-Notify:
314
 
315
 
316
>Submitter-Id:  $SUBMITTER
317
>Originator:    $ORIGINATOR
318
>Organization:  ${ORGANIZATION-$ORGANIZATION_C}
319
>Confidential:  no
320
SEND-PR: Leave "Confidential" as "no"; all GCC PRs are public.
321
>Synopsis:      $SYNOPSIS_C
322
>Severity:      $SEVERITY_C
323
SEND-PR: critical     GCC is completely not operational; no work-around known.
324
SEND-PR: serious      GCC is not working properly; a work-around is possible.
325
SEND-PR: non-critical Report indicates minor problem.
326
>Priority:      $PRIORITY_C
327
SEND-PR: medium       The problem should be solved in the next release.
328
SEND-PR: low          The problem should be solve in a future release.
329
>Category:      $CATEGORY_C
330
>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)>
331
SEND-PR: doc-bug          The documentation is incorrect.
332
SEND-PR: accepts-illegal  GCC fails to reject erroneous code.
333
SEND-PR: rejects-legal    GCC gives an error message for correct code.
334
SEND-PR: wrong-code       The machine code generated by gcc is incorrect.
335
SEND-PR: ice-on-legal-code   GCC gives an Internal Compiler Error (ICE)
336
SEND-PR:                     for correct code
337
SEND-PR: ice-on-illegal-code GCC gives an ICE instead of reporting an error
338
SEND-PR: pessimizes-code     GCC misses an important optimization opportunity
339
SEND-PR: sw-bug              Software bug of some other class than above
340
SEND-PR: change-request      A feature in GCC is missing.
341
SEND-PR: support             I need help with gcc.
342
>Release:       ${DEFAULT_RELEASE-$RELEASE_C}
343
>Environment:
344
`[ -n "$SYSTEM" ] && echo System: $SYSTEM`
345
`[ -n "$ARCH" ] && echo Architecture: $ARCH`
346
`[ -n "$MACHINE" ] && echo Machine: $MACHINE`
347
        $ENVIRONMENT_C
348
host: @host@
349
build: @build@
350
target: @target@
351
__EOF__
352
      cat >> $file << \__EOF__
353
configured with: @gcc_config_arguments@
354
__EOF__
355
      cat >> $file << __EOF__
356
>Description:
357
        $DESCRIPTION_C
358
>How-To-Repeat:
359
        $HOW_TO_REPEAT_C
360
>Fix:
361
        $FIX_C
362
__EOF__
363
    done
364
  fi
365
 
366
  if [ "$PRINT" = true -o "$PRINT_INTERN" = true ]; then
367
    cat $TEMP
368
    xs=0; exit
369
  fi
370
 
371
  chmod u+w $TEMP
372
  if [ -z "$REQUEST_ID" ]; then
373
    eval $EDIT $TEMP
374
  else
375
    ed -s $TEMP << '__EOF__'
376
/^Subject/s/^Subject:.*/Subject: request for a customer id/
377
/^>Category/s/^>Category:.*/>Category: send-pr/
378
w
379
q
380
__EOF__
381
  fi
382
 
383
  if cmp -s $REF $TEMP ; then
384
    echo "$COMMAND: problem report not filled out, therefore not sent"
385
    xs=1; exit
386
  fi
387
fi
388
 
389
#
390
#       Check the enumeration fields
391
 
392
# This is a "sed-subroutine" with one keyword parameter
393
# (with workaround for Sun sed bug)
394
#
395
SED_CMD='
396
/$PATTERN/{
397
s|||
398
s|<.*>||
399
s|^[    ]*||
400
s|[     ]*$||
401
p
402
q
403
}'
404
 
405
 
406
while [ -z "$REQUEST_ID" ]; do
407
  CNT=0
408
 
409
  # 1) Confidential
410
  #
411
  PATTERN=">Confidential:"
412
  CONFIDENTIAL=`eval sed -n -e "\"$SED_CMD\"" $TEMP`
413
  case "$CONFIDENTIAL" in
414
    no) CNT=`expr $CNT + 1` ;;
415
    *) echo "$COMMAND: \`$CONFIDENTIAL' is not a valid value for \`Confidential'." ;;
416
  esac
417
  #
418
  # 2) Severity
419
  #
420
  PATTERN=">Severity:"
421
  SEVERITY=`eval sed -n -e "\"$SED_CMD\"" $TEMP`
422
  case "$SEVERITY" in
423
    ""|non-critical|serious|critical) CNT=`expr $CNT + 1` ;;
424
    *)  echo "$COMMAND: \`$SEVERITY' is not a valid value for \`Severity'."
425
  esac
426
  #
427
  # 3) Priority
428
  #
429
  PATTERN=">Priority:"
430
  PRIORITY=`eval sed -n -e "\"$SED_CMD\"" $TEMP`
431
  case "$PRIORITY" in
432
    ""|low|medium) CNT=`expr $CNT + 1` ;;
433
    high) echo "$COMMAND: \`Priority: high' is reserved for GCC maintainers." ;;
434
    *)  echo "$COMMAND: \`$PRIORITY' is not a valid value for \`Priority'."
435
  esac
436
  #
437
  # 4) Category
438
  #
439
  PATTERN=">Category:"
440
  CATEGORY=`eval sed -n -e "\"$SED_CMD\"" $TEMP`
441
  FOUND=
442
  for C in $CATEGORIES
443
  do
444
    if [ "$C" = "$CATEGORY" ]; then FOUND=true ; break ; fi
445
  done
446
  if [ -n "$FOUND" ]; then
447
    CNT=`expr $CNT + 1`
448
  else
449
    if [ -z "$CATEGORY" ]; then
450
      echo "$COMMAND: you must include a Category: field in your report."
451
    else
452
      echo "$COMMAND: \`$CATEGORY' is not a known category."
453
    fi
454
  fi
455
  #
456
  # 5) Class
457
  #
458
  PATTERN=">Class:"
459
  CLASS=`eval sed -n -e "\"$SED_CMD\"" $TEMP`
460
  case "$CLASS" in
461
    ""|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` ;;
462
    *)  echo "$COMMAND: \`$CLASS' is not a valid value for \`Class'."
463
  esac
464
  #
465
  # 6) Check that synopsis is not empty
466
  #
467
  if grep "^>Synopsis:[         ]*${SYNOPSIS_C}\$" $TEMP > /dev/null
468
  then
469
    echo "$COMMAND: Synopsis must not be empty."
470
  else
471
    CNT=`expr $CNT + 1`
472
  fi
473
 
474
  [ $CNT -lt 6 -a -z "$BATCH" ] &&
475
    echo "Errors were found with the problem report."
476
 
477
  while true; do
478
    if [ -z "$BATCH" ]; then
479
      $ECHON1 "a)bort, e)dit or s)end? $ECHON2"
480
      read input
481
    else
482
      if [ $CNT -eq 6 ]; then
483
        input=s
484
      else
485
        input=a
486
      fi
487
    fi
488
    case "$input" in
489
      a*)
490
        if [ -z "$BATCH" ]; then
491
          echo "$COMMAND: the problem report remains in $BAD and is not sent."
492
          REMOVE_TEMP="rm -f $TEMP0 $TEMP $REF"
493
          mv $TEMP $BAD
494
        else
495
          echo "$COMMAND: the problem report is not sent."
496
        fi
497
        xs=1; exit
498
        ;;
499
      e*)
500
        eval $EDIT $TEMP
501
        continue 2
502
        ;;
503
      s*)
504
        break 2
505
        ;;
506
    esac
507
  done
508
done
509
 
510
#
511
# Make sure the mail has got a Subject.  If not, use the same as
512
# in Synopsis.
513
#
514
 
515
if grep '^Subject:[     ]*$' $TEMP > /dev/null
516
then
517
  SYNOPSIS=`grep '^>Synopsis:' $TEMP | sed -e 's/^>Synopsis:[   ]*//'`
518
  ed -s $TEMP << __EOF__
519
/^Subject:/s/:.*\$/: $SYNOPSIS/
520
w
521
q
522
__EOF__
523
fi
524
 
525
#
526
#       Remove comments and send the problem report
527
#       (we have to use patterns, where the comment contains regex chars)
528
#
529
# /^>Originator:/s;$ORIGINATOR;;
530
sed  -e "
531
/^SEND-PR:/d
532
/^>Organization:/,/^>[A-Za-z-]*:/s;$ORGANIZATION_C;;
533
/^>Confidential:/s;<.*>;;
534
/^>Synopsis:/s;$SYNOPSIS_C;;
535
/^>Severity:/s;<.*>;;
536
/^>Priority:/s;<.*>;;
537
/^>Category:/s;$CATEGORY_C;;
538
/^>Class:/s;<.*>;;
539
/^>Release:/,/^>[A-Za-z-]*:/s;$RELEASE_C;;
540
/^>Environment:/,/^>[A-Za-z-]*:/s;$ENVIRONMENT_C;;
541
/^>Description:/,/^>[A-Za-z-]*:/s;$DESCRIPTION_C;;
542
/^>How-To-Repeat:/,/^>[A-Za-z-]*:/s;$HOW_TO_REPEAT_C;;
543
/^>Fix:/,/^>[A-Za-z-]*:/s;$FIX_C;;
544
" $TEMP > $REF
545
 
546
if $MAIL_AGENT < $REF; then
547
  echo "$COMMAND: problem report sent"
548
  xs=0; exit
549
else
550
  echo "$COMMAND: mysterious mail failure."
551
  if [ -z "$BATCH" ]; then
552
    echo "$COMMAND: the problem report remains in $BAD and is not sent."
553
    REMOVE_TEMP="rm -f $TEMP0 $TEMP $REF"
554
    mv $REF $BAD
555
  else
556
    echo "$COMMAND: the problem report is not sent."
557
  fi
558
  xs=1; exit
559
fi

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.