mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-30 04:26:45 +03:00 
			
		
		
		
	configure.in: add --with-server-suffix (MYSQL_SERVER_SUFFIX) include/mysql_version.h.in: add --with-server-suffix (MYSQL_SERVER_SUFFIX) myisam/Makefile.am: add --with-server-suffix (MYSQL_SERVER_SUFFIX) mysql-test/Makefile.am: add --with-server-suffix (MYSQL_SERVER_SUFFIX) scripts/Makefile.am: add --with-server-suffix (MYSQL_SERVER_SUFFIX) scripts/mysqlbug.sh: add --with-server-suffix (MYSQL_SERVER_SUFFIX) sql-bench/Makefile.am: add --with-server-suffix (MYSQL_SERVER_SUFFIX) sql/mysqld.cc: add --with-server-suffix (MYSQL_SERVER_SUFFIX) support-files/Makefile.am: add --with-server-suffix (MYSQL_SERVER_SUFFIX)
		
			
				
	
	
		
			381 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			381 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/bin/sh
 | ||
| # Create a bug report and mail it to the mysql mailing list
 | ||
| # Based on glibc bug reporting script.
 | ||
| 
 | ||
| echo "Finding system information for a MySQL bug report"
 | ||
| 
 | ||
| VERSION="@VERSION@@MYSQL_SERVER_SUFFIX@"
 | ||
| COMPILATION_COMMENT="@COMPILATION_COMMENT@"
 | ||
| BUGmysql="mysql@lists.mysql.com"
 | ||
| # This is set by configure
 | ||
| COMP_ENV_INFO="CC='@CC@'  CFLAGS='@CFLAGS@'  CXX='@CXX@'  CXXFLAGS='@CXXFLAGS@'  LDFLAGS='@LDFLAGS@'"
 | ||
| CONFIGURE_LINE="@CONF_COMMAND@"
 | ||
| 
 | ||
| LIBC_INFO=""
 | ||
| for pat in /lib/libc.* /lib/libc-* /usr/lib/libc.* /usr/lib/libc-*
 | ||
| do
 | ||
|     TMP=`ls -l $pat 2>/dev/null`
 | ||
|     if test $? = 0
 | ||
|     then
 | ||
|       LIBC_INFO="$LIBC_INFO
 | ||
| $TMP"
 | ||
|     fi
 | ||
| done
 | ||
| 
 | ||
| PATH=../client:$PATH:/bin:/usr/bin:/usr/local/bin
 | ||
| export PATH
 | ||
| 
 | ||
| BUGADDR=${1-$BUGmysql}
 | ||
| ENVIRONMENT=`uname -a`
 | ||
| 
 | ||
| : ${USER=${LOGNAME-`whoami`}}
 | ||
| 
 | ||
| COMMAND=`echo $0|sed 's%.*/\([^/]*\)%\1%'`
 | ||
| 
 | ||
| # Try to create a secure tmpfile
 | ||
| umask 077
 | ||
| TEMPDIR=/tmp/mysqlbug-$$
 | ||
| mkdir $TEMPDIR || (echo "can not create directory in /tmp, aborting"; exit 1;)
 | ||
| TEMP=${TEMPDIR}/mysqlbug
 | ||
| 
 | ||
| trap 'rm -f $TEMP $TEMP.x; rmdir $TEMPDIR; exit 1' 1 2 3 13 15
 | ||
| trap 'rm -f $TEMP $TEMP.x; rmdir $TEMPDIR' 0
 | ||
| 
 | ||
| # How to read the passwd database.
 | ||
| PASSWD="cat /etc/passwd"
 | ||
| 
 | ||
| if test -f /usr/lib/sendmail
 | ||
| then
 | ||
|   MAIL_AGENT="/usr/lib/sendmail -oi -t"
 | ||
| elif test -f /usr/sbin/sendmail
 | ||
| then
 | ||
|   MAIL_AGENT="/usr/sbin/sendmail -oi -t"
 | ||
| else
 | ||
|   MAIL_AGENT="rmail $BUGmysql"
 | ||
| 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 test -n "$NAME" 
 | ||
| then
 | ||
|   ORIGINATOR="$NAME"
 | ||
| elif test -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 test -n "$ORGANIZATION"
 | ||
| then
 | ||
|   if test -f "$ORGANIZATION"
 | ||
|   then
 | ||
|     ORGANIZATION="`cat $ORGANIZATION`"
 | ||
|   fi
 | ||
| else
 | ||
|   if test -f $HOME/.organization
 | ||
|   then
 | ||
