home *** CD-ROM | disk | FTP | other *** search
- #! /bin/sh
- #
- # glibcbug - create a bug report and mail it to the bug address.
- #
- # configuration section:
- # these variables are filled in by configure
- #
- VERSION="2.0.7"
- BUGGLIBC="bugs@gnu.org"
- ADDONS="crypt linuxthreads localedata"
- HOST="i386-pc-linux-gnu"
- CC='gcc -B$(common-objpfx)'
- CFLAGS="-O2"
- BUILD_SHARED="yes"
- BUILD_PROFILE="yes"
- BUILD_OMITFP="no"
- STDIO="libio"
-
- PATH=/bin:/usr/bin:/usr/local/bin:$PATH
- export PATH
-
- TEMP=`mktemp -q /tmp/glibcbugXXXXXX 2>/dev/null`
- if test $? -ne 0; then
- TEMP=/tmp/glibcbug.$$
- echo > $TEMP
- chmod 600 $TEMP
- fi
- TEMPx=`mktemp -q /tmp/glibcbugXXXXXX 2>/dev/null`
- if test $? -ne 0; then
- TEMPx=/tmp/glibcbug.$$.x
- echo > $TEMPx
- chmod 600 $TEMPx
- fi
-
- BUGADDR=${1-$BUGGLIBC}
- ENVIRONMENT=`uname -a`
-
- : ${EDITOR=emacs}
-
- : ${USER=${LOGNAME-`whoami`}}
-
- trap 'rm -f $TEMP $TEMPx; exit 1' 1 2 3 13 15
- trap 'rm -f $TEMP $TEMPx' 0
-
-
- # How to read the passwd database.
- PASSWD="cat /etc/passwd"
-
- if [ -f /usr/lib/sendmail ] ; then
- MAIL_AGENT="/usr/lib/sendmail -oi -t"
- elif [ -f /usr/sbin/sendmail ] ; then
- MAIL_AGENT="/usr/sbin/sendmail -oi -t"
- else
- MAIL_AGENT=rmail
- fi
-
- # Figure out how to echo a string without a trailing newline
- N=`echo 'hi there\c'`
- case "$N" in
- *c) ECHON1='echo -n' ECHON2= ;;
- *) ECHON1=echo ECHON2='\c' ;;
- esac
-
- # Find out the name of the originator of this PR.
- if [ -n "$NAME" ]; then
- ORIGINATOR="$NAME"
- elif [ -f $HOME/.fullname ]; then
- ORIGINATOR="`sed -e '1q' $HOME/.fullname`"
- else
- # Must use temp file due to incompatibilities in quoting behavior
- # and to protect shell metacharacters in the expansion of $LOGNAME
- $PASSWD | grep "^$LOGNAME:" | awk -F: '{print $5}' | sed -e 's/,.*//' > $TEMP
- ORIGINATOR="`cat $TEMP`"
- rm -f $TEMP
- fi
-
- if [ -n "$ORGANIZATION" ]; then
- if [ -f "$ORGANIZATION" ]; then
- ORGANIZATION="`cat $ORGANIZATION`"
- fi
- else
- if [ -f $HOME/.organization ]; then
- ORGANIZATION="`cat $HOME/.organization`"
- elif [ -f $HOME/.signature ]; then
- ORGANIZATION=`sed -e "s/^/ /" $HOME/.signature; echo ">"`
- fi
- fi
-
- # If they don't have a preferred editor set, then use
- if [ -z "$VISUAL" ]; then
- if [ -z "$EDITOR" ]; then
- EDIT=vi
- else
- EDIT="$EDITOR"
- fi
- else
- EDIT="$VISUAL"
- fi
-
- # Find out some information.
- SYSTEM=`( [ -f /bin/uname ] && /bin/uname -a ) || \
- ( [ -f /usr/bin/uname ] && /usr/bin/uname -a ) || echo ""`
- ARCH=`[ -f /bin/arch ] && /bin/arch`
- MACHINE=`[ -f /bin/machine ] && /bin/machine`
-
- ORGANIZATION_C='<organization of PR author (multiple lines)>'
- SYNOPSIS_C='<synopsis of the problem (one line)>'
- SEVERITY_C='<[ non-critical | serious | critical ] (one line)>'
- PRIORITY_C='<[ low | medium | high ] (one line)>'
- CLASS_C='<[ sw-bug | doc-bug | change-request | support ] (one line)>'
- RELEASE_C='<release number or tag (one line)>'
- ENVIRONMENT_C='<machine, os, target, libraries (multiple lines)>'
- DESCRIPTION_C='<precise description of the problem (multiple lines)>'
- HOW_TO_REPEAT_C='<code/input/activities to reproduce the problem (multiple lines)>'
- FIX_C='<how to correct or work around the problem, if known (multiple lines)>'
-
-
- cat > $TEMP <<EOF
- SEND-PR: -*- send-pr -*-
- SEND-PR: Lines starting with \`SEND-PR' will be removed automatically, as
- SEND-PR: will all comments (text enclosed in \`<' and \`>').
- SEND-PR:
- From: ${USER}
- To: ${BUGADDR}
- Subject: [50 character or so descriptive subject here (for reference)]
-
- >Submitter-Id: net
- >Originator: ${ORIGINATOR}
- >Organization:
- ${ORGANIZATION- $ORGANIZATION_C}
- >Confidential: no
- >Synopsis: $SYNOPSIS_C
- >Severity: $SEVERITY_C
- >Priority: $PRIORITY_C
- >Category: libc
- >Class: $CLASS_C
- >Release: libc-${VERSION}
- >Environment:
- $ENVIRONMENT_C
- `[ -n "$HOST" ] && echo Host type: $HOST`
- `[ -n "$SYSTEM" ] && echo System: $SYSTEM`
- `[ -n "$ARCH" ] && echo Architecture: $ARCH`
- `[ -n "$MACHINE" ] && echo Machine: $MACHINE`
- `[ -n "$ADDONS" ] && echo Addons: $ADDONS`
- `[ -n "$CFLAGS" ] && echo Build CFLAGS: $CFLAGS`
- `[ -n "$CC" ] && echo Build CC: $CC`
- `[ -n "$BUILD_SHARED" ] && echo Build shared: $BUILD_SHARED`
- `[ -n "$BUILD_PROFILE" ] && echo Build profile: $BUILD_PROFILE`
- `[ -n "$BUILD_OMITFP" ] && echo Build omitfp: $BUILD_OMITFP`
- `[ -n "$STDIO" ] && echo Stdio: $STDIO`
-
- >Description:
- $DESCRIPTION_C
- >How-To-Repeat:
- $HOW_TO_REPEAT_C
- >Fix:
- $FIX_C
- EOF
-
- chmod u+w $TEMP
- cp $TEMP $TEMPx
-
- eval $EDIT $TEMP
-
- if cmp -s $TEMP $TEMPx; then
- echo "File not changed, no bug report submitted."
- exit 1
- fi
-
- #
- # Check the enumeration fields
-
- # This is a "sed-subroutine" with one keyword parameter
- # (with workaround for Sun sed bug)
- #
- SED_CMD='
- /$PATTERN/{
- s|||
- s|<.*>||
- s|^[ ]*||
- s|[ ]*$||
- p
- q
- }'
-
-
- while :; do
- CNT=0
-
- #
- # 1) Severity
- #
- PATTERN=">Severity:"
- SEVERITY=`eval sed -n -e "\"$SED_CMD\"" $TEMP`
- case "$SEVERITY" in
- ""|non-critical|serious|critical) CNT=`expr $CNT + 1` ;;
- *) echo "$COMMAND: \`$SEVERITY' is not a valid value for \`Severity'."
- esac
- #
- # 2) Priority
- #
- PATTERN=">Priority:"
- PRIORITY=`eval sed -n -e "\"$SED_CMD\"" $TEMP`
- case "$PRIORITY" in
- ""|low|medium|high) CNT=`expr $CNT + 1` ;;
- *) echo "$COMMAND: \`$PRIORITY' is not a valid value for \`Priority'."
- esac
- #
- # 3) Class
- #
- PATTERN=">Class:"
- CLASS=`eval sed -n -e "\"$SED_CMD\"" $TEMP`
- case "$CLASS" in
- ""|sw-bug|doc-bug|change-request|support) CNT=`expr $CNT + 1` ;;
- *) echo "$COMMAND: \`$CLASS' is not a valid value for \`Class'."
- esac
-
- [ $CNT -lt 3 ] &&
- echo "Errors were found with the problem report."
-
- while :; do
- $ECHON1 "a)bort, e)dit or s)end? $ECHON2"
- read input
- case "$input" in
- a*)
- echo "$COMMAND: problem report saved in $HOME/dead.glibcbug."
- cat $TEMP >> $HOME/dead.glibcbug
- xs=1; exit
- ;;
- e*)
- eval $EDIT $TEMP
- continue 2
- ;;
- s*)
- break 2
- ;;
- esac
- done
- done
- #
- # Remove comments and send the problem report
- # (we have to use patterns, where the comment contains regex chars)
- #
- # /^>Originator:/s;$ORIGINATOR;;
- sed -e "
- /^SEND-PR:/d
- /^>Organization:/,/^>[A-Za-z-]*:/s;$ORGANIZATION_C;;
- /^>Confidential:/s;<.*>;;
- /^>Synopsis:/s;$SYNOPSIS_C;;
- /^>Severity:/s;<.*>;;
- /^>Priority:/s;<.*>;;
- /^>Class:/s;<.*>;;
- /^>Release:/,/^>[A-Za-z-]*:/s;$RELEASE_C;;
- /^>Environment:/,/^>[A-Za-z-]*:/s;$ENVIRONMENT_C;;
- /^>Description:/,/^>[A-Za-z-]*:/s;$DESCRIPTION_C;;
- /^>How-To-Repeat:/,/^>[A-Za-z-]*:/s;$HOW_TO_REPEAT_C;;
- /^>Fix:/,/^>[A-Za-z-]*:/s;$FIX_C;;
- " $TEMP > $TEMPx
-
- if $MAIL_AGENT < $TEMPx; then
- echo "$COMMAND: problem report sent"
- xs=0; exit
- else
- echo "$COMMAND: mysterious mail failure, report not sent."
- echo "$COMMAND: problem report saved in $HOME/dead.glibcbug."
- cat $TEMP >> $HOME/dead.glibcbug
- fi
-
- exit 0
-