gecko-dev/security/nss/tests/header

1033 lines
25 KiB
Plaintext
Raw Normal View History

#! /bin/sh
########################################################################
#
# /u/sonmi/bin/header - /u/svbld/bin/init/nss/header
#
# variables, utilities and shellfunktions global to NSS QA
# needs to work on all Unix platforms
#
# included from (don't expect this to be up to date)
# --------------------------------------------------
# qa_stat
# mksymlinks
# nssqa
#
# parameters
# ----------
# nssversion (supported: 30b, 31, tip)
# builddate (default - today)
#
# options
# -------
# -y answer all questions with y - use at your own risk... ignores warnings
# -s silent (only usefull with -y)
# -h, -? - you guessed right - displays this text
# -d debug
# -f <filename> - write the (error)output to filename
2000-12-16 02:46:44 +00:00
# -fcronfile produces the resultfiles in the same locations
# as would have been produced with -cron
# -m <mailinglist> - send filename to mailinglist (csl) only useful
# with -f
# -l <mozroot> run on a local build O_LOCAL
# -cron equivalient to -y -s -d -f $RESULTDIR/$HOST.<scriptname>
#
# special strings
# ---------------
# FIXME ... known problems, search for this string
# NOTE .... unexpected behavior
#
# moduls (not yet)
# ----------------
# --# INIT
# --# USERCOM
# --# UTILS
#
# FIXME - split in init / usercom / utils
#
########################################################################
#------------------------------# INIT #------------------------------
# below the option flags get initialized
if [ -z "$QASCRIPT_DIR" ]
then
QASCRIPT_DIR=`dirname $0`
2000-12-13 00:00:32 +00:00
if [ "$QASCRIPT_DIR" = '.' ]
then
QASCRIPT_DIR=`pwd`
fi
fi
export QASCRIPT_DIR
O_ALWAYS_YES=OFF # turned on by -y answer all questions with y
if [ -z "$O_INIT" ] # header is global, some including scripts may not
then # want the init to run, the others don't need to bother
O_INIT=ON
fi
if [ -z "$O_PARAM" ] # header is global, some including scripts may not
then # require parameters, the others don't need to bother
O_PARAM=ON
fi
if [ -z "$O_OPTIONS" ] # header is global, some including scripts may not
then # permit options, they don't need to bother
O_OPTIONS=OFF
fi
O_SILENT=OFF # turned on by -s silent (only usefull with -y)
O_DEBUG=OFF # turned on by -d - calls to Debug produce output when ON
O_FILE=OFF # turned on by -f echo all output to a file $FILENAME
O_CRON=OFF # turned on by -cron cron use only
2000-12-16 02:46:44 +00:00
O_CRONFILE=OFF # turned on by -cron cron and -fcron
O_LOCAL=OFF # turned on by -l run on a local build in $MOZROOT
O_MAIL=OFF # turned on by -m - sends email
if [ -z "$DOMSUF" ]
then
DOMSUF=red.iplanet.com
DS_WAS_SET=FALSE
else
DS_WAS_SET=TRUE
fi
TMPFILES=""
WAIT_FOR=600 # if waiting for an event sleep n seconds before rechecking
# recomended value 10 minutes 600
WAIT_TIMES=30 # recheck n times before giving up - recomended 30 - total of 5h
if [ -z "$QAYEAR" ] # may I introduce - the y2k+1 bug? QA for last year
then # might not work
QAYEAR=`date +%Y`
fi
if [ -z "$TMP" ]
then
if [ -z "$TEMP" ]
then
TMP="/tmp"
else
TMP=$TEMP
fi
fi
if [ ! -w "$TMP" ]
then
echo "Can't write to tmp directory $TMP - exiting"
echo "Can't write to tmp directory $TMP - exiting" >&2
exit 1
fi
KILLPIDS="$TMP/killpids.$$"
export KILLERPIDS
TMPFILES="$TMPFILES $KILLPIDS"
KILL_SELFSERV=OFF # if sourcing script sets this to on cleanup will also
# kill the running selfserv processes
# Set the masterbuilds
if [ -z "$MASTERBUILD" ]
then
MASTERBUILD=y2sun2_Solaris8
#MASTERBUILD=shame_Solaris2.6
MB_WAS_SET=FALSE
else
MB_WAS_SET=TRUE
fi
if [ -z "$BUILDNUMBER" ]
then
BUILDNUMBER=1
fi
export BUILDNUMBER
if [ -z "$NT_MASTERBUILD" ]
then
NT_MASTERBUILD=blowfish_NT4.0_Win95
NT_MB_WAS_SET=FALSE
else
NT_MB_WAS_SET=TRUE
fi
O_LDIR=OFF #local QA dir for NT, temporary
if [ -z "$WIN_WAIT_FOREVER" ] # header is global, some including scripts
then # want the init to wait forever for directories to
# appear (windows only) if OFF exit, if ON wait forever
WIN_WAIT_FOREVER=OFF
fi
EARLY_EXIT=TRUE #before the report file has been created, causes Exit to
#create it
################################### glob_init ##########################
# global shell function, main initialisation function
########################################################################
glob_init()
{
if [ $O_PARAM = "ON" ]
then
eval_opts $* # parse parameters and options - set flags
fi
#if [ $O_CRON = "ON" ] # if running from cron HOST needs to be
#then # known early, so the output file name
set_host # can be constructed. If running interactive
#fi # it needs to be called by sourcing script
. $QASCRIPT_DIR/set_environment #finds out if we are running on Windows
Debug "OPerating system: $os_name $os_full"
if [ $O_WIN = "ON" ]
then
#set_host
write_to_tmpfile
else
Debug "Not a Windows OS"
fi
umask 0
set_dirs
set_files
set_vars
}
################################### set_vars ###########################
# global shell function, sets the environment variables, part of init
########################################################################
set_vars()
{
if [ -z "$LOGNAME" ]
then
if [ $O_WIN = "ON" ]
then
LOGNAME=$USERNAME
else
LOGNAME=$USER
fi
if [ -z "$LOGNAME" ]
then
LOGNAME=$UNAME
if [ -z "$LOGNAME" ]
then
LOGNAME=`basename $HOME`
fi
fi
fi
if [ -z "$LOGNAME" ]
then
Exit "Can't determine current user"
fi
}
################################### set_dirs ###########################
# global shell function, sets the nt masterbuild directories, part of init
########################################################################
find_nt_masterbuild()
{
NT_MASTERDIR=${D2}/${NT_MASTERBUILD}
if [ "${NT_MB_WAS_SET}" = "FALSE" -a ! -d $NT_MASTERDIR ] ; then
if [ -d ${D2}/*NT4* ] ; then
NT_MASTERBUILD=` cd ${D2}; ls -d *NT4* `
Debug "NT_MASTERBUILD $NT_MASTERBUILD"
NT_MASTERDIR=${D2}/${NT_MASTERBUILD}
fi
fi
Debug "NT_MASTERDIR $NT_MASTERDIR"
}
################################### set_dirs ###########################
# global shell function, sets the directories, part of init
########################################################################
set_dirs()
{
#O_LOCAL
if [ "$O_WIN" = "ON" ]
then
win_set_dirs
else
D1=/h/hs-sca15c/export/builds/mccrel/nss/nss$NSSVER
D3=${D2}/${MASTERBUILD}
UXDIST=${D3}/mozilla/dist
RESULTDIR=${D3}/mozilla/tests_results/security
fi
D2=${D1}/builds/${QAYEAR}${BUILDDATE}.${BUILDNUMBER}
UX_MASTERDIR=${D2}/${MASTERBUILD}
find_nt_masterbuild
UXDIST=${UX_MASTERDIR}/mozilla/dist
NTDIST=${NT_MASTERDIR}/mozilla/dist
RESULTDIR=${UX_MASTERDIR}/mozilla/tests_results/security
#O_LOCAL
if [ "$O_WIN" = "ON" ]
then
MASTERBUILD=$NT_MASTERBUILD
MOZILLA_ROOT=${NT_MASTERDIR}/mozilla
else
MOZILLA_ROOT=${UX_MASTERDIR}/mozilla
fi
TESTSCRIPTDIR=${MOZILLA_ROOT}/security/nss/tests
if [ ! -d $TESTSCRIPTDIR ]
then
if [ "$O_WIN" = "ON" -a "$WIN_WAIT_FOREVER" = "ON" ]
then
WaitForever $TESTSCRIPTDIR/all.sh 1
else
Exit "Test directory $TESTSCRIPTDIR does not exist"
fi
fi
COMMON=${TESTSCRIPTDIR}/common
set_objdir
Debug "NTDIST $NTDIST"
Debug "UXDIST $UXDIST"
Debug "TESTSCRIPTDIR $TESTSCRIPTDIR"
Debug "RESULTDIR $RESULTDIR"
Debug "TMP $TMP"
Debug "LOCALDIST_BIN $LOCALDIST_BIN"
Debug "COMMON $COMMON"
Debug "MOZILLA_ROOT $MOZILLA_ROOT"
export D1 D2 NTDIST UXDIST RESULTDIR TESTSCRIPTDIR
export UX_MASTERDIR NT_MASTERDIR COMMON MOZILLA_ROOT
}
################################### set_files ###########################
# global shell function, sets filenames, initializes files, part of init
########################################################################
set_files()
{
2000-12-16 02:46:44 +00:00
if [ $O_CRONFILE = "ON" ]
then
Debug "attempting to create resultfiles"
NEWFILENAME=$RESULTDIR/$HOST.`basename $0`
if [ ! -d $RESULTDIR ]
then
mkdir -p $RESULTDIR || Exit "Error: can't make $RESULTDIR"
fi
if [ ! -w $RESULTDIR ] ; then
Exit "can't touch $NEWFILENAME"
fi
Debug "About to touch $NEWFILENAME "
touch $NEWFILENAME || Exit "Error: can't touch $NEWFILENAME"
Debug "About to cat $FILENAME >>$NEWFILENAME "
cat $FILENAME >>$NEWFILENAME || Exit "Error: can't append $FILENAME to $NEWFILENAME"
TMPFILES="$TMPFILES $FILENAME"
FILENAME=$NEWFILENAME
Debug "Writing output to $FILENAME"
fi
}
################################### eval_opts ##########################
# global shell function, for NT and cron operation, first a tmpfile
# needs to be created
########################################################################
write_to_tmpfile()
{
2000-12-16 02:46:44 +00:00
O_CRONFILE=ON
Debug "Writing to the TMPFILE"
O_FILE=ON
FILENAME=${TMP}/nsstmp.$$ # for now write to the temporary file
# since we don't know the hostname yet
# will be inserted to the real file later
TMPFILES="$TMPFILES nsstmp.$$"
touch $FILENAME || Exit "Error: can't touch $FILENAME"
Debug "Writing output to $FILENAME"
}
################################### eval_opts ##########################
# global shell function, evapuates options and parameters, sets flags
# variables and defaults
########################################################################
eval_opts()
{
while [ -n "$1" ]
do
case $1 in
-cron)
O_CRON=ON
O_SILENT=ON
O_DEBUG=ON # FIXME take out!
O_ALWAYS_YES=ON
write_to_tmpfile
export O_CRON
;;
-l)
O_LOCAL=ON #Now what -
shift
MOZROOT=$1
if [ -z "$MOZROOT" ]
then
glob_usage "Error: -l requires a directory to follow, for example $HOME/src/tip1025 "
fi
Warning "-l not implemented yet (or only halfway)"
Debug "testing locally on $MOZROOT"
;;
-S*|-s*)
O_SILENT=ON
;;
-Y*|-y)
O_ALWAYS_YES=ON
;;
-d*|-D)
O_DEBUG=ON
#set -x
;;
-m*|-M*)
O_MAIL=ON
shift
MAILINGLIST=$1
if [ -z "$MAILINGLIST" ]
then
glob_usage "Error: -m requires a mailinglist to follow, for example sonmi,wtc,nelsonb "
fi
Debug "Sending result to $MAILINGLIST"
;;
2000-12-16 02:46:44 +00:00
-fcron*|-F[Cc][Rr][Oo][Nn]*)
write_to_tmpfile
;;
-f|-F)
O_FILE=ON
shift
FILENAME=$1
if [ -z "$FILENAME" ]
then
glob_usage "Error: -f requires a filename to follow"
fi
#rm -f $FILENAME 2>/dev/null
touch $FILENAME || Exit "Error: can't touch $FILENAME"
#NOTE we append rather that creating
Debug "Writing output to $FILENAME"
;;
-h|-help|"-?")
glob_usage
;;
-*)
glob_usage "Error: Can't handle option $1"
;;
?*)
NSSVER=$1
if [ -z "$NSSVER" ]
then
NSSVER="tip"
Debug "NSS Version: Parameters missing - defaulting to tip!"
else
BUILDDATE=$2
if [ -z "$BUILDDATE" ]
then
BUILDDATE=`date +%m%d`
Debug "Builddate: Parameters missing - defaulting to today!"
else
shift
fi
fi
;;
esac
shift
done
Debug "Builddate $BUILDDATE NssVersion $NSSVER"
if [ -z "$BUILDDATE" ]
then
BUILDDATE=`date +%m%d`
Debug "Builddate: Parameters missing - defaulting to today!"
fi
if [ -z "$NSSVER" ]
then
NSSVER="tip"
Debug "NSS Version: Parameters missing - defaulting to tip!"
fi
Debug "Builddate $BUILDDATE NssVersion $NSSVER"
export BUILDDATE NSSVER
}
######################### win_set_dirs ################################
# global shell function, interactively finds the directories in case
# windows can't get to the default
########################################################################
win_set_dirs()
{
Debug "set Windows Directories..."
TMP=`echo "$TMP" | sed -e 's/\\\/\//g'`
Debug "TMP reformated to $TMP"
if [ "$O_CYGNUS" = ON ]
then
D1=/cygdrive/w/nss/nss$NSSVER
else
D1=w:/nss/nss$NSSVER
fi
if [ ! -w $D1 ]
then
Echo "Windows special... can't write in $D1"
if [ "$O_CYGNUS" = ON ]
then
D1=/cygdrive/u/nss/nss$NSSVER
else
D1="u:/nss/nss$NSSVER"
fi
else
Debug "D1 set to $D1"
return
fi
while [ ! -w $D1 ]
do
2000-12-16 02:46:44 +00:00
if [ "$O_CRONFILE" = "ON" ]
then
Exit "cant write in $D1"
fi
Warning "cant write in $D1"
Echo "input start directory (u:/nss, d:/src/nss, f:/shared/nss) "
read D
if [ -n "$D" ]
then
D1=$D/nss$NSSVER
fi
done
Debug "D1 set to $D1"
}
########################### set_host ##################################
# global shell function, sets required variables HOST and DOMSUF, and asks
# the user if it has been set right
########################################################################
set_host()
{
set_host_done=0
if [ $DS_WAS_SET = FALSE ] #give chance to overwrite, espec. for NT
then
2000-12-22 03:01:10 +00:00
Debug "Domainname was not set..."
DOMSUF=`domainname 2>/dev/null`
if [ -z "$DOMSUF" ]
then
2000-12-22 03:01:10 +00:00
Debug "domainname command did not work ..."
DOMSUF=`echo $HOST | grep '\.' | sed -e "s/[^\.]*\.//"`
if [ -z "$DOMSUF" ]
then
2000-12-22 03:01:10 +00:00
Debug "Domainname not part of the hostname"
DOMSUF=`cat /etc/defaultdomain 2>/dev/null`
if [ -z "$DOMSUF" ]
then
2000-12-22 03:01:10 +00:00
Debug "Domainname needs to be hardcoded to red.iplanet.com"
DOMSUF="red.iplanet.com"
fi
fi
fi
fi
2000-12-22 03:01:10 +00:00
case $HOST in
*\.*)
Debug "HOSTNAME $HOST contains Dot"
HOST=`echo $HOST | sed -e "s/\..*//"`
;;
esac
if [ -z "$HOST" ]
then
2000-12-22 03:01:10 +00:00
HOST=`uname -n`
case $HOST in
*\.*)
Debug "HOSTNAME $HOST contains Dot"
HOST=`echo $HOST | sed -e "s/\..*//"`
;;
esac
fi
if [ $O_DEBUG = "ON" ]
then
while [ $set_host_done -eq 0 ]
do
Echo
ask "DOMSUF=$DOMSUF, HOST=$HOST - OK", "y" "n" &&
set_host_done=1
if [ $set_host_done -eq 0 ]
then
Echo "input DOMSUF: "
read D
if [ -n "$D" ]
then
DOMSUF=$D
fi
Echo "input HOST: "
read H
if [ -n "$H" ]
then
HOST=$H
fi
fi
done
fi
export HOST DOMSUF
Debug "HOST: $HOST, DOMSUF: $DOMSUF"
}
#-----------------------------# UTILS #----------------------------------
################################### set_objdir #########################
# global shell function, sets the object directories and DIST
########################################################################
set_objdir()
{
OBJDIR=`cd ${TESTSCRIPTDIR}/common; gmake objdir_name`
OS_ARCH=`cd ${TESTSCRIPTDIR}/common; gmake os_arch`
#at this point $MASTEBUILD is be either NT or unix
LOCALDIST=${D1}/builds/${QAYEAR}${BUILDDATE}.${BUILDNUMBER}/${MASTERBUILD}/mozilla/dist
LOCALDIST_BIN=${LOCALDIST}/${OBJDIR}/bin
DIST=$LOCALDIST
#FIXME - test so PATH won't contai it double
PATH=$TESTSCRIPTDIR:$LOCALDIST_BIN:$BASEPATH
PATH_CONTAINS_BIN="TRUE"
export PATH_CONTAINS_BIN
Debug "Path after set_objdir $PATH"
Debug "PATH $PATH"
export OBJDIR OS_ARCH LOCALDIST LOCALDIST_BIN DIST PATH
}
########################### Ps #########################################
# global shell function , attempts a platform specific ps
########################################################################
Ps()
{
#AIX, OSF ps -ef, solaris /usr/5bin/ps -ef, win ps -ef but no user id
#linux ps -ef, HP
if [ $os_name = "SunOS" ]
then
/usr/5bin/ps -ef
else
ps -ef
fi
}
########################### kill_by_name ################################
# global shell function , kills the process whose name is given as
# parameter
########################################################################
kill_by_name()
{
for PID in `Ps | grep "$1" | grep -v grep | \
sed -e "s/^ *//g" -e "s/^[^ ]* //" -e "s/^ *//g" -e "s/ .*//g"`
do
if [ $O_WIN = "ON" -a $O_CYGNUS = "ON" ]
then
ask "Do you want to kill Process $PID (`Ps | grep $PID | \
grep -v grep | awk '{ print $1, $2, $6, $7, $8, $9 }' | \
sed -e "s/[0-9]:[0-6][0-9]//g" | grep $PID `)" \
"y" "n" && {
kill $PID
sleep 1
kill -9 $PID 2>/dev/null
}
else
ask "Do you want to kill Process $PID (`Ps | grep $PID | \
grep -v grep | awk '{ print $1, $2, $8, $9, $10, $11 }' | \
sed -e "s/[0-9]:[0-6][0-9]//g" | grep $PID `)" \
"y" "n" && {
kill $PID
sleep 1
kill -9 $PID 2>/dev/null
}
fi
done
}
############################### early_exit ###################################
# global shell function , attempts a little more usefull user notification
# of a complete failure
########################################################################
early_exit()
{
if [ -z "$DOCDIR" ]
then
DOCDIR=`dirname $0`/../doc
fi
if [ -f $DOCDIR/QAerror.html ]
then
Debug "Found QA errorheader"
rm ${FILENAME}.err 2>/dev/null
cp $DOCDIR/QAerror.html ${FILENAME}.err
echo "$1" >>${FILENAME}.err
echo '</font></b></h1>' >>${FILENAME}.err
if [ -n "$FILENAME" -a -f "$FILENAME" ]
then
cat $FILENAME | sed -e "s/^/<br>/" >>${FILENAME}.err
fi
echo '</body></html>' >>${FILENAME}.err
cat ${FILENAME}.err | rmail $MAILINGLIST
rm ${FILENAME}.err 2>/dev/null
#echo "cat ${FILENAME}.err | rmail $MAILINGLIST "
fi
}
############################### Exit ###################################
# global shell function , central exiting point
# cleanup: temporary files, kill the remaining selfservers if sourcing
# script sets KILL_SELFSERV
########################################################################
Exit()
{
Echo $1
if [ "$O_CRON" = "OFF" ]
then
echo $1 >&2
fi
if [ -f "${KILLPIDS}" ]
then
Debug "Attempting to kill background processes...`cat ${KILLPIDS}`"
kill `cat "${KILLPIDS}"`
sleep 1
kill -9 `cat "${KILLPIDS}"`
fi
if [ -n "${TMPFILES}" ]
then
Debug "rm -f ${TMPFILES}"
rm -f $TMPFILES 2>/dev/null
fi
O_ALWAYS_YES=ON # set to non-interactive - don't ask anymore questions here
if [ $KILL_SELFSERV = "ON" ]
then
kill_by_name selfserv
fi
if [ $O_MAIL = "ON" -a $O_FILE = "ON" ]
then
if [ $EARLY_EXIT = TRUE ] #before the report file has been created
then
early_exit "$1"
elif [ -n "$FILENAME" -a -f "$FILENAME" ]
then
cat $FILENAME | rmail $MAILINGLIST
fi
rm $FILENAME 2>/dev/null
elif [ $O_MAIL = "ON" -a $EARLY_EXIT = TRUE ]
then
early_exit "$1"
rm $FILENAME 2>/dev/null
fi
#chmod a+rw ${RESULTDIR} ${RESULTDIR}/* ${RESULTDIR}/*/* &
exit
}
trap "rm -f ${TMPFILES} 2>/dev/null; Exit 'killed... cleaning up...'" 2 3 15
################################ Wait ##################################
# global shell function to wait for an event to happen, 1st parameter
# filename to watch, 2nd parameter 0 - wait for it to disappear, 1 wait
# for it to be created.
# uses the variables WAIT_FOR and WAIT_TIMES
# WAIT_FOR: if waiting for an event sleep n seconds before rechecking
# recomended value 10 minutes 600
# WAIT_TIMES: recheck n times before giving up to prevent endless loop
# recomended 30 - total of 5h
########################################################################
Wait()
{
i=0
Debug "Waiting for $1"
while [ $i -lt $WAIT_TIMES ]
do
i=`expr $i + 1`
if [ -f "$1" -a $2 -eq 1 ] # if file exists and is supposed to
then
return
fi
if [ ! -f "$1" -a $2 -eq 0 ] # not exists and not supposed to exist
then
return
fi
Debug "Waiting for $1, loop #$i, about to sleep $WAIT_FOR seconds zzzz..."
sleep $WAIT_FOR
done
TOTAL=`expr $WAIT_TIMES \* $WAIT_FOR / 60`
Exit "I HAVE WAITED LONG ENOUGH FOR $1 NOW, I'M GONE! (THAT WAS A TOTAL OF $TOTAL MINUTES) I have better things to do... "
}
################################ WaitForever ##################################
# global shell function to wait for an event to happen, 1st parameter
# filename to watch, 2nd parameter 0 - wait for it to disappear, 1 wait
# for it to be created.
# because we daon't have any relyable cron on NT...
########################################################################
WaitForever()
{
i=0
Debug "Waiting for $1"
TOTAL=0
while [ 1 ]
do
i=`expr $i + 1`
if [ -f "$1" -a $2 -eq 1 ] # if file exists and is supposed to
then
return
fi
if [ ! -f "$1" -a $2 -eq 0 ] # not exists and not supposed to exist
then
return
fi
Debug "Waiting for $1, loop #$i, about to sleep $WAIT_FOR seconds Total $TOTAL"
sleep $WAIT_FOR
TOTAL=`expr $i \* $WAIT_FOR / 60`
if [ -n "$MAX_FOREVER" ] # we are cheating. Forever can be very short...
then
if [ "$TOTAL" -gt "$MAX_FOREVER" ]
then
Exit "I HAVE WAITED LONG ENOUGH FOR $1 NOW, I'M GONE! (THAT WAS A TOTAL OF $TOTAL MINUTES) I have better things to do... "
fi
fi
done
}
################################### is_running #########################
# global shell function , implements primitive locking mechanism
# filename is passed as a parameter, if filename.* exists we assume calling
# script is running already and exit, otherwise filename.processid is
# created
########################################################################
is_running()
{
Debug "Testing if $0 is already running... file ${1} - ${1}.$$"
if [ -f ${1}.* ]
then
Exit "$0 seems to be running already ($1 exists) - Exiting"
fi
TMPFILES="$TMPFILES ${1}.$$"
echo "running $0 on `date` PID $$" >${1}.$$
Debug "wrote \"running $0 on `date` PID $$\" to ${1}.$$"
}
#---------------------------# USERCOM #---------------------------------
############################## Echo #####################################
# global shell function , depending on the options the output gets written
# to a file, or is being discarded
# FIXME \n and \c are mistreates by differnet shells, and linux has /bin/echo
# instead of /usr/bin/echo
########################################################################
Echo ()
{
if [ $O_SILENT = OFF ]
then
echo "$*"
#/usr/bin/echo "$*"
fi
if [ $O_FILE = ON ]
then
echo "$*" >>$FILENAME
fi
}
################################### ask ################################
# global shell function, Asks the a question, and gives the returns 0
# on the 1st choice, 1 on the 2nd choice
#
# PARAMETERS:
# $1 question text
# $2 1st choice
# $3 2nd choice
#
# MODIFIERS:
# -y O_ALWAYS_YES will assume a first choice always (not neccessaryly "y")
#
# RETURN:
# 0 - User picked 1st choice
# 1 - User picked 2nd choice
#
# EXAMPLE
# ask "Would you like to continue" "y" "n" || Exit
# will produce the string "Would you like to continue (y/n) ?",
# read input from keyboard (or assume a yes with option -y)
# - on a yes it will return 0, on a no it will return 1, the
# shell interprets it as error and the || Exit will be executed
#
# NOTE: NEVER use "n" as the second parameter - it will mess up -y
# don't ask "Continue" "n" "y" || Exit # it will Exit on a "y"
#
########################################################################
Ask()
{
ask $*
}
ask()
{
if [ $O_ALWAYS_YES = ON ]
then
Echo "$1 ($2/$3) ?"
Echo "YES!"
return 0
fi
A=""
while [ 1 ]
do
Echo "$1 ($2/$3) ?"
read A
if [ -n "$A" ]
then
if [ $A = $2 ]
then
return 0
elif [ $A = $3 ]
then
return 1
fi
fi
done
return 0
}
################################### Warning ############################
# global shell function, Asks the user a "... continue? (y/n)" question,
# and exits when the user answers with no
# NOTE -y will answer the warnings always with yes
########################################################################
Warning ()
{
ask "WARNING: $0: \n $* continue " "y" "n" || Exit
}
################################### Debug ############################
# global shell function, when option -d Debugging output is written
########################################################################
Debug()
{
if [ $O_DEBUG = ON ]
then
Echo "DEBUG: (`date +%H:%M`) $0: $*"
fi
}
################################### line ###############################
# global shell function, supposed to make output more readable...
########################################################################
line()
{
Echo
#Echo "======================================================================="
#Echo
}
################################### opt_usage ##########################
# global shell function, tells user about available options
########################################################################
opt_usage()
{
if [ $O_OPTIONS = "ON" ]
then
Echo
line
Echo
Echo " -y answer all questions with y - use at your own risk..."
Echo " -s silent (only usefull with -y)"
Echo " -h, -? - you guessed right - displays this text"
Echo " -d debug"
Echo " -f <filename> - write the (error)output to filename"
2000-12-16 02:46:44 +00:00
Echo " -fcronfile produces the resultfiles in the same locations"
Echo " as would have been produced with -cron"
Echo " -m <mailinglist> - send filename to mailinglist (csl "
Echo " example sonmi,nelsonb,wtc) only useful with -f"
Echo " -cron equivalient to -y -s -d -f \$RESULTDIR/\$HOST.nssqa"
Echo " -l <mozroot> run on a local build"
fi
}
################################### glob_usage #########################
# global shell function, how to use the calling script (parameters, options)
########################################################################
glob_usage()
{
line
Echo $1
Echo
if [ $O_OPTIONS = "ON" ]
then
Echo "usage $0 [options] nssversion builddate"
else
Echo "usage $0 nssversion builddate"
fi
Echo " for example: $0 30b 0926"
Echo " $0 31 1002"
opt_usage
Echo
Exit "$1"
}
tell()
{
if [ $O_SILENT = OFF ]
then
line
pwd
ls -CF
line
fi
if [ $O_FILE = ON ]
then
line
pwd >>$FILENAME
ls -CF >>$FILENAME
line
fi
}
#set_host()
#{
#set_host_done=0
#HOST=`echo $HOST | sed -e "s/.red.iplanet.com//"`
#DOMSUF=`cat /etc/defaultdomain 2>/dev/null`
#if [ -z "$DOMSUF" ]
#then
#DOMSUF="red.iplanet.com"
#fi
#if [ -z "$HOST" ]
#then
#HOST=`uname -n | sed -e "s/.red.iplanet.com//"`
#fi
#while [ $set_host_done -eq 0 ]
#do
#Echo
#ask "DOMSUF=$DOMSUF, HOST=$HOST - OK", "y" "n" &&
#set_host_done=1
#if [ $set_host_done -eq 0 ]
#then
#Echo "input DOMSUF: "
#read D
#if [ -n "$D" ]
#then
#DOMSUF=$D
#fi
#Echo "input HOST: "
#read H
#if [ -n "$H" ]
#then
#HOST=$H
#fi
#fi
#done
#export HOST DOMSUF
#Debug "HOST: $HOST, DOMSUF: $DOMSUF"
#}
if [ $O_INIT = "ON" ]
then
glob_init $*
fi
EARLY_EXIT=FALSE