|     ORGANIZATION="`cat $HOME/.organization`"
 | ||
|   elif test -f $HOME/.signature
 | ||
|   then
 | ||
|     ORGANIZATION=`sed -e "s/^/  /" $HOME/.signature; echo ">"`
 | ||
|   fi
 | ||
| fi
 | ||
| 
 | ||
| PATH_DIRS=`echo $PATH | sed -e 's/^:/. /' -e 's/:$/ ./' -e 's/::/ . /g' -e 's/:/ /g' `
 | ||
| 
 | ||
| which_1 ()
 | ||
| {
 | ||
|   for cmd
 | ||
|   do
 | ||
|     # Absolute path ?. 
 | ||
|     if expr "x$cmd" : "x/" > /dev/null
 | ||
|     then
 | ||
|       echo "$cmd"
 | ||
|       exit 0
 | ||
|     else
 | ||
|       for d in $PATH_DIRS
 | ||
|       do
 | ||
| 	file="$d/$cmd"
 | ||
| 	if test -x "$file" -a ! -d "$file"
 | ||
| 	then
 | ||
| 	  echo "$file"
 | ||
| 	  exit 0
 | ||
| 	fi
 | ||
|       done
 | ||
|     fi
 | ||
|   done
 | ||
|   exit 1
 | ||
| }
 | ||
| 
 | ||
| change_editor ()
 | ||
| {
 | ||
|   echo "You can change editor by setting the environment variable VISUAL."
 | ||
|   echo "If your shell is a bourne shell (sh) do"
 | ||
|   echo "VISUAL=your_editors_name; export VISUAL"
 | ||
|   echo "If your shell is a C shell (csh) do"
 | ||
|   echo "setenv VISUAL your_editors_name"
 | ||
| }
 | ||
| 
 | ||
| # If they don't have a preferred editor set, then use emacs
 | ||
| if test -z "$VISUAL"
 | ||
| then
 | ||
|   if test -z "$EDITOR"
 | ||
|   then
 | ||
|     EDIT=emacs
 | ||
|   else
 | ||
|     EDIT="$EDITOR"
 | ||
|   fi
 | ||
| else
 | ||
|   EDIT="$VISUAL"
 | ||
| fi
 | ||
| 
 | ||
| #which_1 $EDIT
 | ||
| used_editor=`which_1 $EDIT`
 | ||
| 
 | ||
| echo "test -x $used_editor"
 | ||
| if test -x "$used_editor"
 | ||
| then
 | ||
|   echo "Using editor $used_editor";
 | ||
|   change_editor
 | ||
|   sleep 2
 | ||
| else
 | ||
|   echo "Could not find a text editor. (tried $EDIT)"
 | ||
|   change_editor
 | ||
|   exit 1
 | ||
| fi
 | ||
| 
 | ||
| # Find out some information.
 | ||
| SYSTEM=`( test -f /bin/uname  && /bin/uname -a ) || \
 | ||
|         ( test -f /usr/bin/uname  && /usr/bin/uname -a ) || echo ""`
 | ||
| ARCH=`test -f /bin/arch  && /bin/arch`
 | ||
| MACHINE=`test -f /bin/machine  && /bin/machine`
 | ||
| FILE_PATHS=
 | ||
| 
 | ||
| for cmd in perl make gmake gcc cc
 | ||
| do
 | ||
|   file=`which_1 $cmd`
 | ||
|   if test $? = 0
 | ||
|   then
 | ||
|     if test $cmd = "gcc"
 | ||
|     then
 | ||
|       GCC_INFO=`$file -v 2>&1`
 | ||
|     elif test $cmd = "perl"
 | ||
|     then
 | ||
|       PERL_INFO=`$file -v | grep -i version 2>&1`
 | ||
|     fi
 | ||
|     FILE_PATHS="$FILE_PATHS $file"
 | ||
|   fi
 | ||
| done
 | ||
| 
 | ||
| admin=`which_1 mysqladmin`
 | ||
| MYSQL_SERVER=
 | ||
| if test -x "$admin"
 | ||
| then
 | ||
|   MYSQL_SERVER=`$admin version 2> /dev/null`
 | ||
|   if test "$?" = "1"
 | ||
|   then
 | ||
|     MYSQL_SERVER=""
 | ||
|   fi
 | ||
| fi
 | ||
| 
 | ||
| SUBJECT_C="[50 character or so descriptive subject here (for reference)]"
 | ||
| ORGANIZATION_C='<organization of PR author (multiple lines)>'
 | ||
| LICENCE_C='[none | licence | email support | extended email support ]'
 | ||
| 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: $SUBJECT_C
 | ||
