summaryrefslogtreecommitdiffstats
path: root/security/nss/tests/header
diff options
context:
space:
mode:
Diffstat (limited to 'security/nss/tests/header')
-rw-r--r--security/nss/tests/header1635
1 files changed, 1635 insertions, 0 deletions
diff --git a/security/nss/tests/header b/security/nss/tests/header
new file mode 100644
index 0000000000..d15d117adf
--- /dev/null
+++ b/security/nss/tests/header
@@ -0,0 +1,1635 @@
+#! /bin/sh
+
+########################################################################
+#
+# /u/sonmi/bin/header - /u/svbld/bin/init/nss/header
+#
+# variables, utilities and shellfunctions 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, 332, tip 32)
+# 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
+# -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
+# -ml <mailinglist> - send link to filename to mailinglist (csl)
+# only useful with -f
+# -cron equivalient to -y -s -d -f $RESULTDIR/$HOST.<scriptname>
+# -t run on a tinderbox build that means: local, from the startlocation
+# -l <mozroot directory> run on a local build mozroot
+# -ln <mozroot> copy a networkbuild to a local directory mozroot,
+# used for networkindipendend QA
+# -lt try to copy a networkbuild to a local directory, if not possible
+# run on the network
+# used for networkindipendend QA
+#
+# 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`
+ if [ "$QASCRIPT_DIR" = '.' ]
+ then
+ QASCRIPT_DIR=`pwd`
+ fi
+fi
+export QASCRIPT_DIR
+
+O_HWACC=OFF
+if [ -z "$O_ALWAYS_YES" ] ; then
+ O_ALWAYS_YES=OFF # turned on by -y answer all questions with y
+fi
+
+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)
+if [ -z "$O_DEBUG" ] ; then
+ O_DEBUG=OFF # turned on by -d - calls to Debug produce output when ON
+fi
+O_FILE=OFF # turned on by -f echo all output to a file $FILENAME
+O_CRON=OFF # turned on by -cron cron use only
+O_CRONFILE=OFF # turned on by -cron cron and -fcron
+O_LOCAL=OFF # turned on by -l* run on a local build in $LOCAL_MOZROOT
+O_LN=OFF # turned on by -ln and -lt, test a networkbuild locally
+O_MAIL=OFF # turned on by -m - sends email
+O_MAIL_LINK=OFF # turned on by -ml - sends email
+O_TBX=OFF # turned on by -t run on a tinderbox build
+ # that means: local, from the startlocation
+
+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 "$UX_MASTERBUILD" ]
+then
+ UX_MASTERBUILD=booboo_Solaris8
+ #if [ ! -d $UX_MASTERBUILD ] ; then
+ #UX_MASTERBUILD=booboo_Solaris8_forte6
+ #fi
+ UX_MB_WAS_SET=FALSE
+else
+ UX_MB_WAS_SET=TRUE
+fi
+if [ -z "$NT_MASTERBUILD" ]
+then
+ NT_MASTERBUILD=blowfish_NT4.0_Win95
+ NT_MB_WAS_SET=FALSE # in this case later functions can override if
+ # they find a different build that looks like NT
+else
+ NT_MB_WAS_SET=TRUE
+fi
+if [ -z "$MASTERBUILD" ]
+then
+ MASTERBUILD=$UX_MASTERBUILD
+fi
+
+ # Set the default build
+if [ -z "$BUILDNUMBER" ]
+then
+ BUILDNUMBER=1
+fi
+export BUILDNUMBER
+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
+
+ # NOTE: following variables have to change
+ # from release to release
+if [ -z "$BC_MASTER" ] # master directory for backwardscompatibility testing
+then
+ RH="NO"
+ grep 7.1 /etc/redhat-release > /dev/null 2>/dev/null && RH="YES"
+ grep 7.2 /etc/redhat-release > /dev/null 2>/dev/null && RH="YES"
+
+ if [ "$RH" = "YES" ]
+ then # NSS-3-3-1RTM
+ BC_UX_MASTER=nss331/builds/20010928.2.331-RTM/booboo_Solaris8
+ BC_NT_MASTER=nss331/builds/20010928.2.331-RTM/blowfish_NT4.0_Win95
+ else # NSS-3-2-2RTM
+ BC_UX_MASTER=nss322/builds/20010820.1/y2sun2_Solaris8
+ BC_NT_MASTER=nss322/builds/20010820.1/blowfish_NT4.0_Win95
+ fi
+ BC_MASTER=$BC_UX_MASTER
+ BC_MASTER_WAS_SET=FALSE
+else
+ BC_MASTER_WAS_SET=TRUE
+fi
+BC_RELEASE=3.2
+export BC_RELEASE
+
+EARLY_EXIT=TRUE #before the report file has been created, causes Exit to
+ #create it
+
+UX_D0=/share/builds/mccrel3/nss
+
+################################### 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 running from cron HOST needs to be known early,
+ init_host # so the output file name can be constructed.
+ Debug "Setting up environment...( $QASCRIPT_DIR/set_environment) "
+ . $QASCRIPT_DIR/set_environment #finds out if we are running on Windows
+ Debug "OPerating system: $os_name $os_full"
+ umask 0
+ init_dirs
+ init_files
+ init_vars
+}
+
+################################### init_vars ###########################
+# global shell function, sets the environment variables, part of init
+########################################################################
+init_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
+ case $HOST in
+ iws-perf)
+ O_HWACC=ON
+ HWACC_LIST="rainbow ncipher"
+ #MODUTIL="-add rainbow -libfile /usr/lib/libcryptoki22.so"
+ export HWACC_LIST
+ ;;
+ *)
+ O_HWACC=OFF
+ ;;
+ esac
+ export O_HWACC
+}
+
+########################################################################
+# functions below deal with setting up the directories and PATHs for
+# all different flavors of OS (Unix, Linux, NT MKS, NT Cygnus) and QA
+# (Standard, local tinderbox)
+########################################################################
+
+########################## find_nt_masterbuild #########################
+# global shell function, sets the nt masterbuild directories, part of init
+########################################################################
+find_nt_masterbuild()
+{
+ NT_MASTERDIR=${DAILY_BUILD}/${NT_MASTERBUILD}
+ if [ "${NT_MB_WAS_SET}" = "FALSE" -a ! -d $NT_MASTERDIR ] ; then
+ if [ -d ${DAILY_BUILD}/*NT4* ] ; then
+ NT_MASTERBUILD=` cd ${DAILY_BUILD}; ls -d *NT4* `
+ Debug "NT_MASTERBUILD $NT_MASTERBUILD"
+ NT_MASTERDIR=${DAILY_BUILD}/${NT_MASTERBUILD}
+ fi
+ fi
+ Debug "NT_MASTERDIR $NT_MASTERDIR"
+}
+
+################################### set_daily_build_dirs ###########################
+# global shell function, sets directories
+########################################################################
+set_daily_build_dirs()
+{
+ if [ "$O_LOCAL" = "ON" -a "$O_LN" = "OFF" ] ; then
+ DAILY_BUILD=${LOCAL_MOZROOT} # on local builds NSS_VER_DIR and DAILY_BUILD are
+ # set to the LOCAL_MOZROOT, since it is not sure
+ # if ../.. (DAILY_BUILD) even exists
+ LOCALDIST=${LOCAL_MOZROOT}/dist
+ elif [ "$O_TBX" = "ON" ] ; then
+ DAILY_BUILD="$TBX_DAILY_BUILD"
+ LOCALDIST=${UXDIST}
+ else
+ DAILY_BUILD=${NSS_VER_DIR}/builds/${QAYEAR}${BUILDDATE}.${BUILDNUMBER}
+ LOCALDIST=${DAILY_BUILD}/${MASTERBUILD}/mozilla/dist
+ fi
+}
+
+map_os64()
+{
+ IS_64=""
+ case `uname -s` in
+ SunOS)
+ MAPPED_OS=Solaris*8
+ IS_64=`(isainfo -v | grep 64)>/dev/null 2>/dev/null && echo 64 bit`
+ if [ "$O_TBX" = "OFF" ] ; then
+ set_osdir
+ if [ -n "$IS_64" ]
+ then #Wait for the 64 bit build to finish...
+ Debug Testing build for $MAPPED_OS in $OSDIR
+ Wait ${OSDIR}/SVbuild.InProgress.1 0
+ fi
+ fi
+ ;;
+ AIX)
+ IS_64=`lslpp -l | grep "bos.64bit"> /dev/null && echo 64 bit`
+ ;;
+ HP-UX)
+ IS_64=`getconf KERNEL_BITS | grep 64 >/dev/null && echo 64 bit`
+ ;;
+ esac
+ Debug "Mapped OS to $MAPPED_OS"
+}
+
+
+
+################################### copy_to_local ########################
+# global shell function, copies the necessary directories from the
+# daily build aerea to the local disk
+########################################################################
+copy_to_local()
+{
+ Debug "Copy network directories to local directories"
+ C2L_ERROR=0
+ if [ ! -d ${LOCAL_MOZROOT}/dist ] ; then
+ mkdir -p ${LOCAL_MOZROOT}/dist || C2L_ERROR=1
+ fi
+ if [ ! -d ${LOCAL_MOZROOT}/security/nss ] ; then
+ mkdir -p ${LOCAL_MOZROOT}/security/nss || C2L_ERROR=2
+ fi
+ if [ $C2L_ERROR != 0 ] ; then
+ Exit "copy_to_local: Can t make necesssary directories ($C2L_ERROR ) "
+ fi
+ if [ ! -d ${LOCAL_MOZROOT}/security/nss/tests ] ; then
+ cp -r ${TESTSCRIPTDIR} ${LOCAL_MOZROOT}/security/nss || C2L_ERROR=1
+ fi
+ if [ ! -d ${LOCAL_MOZROOT}/security/coreconf ] ; then
+ cp -r ${MOZILLA_ROOT}/security/coreconf ${LOCAL_MOZROOT}/security || C2L_ERROR=2
+ fi
+
+ NO_DIRS=0;
+ if [ "$O_WIN" = "ON" ] ; then
+ OS_TARGET=WINNT;export OS_TARGET
+ fi
+ unset BUILD_OPT;export BUILD_OPT;
+ unset USE_64;export USE_64;
+#FIXME only tested on 64 bit Solaris and only got 32 bit builds
+ while [ $NO_DIRS -lt 4 ] ; do
+ # first time thru: Debug 32 bit NT
+ set_objdir
+ Debug "Copying ${OBJDIR}..."
+ if [ ! -d ${LOCAL_MOZROOT}/dist/${OBJDIR} ] ; then
+ cp -r ${LOCALDIST}/${OBJDIR} ${LOCAL_MOZROOT}/dist || C2L_ERROR=3
+ fi
+ NO_DIRS=`expr $NO_DIRS + 1`
+ if [ $NO_DIRS = 1 ] ; then # 2nd time: OPT 32 bit NT
+ BUILD_OPT=1; export BUILD_OPT;
+ elif [ $NO_DIRS = 2 ] ; then # 3rd time: OPT, either 64 bit or Win95 or force exit
+ if [ "$O_WIN" = "ON" ] ; then
+ OS_TARGET=WIN95;export OS_TARGET
+ else
+ map_os64
+ if [ -z "$IS_64" ] ; then #32 bit platform
+ NO_DIRS=4
+ else
+ USE_64=1; export USE_64
+ fi
+ fi
+ elif [ $NO_DIRS = 3 ] ; then # 4th time: Debug either 64 bit or Win95
+ unset BUILD_OPT;export BUILD_OPT;
+ fi
+
+
+ done
+ if [ $C2L_ERROR != 0 ] ; then
+ Exit "copy_to_local: Can t copy necesssary directories ($C2L_ERROR ) "
+ fi
+ unset TESTSCRIPTDIR
+ unset TESTDIR
+ unset RESULTDIR
+ O_LN=OFF #from here on pretend it is regular -l local QA FIXME, might cause
+ #problems with the backwardcompatibility tests
+ Debug "Successfully copied network directories to local directories"
+}
+
+################################### local_dirs ###########################
+# global shell function, sets the directories for local QA
+########################################################################
+local_dirs()
+{
+ Debug "Set directories for local QA"
+ #if [ "$O_WIN" = "ON" ] ; then
+ #win_set_tmp
+ #fi
+ NSS_VER_DIR=${LOCAL_MOZROOT} # on local builds NSS_VER_DIR and DAILY_BUILD are
+ # set to the LOCAL_MOZROOT, since it is not sure
+ # if ../../../.. (NSS_VER_DIR) even exists
+ if [ -z "${RESULTDIR}" ] ; then # needs to be local as well
+ Debug "Setting RESULTDIR for local QA"
+ RESULTDIR="${LOCAL_MOZROOT}/tests_results/security/${HOST}-`date +%Y%m%d-%H.%M`"
+ fi
+ set_daily_build_dirs
+ UX_MASTERDIR=`dirname ${LOCAL_MOZROOT}`
+ NT_MASTERDIR=$UX_MASTERDIR
+ MOZILLA_ROOT=${LOCAL_MOZROOT}
+
+ UXDIST=${MOZILLA_ROOT}/dist
+ NTDIST=${UXDIST}
+
+ if [ -z "${TESTDIR}" ] ; then
+ Debug "Setting TESTDIR for local QA"
+ TESTDIR=${RESULTDIR}
+ fi
+ if [ -n "$TESTDIR" ] ; then
+ if [ ! -d $TESTDIR ] ; then
+ Debug "Making TESTDIR for local QA"
+ mkdir -p $TESTDIR
+ fi
+ fi
+ export TESTDIR
+ Debug "RESULTDIR $RESULTDIR TESTDIR $TESTDIR"
+
+ TESTSCRIPTDIR=${LOCAL_MOZROOT}/security/nss/tests
+ COMMON=${TESTSCRIPTDIR}/common
+
+ set_objdir
+ debug_dirs
+ export_dirs
+}
+
+
+################################### tbx_dirs ###########################
+# global shell function, sets the directories for tinderbox QA
+########################################################################
+tbx_dirs()
+{
+ Debug "Set directories for tinderbox"
+ if [ "$O_WIN" = "ON" ] ; then
+ win_set_d1 # we need the NSS_VER_DIR later
+ else
+ NSS_VER_DIR="$UX_D0"/nss$NSSVER
+ fi
+ if [ -z "${RESULTDIR}" ] ; then # needs to be different for tinderbox
+ Debug "Setting RESULTDIR for tinderbox"
+ TBX_NOBITS=""
+ echo $QASCRIPT_DIR | grep 64 >/dev/null && TBX_NOBITS=64
+ TRD="${HOST}${TBX_NOBITS}-`date +%Y%m%d-%H.%M`"
+ RESULTDIR="${NSS_VER_DIR}/tinderbox/tests_results/security/${TRD}"
+ if [ ${DOMSUF} = "mcom.com" -o ${DOMSUF} = "netscape.com" -o ${DOMSUF} = "nscp.aoltw.net" ] ; then
+ URL="sbs-rel.nscp.aoltw.net"
+ else
+ URL="cindercone.red.iplanet.com"
+ fi
+ if [ "$O_WIN" = "ON" ] ; then
+ RESULTDIRURL="<a title=\"QA Results\" href=\"http://${URL}${UX_D0}/nsstip/tinderbox/tests_results/security/${TRD}\">QA</a>"
+ else
+ RESULTDIRURL="<a title=\"QA Results\" href=\"http://${URL}${RESULTDIR}\">QA</a>"
+ fi
+ Debug "RESULTDIRURL TinderboxPrint:$RESULTDIRURL"
+ fi
+ TBX_DAILY_BUILD=`cd ../../../../..;pwd`
+ NSS_VER_DIR="${TBX_DAILY_BUILD}/../.."
+ TBX_LOGFILE_DIR=`ls ${NSS_VER_DIR}/logs/tinderbox | sed -e 's/ .*//g'`
+ if [ -z "$TBX_LOGFILE_DIR" ] ; then
+ TBX_LOGFILE_DIR=`ls ${NSS_VER_DIR}/logs/tbx | sed -e 's/ .*//g'`
+ TBX_LOGFILE_DIR="${NSS_VER_DIR}/logs/tbx/${TBX_LOGFILE_DIR}"
+ else
+ TBX_LOGFILE_DIR="${NSS_VER_DIR}/logs/tinderbox/${TBX_LOGFILE_DIR}"
+ fi
+ Debug "Set TBX_LOGFILE_DIR ${TBX_LOGFILE_DIR}"
+
+ set_daily_build_dirs
+ UX_MASTERDIR=`cd ../../../..;pwd`
+ NT_MASTERDIR=$UX_MASTERDIR
+ MOZILLA_ROOT=$UX_MASTERDIR/mozilla
+
+ UXDIST=${MOZILLA_ROOT}/dist
+ NTDIST=${UXDIST}
+
+ if [ -z "${TESTDIR}" ] ; then
+ Debug "Setting TESTDIR for tinderbox"
+ TESTDIR=${RESULTDIR}
+ fi
+ if [ -n "$TESTDIR" ] ; then
+ if [ ! -d $TESTDIR ] ; then
+ Debug "Making TESTDIR for tinderbox"
+ mkdir -p $TESTDIR
+ fi
+ fi
+ Debug "Making QAstatus file"
+ echo "QA running" >${TESTDIR}/QAstatus
+ export TESTDIR
+ Debug "RESULTDIR $RESULTDIR TESTDIR $TESTDIR"
+
+ TESTSCRIPTDIR=`pwd`
+ COMMON=${TESTSCRIPTDIR}/common
+
+ set_objdir
+ debug_dirs
+ export_dirs
+}
+
+################################### init_mcom ###########################
+# global shell function, sets domain specific variables for AOL's
+# domains according to Bishakha's instructions
+########################################################################
+init_mcom()
+{
+ Debug "Running in mcom or netscape domain - changing directories..."
+ if [ "${UX_MB_WAS_SET}" = "FALSE" ] ; then #in case it was set
+ # before script was called use these values
+ UX_MASTERBUILD=spd04_Solaris8
+ fi
+ if [ "${NT_MB_WAS_SET}" = "FALSE" ] ; then
+ NT_MASTERBUILD=spd06_NT4
+ fi
+
+ MASTERBUILD=$UX_MASTERBUILD
+ if [ "${BC_MASTER_WAS_SET}" = "FALSE" ] ; then
+ BC_UX_MASTER=nss322/builds/20010820.1/y2sun2_Solaris8
+ BC_NT_MASTER=nss322/builds/20010820.1/blowfish_NT4.0_Win95
+ BC_MASTER=$BC_UX_MASTER
+ fi
+ UX_D0=/share/builds/sbsrel2/nss
+ URL="sbs-rel.nscp.aoltw.net"
+}
+################################### init_dirs ###########################
+# global shell function, sets the directories for standard QA
+# calls special functions for tinderbox, windows or local QA, part of init
+########################################################################
+init_dirs()
+{
+ if [ ${DOMSUF} = "mcom.com" -o ${DOMSUF} = "netscape.com" -o ${DOMSUF} = "nscp.aoltw.net" ] ; then
+ init_mcom
+ fi
+ if [ $O_WIN = "ON" ] ; then
+ win_set_tmp
+ write_to_tmpfile
+ MASTERBUILD=$NT_MASTERBUILD
+ BC_MASTER=$BC_NT_MASTER
+ fi
+ if [ "$O_LOCAL" = "ON" -a $O_LN = "OFF" ] ; then # if it is a LN we need to know
+ # all the directories off the network first to copy them
+ local_dirs # O_LOCAL alone assumes that all the directories are already there
+ return
+ elif [ "$O_TBX" = "ON" ] ; then
+ tbx_dirs
+ return
+ elif [ "$O_WIN" = "ON" ] ; then
+ win_set_d1
+ else
+ NSS_VER_DIR="$UX_D0"/nss$NSSVER
+ fi
+ #set -x
+
+ set_daily_build_dirs
+
+ if [ -z "${BCDIST}" ] ; then
+ #BCDIST=/share/builds/mccrel3/nss/${BC_MASTER}/mozilla/dist
+ BCDIST=${NSS_VER_DIR}/../${BC_MASTER}/mozilla/dist
+ if [ ! -d $BCDIST -a `basename $0` != jssqa ] ; then
+ ask "Backward compatibility directory $BCDIST does not exist, continue" "y" "n" || Exit
+ fi
+ fi
+
+ UX_MASTERDIR=${DAILY_BUILD}/${UX_MASTERBUILD}
+ find_nt_masterbuild
+
+ if [ "$O_WIN" = "ON" ]
+ then
+ MOZILLA_ROOT=${NT_MASTERDIR}/mozilla
+ else
+ MOZILLA_ROOT=${UX_MASTERDIR}/mozilla
+ fi
+
+ UXDIST=${UX_MASTERDIR}/mozilla/dist
+ NTDIST=${NT_MASTERDIR}/mozilla/dist
+
+ if [ -z "${RESULTDIR}" ] ; then
+ RESULTDIR=${UX_MASTERDIR}/mozilla/tests_results/security
+ fi
+
+ if [ -n "$PRODUCT_TO_TEST" -a "$PRODUCT_TO_TEST" = "JSS" ] ; then
+
+ if [ "$O_WIN" = "ON" ] ; then
+ JSS_NSS_SRC_DIR=$JSS_NSS_NT_SRC_DIR
+ fi
+ TESTSCRIPTDIR=${NSS_VER_DIR}/../${JSS_NSS_SRC_DIR}/mozilla/security/nss/tests
+ else
+ TESTSCRIPTDIR=${MOZILLA_ROOT}/security/nss/tests
+ fi
+
+ if [ ! -d $TESTSCRIPTDIR -a `basename $0` != jssqa ] ; 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
+ if [ "$O_LOCAL" = "ON" -a $O_LN = "ON" ] ; then # if it is a LN we need to know
+ # all the directories off the network first to copy them
+ copy_to_local
+ local_dirs
+ fi
+ #set +x
+
+
+ set_objdir
+ debug_dirs
+ export_dirs
+}
+
+debug_dirs()
+{
+ 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"
+ Debug "BCDIST $BCDIST"
+}
+
+export_dirs()
+{
+ export NSS_VER_DIR DAILY_BUILD NTDIST UXDIST RESULTDIR TESTSCRIPTDIR BCDIST
+ export UX_MASTERDIR NT_MASTERDIR COMMON MOZILLA_ROOT
+}
+
+set_osdir()
+{
+ OSDIR=${DAILY_BUILD}/*${MAPPED_OS}*
+}
+
+################################### init_files ###########################
+# global shell function, sets filenames, initializes files, part of init
+########################################################################
+init_files()
+{
+ if [ $O_CRONFILE = "ON" ]
+ then
+ Debug "attempting to create resultfiles"
+ if [ "$O_TBX" = "ON" ] ; then
+ NEWFILENAME=${TBX_LOGFILE_DIR}/qa.log
+ if [ ! -w ${TBX_LOGFILE_DIR} ] ; then
+ Exit "can't touch $NEWFILENAME"
+ fi
+ else
+ NEWFILENAME=$RESULTDIR/$HOST.`basename $0`
+ fi
+ 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"
+ if [ "$O_TBX" = "ON" ] ; then
+ echo "QA results in $RESULTDIR" >>$NEWFILENAME || Exit "Error: can't write to $NEWFILENAME"
+ fi
+ 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
+
+}
+
+################################### write_to_tmpfile ##########################
+# global shell function, for NT and cron operation, first a tmpfile
+# needs to be created
+########################################################################
+write_to_tmpfile()
+{
+ O_CRONFILE=ON
+ 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"
+}
+
+############################# turn_on_cronoptions ######################
+# global shell function, turns on options needed for cron and tinderbox
+########################################################################
+turn_on_cronoptions()
+{
+ O_CRON=ON
+ O_SILENT=ON
+ O_DEBUG=ON # FIXME take out!
+ O_ALWAYS_YES=ON
+ write_to_tmpfile
+}
+
+########################## test_mozroot ##########################
+# global shell function, determines if the variable LOCAL_MOZROOT is set,
+# and is usable as mozilla root diretory for a local QA
+###################################################################
+test_mozroot()
+{
+ PWD=`pwd`
+ Debug "LOCAL_MOZROOT = $LOCAL_MOZROOT"
+ case "$LOCAL_MOZROOT" in
+ [0-9-]*|tip)
+ glob_usage "Error: -"$1" requires a directoryname to follow (start with a letter) "
+ ;;
+ \.\.)
+ LOCAL_MOZROOT=`dirname $PWD`
+ ;;
+ \.)
+ LOCAL_MOZROOT=$PWD
+ ;;
+ \.\/*)
+ LOCAL_MOZROOT=`echo $LOCAL_MOZROOT | sed -e "s/^\.//"`
+ LOCAL_MOZROOT="${PWD}${LOCAL_MOZROOT}"
+ ;;
+ \.\.\/*)
+ LOCAL_MOZROOT="${PWD}/${LOCAL_MOZROOT}"
+ ;;
+ \/*|[a-zA-Z]:\/*)
+ ;;
+ ?*)
+ LOCAL_MOZROOT="${PWD}/${LOCAL_MOZROOT}"
+ ;;
+ *)
+ glob_usage "Error: -"$1" requires a directoryname to follow"
+ ;;
+ esac
+ Debug "Reformated MOZROOT to $LOCAL_MOZROOT"
+ if [ "$1" = "ln" ] ; then
+ LOCAL_MOZROOT_PARENT=`dirname $LOCAL_MOZROOT`
+ if [ ! -d $LOCAL_MOZROOT_PARENT -o ! -w $LOCAL_MOZROOT_PARENT -o \
+ ! -x $LOCAL_MOZROOT_PARENT ] ; then
+ Exit "Error: Can't create $LOCAL_MOZROOT (permissions)"
+ fi
+ if [ ! -d "$LOCAL_MOZROOT" ] ; then
+ mkdir $LOCAL_MOZROOT ||
+ Exit "Error: Can't create mozroot $LOCAL_MOZROOT (mkdir failed)"
+ else
+ ask "mozroot $LOCAL_MOZROOT exists - continue (y will remove dir) ?" \
+ "y" "n" || Exit
+ rm -rf $LOCAL_MOZROOT/dist $LOCAL_MOZROOT/security $LOCAL_MOZROOT/tests_results ||
+ Exit "Error: Can't clean mozroot $LOCAL_MOZROOT"
+ fi
+ fi
+ if [ ! -d "$LOCAL_MOZROOT" ] ; then
+ glob_usage "Error: mozilla root $LOCAL_MOZROOT not a valid directory"
+ fi
+}
+
+################################### eval_opts ##########################
+# global shell function, evapuates options and parameters, sets flags
+# variables and defaults
+########################################################################
+eval_opts()
+{
+ while [ -n "$1" ]
+ do
+ case $1 in
+ -cron)
+ turn_on_cronoptions
+ ;;
+ -T*|-t*)
+ O_TBX=ON
+ turn_on_cronoptions
+ O_SILENT=OFF #FIXME debug only
+ ;;
+ -S*|-s*)
+ O_SILENT=ON
+ ;;
+ -Y*|-y)
+ Debug "Option -y dedectet"
+ O_ALWAYS_YES=ON
+ ;;
+ -d*|-D)
+ O_DEBUG=ON
+ #set -x
+ ;;
+ -ml|-ML)
+ O_MAIL_LINK=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 link to result to $MAILINGLIST"
+ ;;
+ -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"
+ ;;
+ -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
+ ;;
+ -ln)
+ if [ `basename $0` != nssqa ] ; then
+ glob_usage "Error: Can't handle option $1"
+ fi
+ O_LOCAL=ON
+ O_LN=ON
+ shift
+ LOCAL_MOZROOT=$1
+ test_mozroot ln
+ ;;
+ -lt)
+ if [ `basename $0` != nssqa ] ; then
+ glob_usage "Error: Can't handle option $1"
+ fi
+ O_LN=ON
+ O_LOCAL=ON
+ ;;
+ -l)
+ if [ `basename $0` != nssqa ] ; then
+ glob_usage "Error: Can't handle option $1"
+ fi
+ O_LOCAL=ON
+ shift
+ LOCAL_MOZROOT=$1
+ test_mozroot l
+ ;;
+ -p)
+ shift
+ PORT=$1
+ export PORT
+ ;;
+ -*)
+ glob_usage "Error: Can't handle option $1"
+ ;;
+ tip|3.|3..)
+ NSSVER=$1
+ if [ -z "$NSSVER" ] ; then
+ glob_usage "Error: illegal parameter"
+ fi
+ ;;
+ [01][0-9][0123][0-9])
+ BUILDDATE=$1
+ if [ -z "$BUILDDATE" ] ; then
+ glob_usage "Error: illegal parameter"
+ fi
+ ;;
+ ?*)
+ glob_usage "Error: Can't handle parameter $1"
+ ;;
+ esac
+ shift
+ done
+
+ if [ -z "$PORT" -a "$O_TBX" = "ON" ] ; then
+ PORT=8444
+ export PORT
+ if [ -z "$NSSVER" ] ; then
+ NSSVER="tip"
+ Debug "NSS Version: Parameters missing - defaulting to tip!"
+ fi
+ elif [ -z "$NSSVER" ] ; then
+ NSSVER="tip"
+ Debug "NSS Version: Parameters missing - defaulting to tip!"
+ fi
+ if [ -z "$BUILDDATE" ] ; then
+ BUILDDATE=`date +%m%d`
+ Debug "Builddate: Parameters missing - defaulting to today!"
+ fi
+
+ Debug "Builddate $BUILDDATE NssVersion $NSSVER"
+ export BUILDDATE NSSVER
+ export O_CRON O_SILENT O_DEBUG O_ALWAYS_YES O_TBX
+}
+
+win_set_tmp()
+{
+ TMP=`echo "$TMP" | sed -e 's/ /\/t/g' -e 's//\/b/' -e 's/\\\/\//g'`
+ Debug "TMP reformated to $TMP"
+}
+
+######################### win_set_d1 ################################
+# global shell function, interactively finds the directories in case
+# windows can't get to the default
+########################################################################
+win_set_d1()
+{
+ Debug "set Windows Directories..."
+ #win_set_tmp
+ if [ "$O_CYGNUS" = ON ]
+ then
+ NSS_VER_DIR=/cygdrive/w/nss/nss$NSSVER
+ else
+ NSS_VER_DIR=w:/nss/nss$NSSVER
+ fi
+ if [ ! -w $NSS_VER_DIR ]
+ then
+ Echo "Windows special... can't write in $NSS_VER_DIR"
+ if [ "$O_CYGNUS" = ON ]
+ then
+ NSS_VER_DIR=/cygdrive/u/nss/nss$NSSVER
+ else
+ NSS_VER_DIR="u:/nss/nss$NSSVER"
+ fi
+ else
+ Debug "NSS_VER_DIR set to $NSS_VER_DIR"
+ return
+ fi
+
+ while [ ! -w $NSS_VER_DIR ]
+ do
+ if [ "$O_CRONFILE" = "ON" ]
+ then
+ Exit "cant write in $NSS_VER_DIR"
+ fi
+ Warning "cant write in $NSS_VER_DIR"
+ Echo "input start directory (u:/nss, d:/src/nss, f:/shared/nss) "
+ read D
+ if [ -n "$D" ]
+ then
+ NSS_VER_DIR=$D/nss$NSSVER
+ fi
+ done
+ Debug "NSS_VER_DIR set to $NSS_VER_DIR"
+}
+
+########################### init_host ##################################
+# global shell function, sets required variables HOST and DOMSUF, and asks
+# the user if it has been set right
+########################################################################
+set_host()
+{
+ init_host
+}
+init_host()
+{
+ if [ `basename $0` != nssqa ] ; then
+ return
+ fi
+
+ init_host_done=0
+
+ if [ $DS_WAS_SET = FALSE ] #give chance to overwrite, espec. for NT
+ then
+ Debug "Domainname was not set..."
+ DOMSUF=`domainname 2>/dev/null`
+ if [ -z "$DOMSUF" ]
+ then
+ Debug "domainname command did not work ..."
+ DOMSUF=`echo $HOST | grep '\.' | sed -e "s/[^\.]*\.//"`
+
+ if [ -z "$DOMSUF" ]
+ then
+ Debug "Domainname not part of the hostname"
+ DOMSUF=`cat /etc/defaultdomain 2>/dev/null`
+ if [ -z "$DOMSUF" ]
+ then
+ Debug "Domainname needs to be hardcoded to red.iplanet.com"
+ DOMSUF="red.iplanet.com"
+ fi
+ fi
+ fi
+ fi
+ case $HOST in
+ *\.*)
+ Debug "HOSTNAME $HOST contains Dot"
+ HOST=`echo $HOST | sed -e "s/\..*//"`
+ ;;
+ esac
+ if [ -z "$HOST" ]
+ then
+ 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 [ $init_host_done -eq 0 ]
+ do
+ Echo
+ ask "DOMSUF=$DOMSUF, HOST=$HOST - OK", "y" "n" &&
+ init_host_done=1
+ if [ $init_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 #----------------------------------
+
+########################### qa_stat_get_sysinfo ########################
+# local shell function, tries to determine the QA operating system
+########################################################################
+qa_stat_get_sysinfo()
+{
+ case $1 in
+ ?*) REM_SYS=$1
+ GET_SYSINFO="rsh $1"
+ ;;
+ *) REM_SYS=""
+ GET_SYSINFO=""
+ ;;
+ esac
+ QA_SYS=`$GET_SYSINFO uname -sr`
+ echo $QA_SYS | grep Linux >/dev/null &&
+ QA_RHVER=`$GET_SYSINFO cat /etc/redhat-release`
+ if [ -n "$QA_RHVER" ]
+ then
+ QA_OS=`echo $REM_SYS $QA_RHVER | sed -e "s/Red Hat /RH /" \
+ -e "s/ release//"`
+ else
+ case $QA_SYS in
+ *SunOS*5.[89]*)
+ ISAINFO=`$GET_SYSINFO isainfo -v`
+ IS_64=`echo $ISAINFO | grep 64 >/dev/null && \
+ echo 64 bit`
+ IS_I386=`echo $ISAINFO | grep i386 >/dev/null && \
+ echo i86pc`
+ if [ -n "$IS_I386" ] ; then IS_64="$IS_I386"; fi;
+ if [ -z "$IS_64" ] ; then IS_64="32 bit"; fi;
+ ;;
+ *HP*)
+ IS_64=`$GET_SYSINFO getconf KERNEL_BITS |
+ grep 64 >/dev/null && echo 64 bit`
+ if [ -z "$IS_64" ] ; then IS_64="32 bit"; fi;
+ ;;
+ *AIX*)
+ IS_64=`$GET_SYSINFO lslpp -l |
+ grep "bos.64bit"> /dev/null && echo 64 bit`
+ if [ -z "$IS_64" ] ; then IS_64="32 bit"; fi;
+ ;;
+ esac
+ QA_OS=`echo "$REM_SYS $QA_SYS $IS_64"`
+ fi
+ if [ "$O_SILENT" != ON ] ; then
+ echo $QA_OS
+ fi
+ QA_OS_STRING=`echo $QA_OS | sed -e "s/^[_ ]//" -e "s/ /_/g"`
+}
+
+################################### set_objdir #########################
+# global shell function, sets the object directories and DIST
+########################################################################
+set_objdir()
+{
+ Debug "set object dir"
+ OBJDIR=`cd ${TESTSCRIPTDIR}/common; gmake objdir_name`
+ OS_ARCH=`cd ${TESTSCRIPTDIR}/common; gmake os_arch`
+
+ #at this point $MASTERBUILD needs to be either NT or unix
+
+ set_daily_build_dirs
+ LOCALDIST_BIN=${LOCALDIST}/${OBJDIR}/bin
+ DIST=$LOCALDIST
+
+ if [ -z "${TEST_LEVEL}" ] ; then
+ TEST_LEVEL=0
+ fi
+ bc ${TEST_LEVEL} #set the path for the backward compatibility test
+
+ PATH_CONTAINS_BIN="TRUE"
+ export PATH_CONTAINS_BIN
+
+ export OBJDIR OS_ARCH LOCALDIST LOCALDIST_BIN DIST PATH
+}
+
+########################### bc #########################################
+# global shell function , sets paths for the backward compatibility test
+########################################################################
+bc()
+{
+ if [ -n "$PRODUCT_TO_TEST" -a "$PRODUCT_TO_TEST" = "JSS" ] ; then
+ TESTDIR=${RESULTDIR}
+ BC_ACTION=""
+ DON_T_SET_PATHS="FALSE" #let init.sh override - FIXME - check if necessary
+ return
+ fi
+ DON_T_SET_PATHS="TRUE"
+ case $1 in
+ 0)
+ #unset TESTDIR
+ TESTDIR=${RESULTDIR}
+ if [ "$O_WIN" = "ON" -a "$O_CYGNUS" != ON ] ; then
+ PATH="$TESTSCRIPTDIR;$LOCALDIST_BIN;$BASEPATH"
+ else
+ PATH=$TESTSCRIPTDIR:$LOCALDIST_BIN:$BASEPATH
+ fi
+ BC_ACTION=""
+ DON_T_SET_PATHS="FALSE" #let init.sh override - FIXME - check if necessary
+ ;;
+ *)
+ if [ "$O_LOCAL" = "ON" ] ; then
+ Exit "FIXME Can't run backwardcompatibility tests locally yet"
+ fi
+ TESTSCRIPTDIR=${BCDIST}/../security/nss/tests
+ COMMON=${TESTSCRIPTDIR}/common
+ TESTDIR=${RESULTDIR}/bct
+ BC_ACTION="backward compatibility of binaries in $BC_MASTER to new libs"
+ BCDIST_BIN=${BCDIST}/${OBJDIR}/bin
+ LD_LIBRARY_PATH=${LOCALDIST}/${OBJDIR}/lib
+ if [ "$O_WIN" = "ON" ] ; then
+ if [ "$O_CYGNUS" = ON ] ; then
+ PATH=$TESTSCRIPTDIR:$BCDIST_BIN:$BASEPATH:$LD_LIBRARY_PATH
+ else
+ PATH="$TESTSCRIPTDIR;$BCDIST_BIN;$BASEPATH;$LD_LIBRARY_PATH"
+ fi
+ else
+ PATH=$TESTSCRIPTDIR:$BCDIST_BIN:$BASEPATH
+ fi
+ Debug "1st stage of backward compatibility test"
+ ;;
+ esac
+ if [ -n "$TESTDIR" ] ; then
+ if [ ! -d $TESTDIR ] ; then
+ mkdir -p $TESTDIR
+ fi
+ export TESTDIR
+ fi
+ SHLIB_PATH=${LD_LIBRARY_PATH}
+ LIBPATH=${LD_LIBRARY_PATH}
+ Debug "PATH $PATH"
+ Debug "LD_LIBRARY_PATH $LD_LIBRARY_PATH"
+ export PATH LD_LIBRARY_PATH SHLIB_PATH LIBPATH
+ export DON_T_SET_PATHS BC_ACTION
+ export TESTSCRIPTDIR COMMON
+}
+
+########################### Ps #########################################
+# global shell function , attempts a platform specific ps
+########################################################################
+Ps()
+{
+#AIX, 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_LINK = "ON" -a $O_FILE = "ON" ]
+ then
+ if [ $EARLY_EXIT = TRUE ] #before the report file has been created
+ then
+ early_exit "$1"
+ else
+ head -3 $FILENAME >$ML_FILE
+ echo "Content-Type: text/plain; charset=us-ascii; format=flowed
+ Content-Transfer-Encoding: 7bit
+
+" >>$ML_FILE
+ echo $HREF_TMP_HTML_FILE >>$ML_FILE
+ cat $ML_FILE | $RMAIL $MAILINGLIST
+ fi
+
+#FIXME - early exit etc
+ elif [ $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}/*/* &
+ if [ -n "$O_TBX" -a "$O_TBX" = "ON" ] ; then
+ rm ${TESTDIR}/QAstatus
+
+ if [ "$1" = "killed... cleaning up..." ] ; then
+ echo "QA killed" >${TESTDIR}/QAstatus
+ elif [ "$TBX_EXIT" = 0 ] ; then
+ echo "QA passed" >${TESTDIR}/QAstatus
+ else
+ echo "QA failed" >${TESTDIR}/QAstatus
+ fi
+
+ exit $TBX_EXIT
+
+ else
+ exit
+ fi
+}
+
+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"
+ 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 " -ml <mailinglist> - send link to filename to mailinglist "
+ Echo " (csl example sonmi,nelsonb,wtc) only useful with -f"
+ Echo " -cron equivalient to -y -s -d -f \$RESULTDIR/\$HOST.nssqa"
+ Echo " -t run on a tinderbox build (included -cron)"
+ if [ `basename $0` = nssqa ] ; then
+ Echo " -l <mozroot> run on a local build"
+ Echo " -ln <mozroot> copy a networkbuild to a local directory "
+ Echo " mozroot, used for networkindipendend QA "
+ Echo " -lt try to copy a networkbuild to a local directory, if"
+ Echo " not possible run on the network
+ Echo " used for networkindipendend QA
+ fi
+#
+# special strings
+ 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
+}
+
+if [ $O_INIT = "ON" ]
+then
+ glob_init $*
+fi
+EARLY_EXIT=FALSE