| 
 | ||
| >Description:
 | ||
| 	$DESCRIPTION_C
 | ||
| >How-To-Repeat:
 | ||
| 	$HOW_TO_REPEAT_C
 | ||
| >Fix:
 | ||
| 	$FIX_C
 | ||
| 
 | ||
| >Submitter-Id:	<submitter ID>
 | ||
| >Originator:	${ORIGINATOR}
 | ||
| >Organization:
 | ||
| ${ORGANIZATION- $ORGANIZATION_C}
 | ||
| >MySQL support: $LICENCE_C
 | ||
| >Synopsis:	$SYNOPSIS_C
 | ||
| >Severity:	$SEVERITY_C
 | ||
| >Priority:	$PRIORITY_C
 | ||
| >Category:	mysql
 | ||
| >Class:		$CLASS_C
 | ||
| >Release:	mysql-${VERSION} ($COMPILATION_COMMENT)
 | ||
| `test -n "$MYSQL_SERVER" && echo ">Server: $MYSQL_SERVER"`
 | ||
| >Environment:
 | ||
| 	$ENVIRONMENT_C
 | ||
| `test -n "$SYSTEM"  && echo "System: $SYSTEM"`
 | ||
| `test -n "$ARCH"  && echo "Architecture: $ARCH"`
 | ||
| `test -n "$MACHINE"  && echo "Machine: $MACHINE"`
 | ||
| `test -n "$FILE_PATHS"  && echo "Some paths: $FILE_PATHS"`
 | ||
| `test -n "$GCC_INFO"  && echo "GCC: $GCC_INFO"`
 | ||
| `test -n "$COMP_ENV_INFO"  && echo "Compilation info: $COMP_ENV_INFO"`
 | ||
| `test -n "$LIBC_INFO"  && echo "LIBC: $LIBC_INFO"`
 | ||
| `test -n "$CONFIGURE_LINE"  && echo "Configure command: $CONFIGURE_LINE"`
 | ||
| `test -n "$PERL_INFO"  && echo "Perl: $PERL_INFO"`
 | ||
| EOF
 | ||
| 
 | ||
| chmod u+w $TEMP
 | ||
| cp $TEMP $TEMP.x
 | ||
| 
 | ||
| eval $EDIT $TEMP
 | ||
| 
 | ||
| if cmp -s $TEMP $TEMP.x
 | ||
| then
 | ||
|   echo "File not changed, no bug report submitted."
 | ||
|   cp $TEMP /tmp/failed-mysql-bugreport
 | ||
|   echo "The raw bug report exists in /tmp/failed-mysql-bugreport"
 | ||
|   echo "If you use this remember that the first lines of the report now is a lie.."
 | ||
|   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
 | ||
| 
 | ||
|   #
 | ||
|   # 4) Synopsis
 | ||
|   #
 | ||
|   VALUE=`grep "^>Synopsis:" $TEMP | sed 's/>Synopsis:[ 	]*//'`
 | ||
|   case "$VALUE" in
 | ||
|     "$SYNOPSIS_C")  echo "$COMMAND: \`$VALUE' is not a valid value for \`Synopsis'." ;;
 | ||
|     *) CNT=`expr $CNT + 1` 
 | ||
|   esac
 | ||
| 
 | ||
|   test $CNT -lt 4  &&
 | ||
|     echo "Errors were found with the problem report."
 | ||
| 
 | ||
| 
 | ||
|   #       Check if subject of mail was changed, if not, use Synopsis field
 | ||
|   #
 | ||
|   subject=`grep "^Subject" $TEMP| sed 's/^Subject:[ 	]*//'`
 | ||
|   if [ X"$subject" = X"$SUBJECT_C" -o X"$subject" = X"$SYNOPSIS_C" ]; then
 | ||
|     subject=`grep Synopsis $TEMP | sed 's/>Synopsis:[     ]*//'`
 | ||
|     sed "s/^Subject:[ 	]*.*/Subject: $subject/" $TEMP > $TEMP.tmp
 | ||
|     mv -f $TEMP.tmp $TEMP
 | ||
|   fi
 | ||
| 
 | ||
|   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.mysqlbug."
 | ||
| 	cat $TEMP >> $HOME/dead.mysqlbug
 | ||
|         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 > $TEMP.x
 | ||
| 
 | ||
| if $MAIL_AGENT < $TEMP.x
 | ||
| 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.mysqlbug."
 | ||
|   cat $TEMP >> $HOME/dead.mysqlbug
 | ||
| fi
 | ||
| 
 | ||
| exit 0
 |