security/nss/tests/header

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 #! /bin/sh
     3 ########################################################################
     4 #
     5 # /u/sonmi/bin/header - /u/svbld/bin/init/nss/header
     6 #
     7 # variables, utilities and shellfunctions global to NSS QA
     8 # needs to work on all Unix platforms
     9 #
    10 # included from (don't expect this to be up to date)
    11 # --------------------------------------------------
    12 #   qa_stat
    13 #   mksymlinks 
    14 #   nssqa 
    15 #
    16 # parameters
    17 # ----------
    18 #   nssversion (supported: 30b, 31, 332, tip 32)
    19 #   builddate (default - today)
    20 #
    21 # options
    22 # -------
    23 #   -y answer all questions with y - use at your own risk... ignores warnings 
    24 #   -s silent (only usefull with -y)
    25 #   -h, -? - you guessed right - displays this text
    26 #   -d debug
    27 #   -f <filename> - write the (error)output to filename
    28 #   -fcronfile produces the resultfiles in the same locations
    29 #       as would have been produced with -cron
    30 #   -m <mailinglist> - send filename to mailinglist (csl) only useful
    31 #       with -f
    32 #   -ml <mailinglist> - send link to filename to mailinglist (csl) 
    33 #       only useful with -f
    34 #   -cron equivalient to -y -s -d -f $RESULTDIR/$HOST.<scriptname>
    35 #   -t  run on a tinderbox build that means: local, from the startlocation
    36 #   -l <mozroot directory>  run on a local build mozroot
    37 #   -ln <mozroot> copy a networkbuild to a local directory mozroot, 
    38 #        used for networkindipendend QA
    39 #   -lt try to copy a networkbuild to a local directory, if not possible
    40 #        run on the network
    41 #        used for networkindipendend QA
    42 #
    43 # special strings
    44 # ---------------
    45 #   FIXME ... known problems, search for this string
    46 #   NOTE .... unexpected behavior
    47 #
    48 # moduls (not yet)
    49 # ----------------
    50 #   --# INIT
    51 #   --# USERCOM
    52 #   --# UTILS
    53 #
    54 # FIXME - split in init / usercom / utils
    55 #
    56 ########################################################################
    58 #------------------------------# INIT #------------------------------
    60 # below the option flags get initialized
    62 if [ -z "$QASCRIPT_DIR" ]
    63 then
    64     QASCRIPT_DIR=`dirname $0`
    65     if [ "$QASCRIPT_DIR" = '.' ]
    66     then
    67         QASCRIPT_DIR=`pwd`
    68     fi
    69 fi
    70 export QASCRIPT_DIR
    72 O_HWACC=OFF
    73 if [ -z "$O_ALWAYS_YES" ] ; then
    74     O_ALWAYS_YES=OFF    # turned on by -y answer all questions with y 
    75 fi
    77 if [ -z "$O_INIT" ] # header is global, some including scripts may not
    78 then                # want the init to run, the others don't need to bother
    79     O_INIT=ON
    80 fi
    81 if [ -z "$O_PARAM" ] # header is global, some including scripts may not
    82 then                 # require parameters, the others don't need to bother
    83     O_PARAM=ON
    84 fi
    85 if [ -z "$O_OPTIONS" ] # header is global, some including scripts may not
    86 then                # permit options, they don't need to bother
    87     O_OPTIONS=OFF
    88 fi
    89 O_SILENT=OFF        # turned on by -s silent (only usefull with -y)
    90 if  [ -z "$O_DEBUG" ] ; then
    91     O_DEBUG=OFF     # turned on by -d - calls to Debug produce output when ON
    92 fi
    93 O_FILE=OFF          # turned on by -f echo all output to a file $FILENAME
    94 O_CRON=OFF          # turned on by -cron cron use only
    95 O_CRONFILE=OFF      # turned on by -cron cron and -fcron
    96 O_LOCAL=OFF         # turned on by -l* run on a local build in $LOCAL_MOZROOT
    97 O_LN=OFF            # turned on by -ln and -lt, test a networkbuild locally
    98 O_MAIL=OFF          # turned on by -m - sends email
    99 O_MAIL_LINK=OFF     # turned on by -ml - sends email
   100 O_TBX=OFF           # turned on by -t run on a tinderbox build
   101                     # that means: local, from the startlocation
   103 if  [ -z "$DOMSUF" ]
   104 then
   106     DOMSUF=red.iplanet.com
   107     DS_WAS_SET=FALSE
   108 else
   109     DS_WAS_SET=TRUE
   110 fi
   112 TMPFILES=""
   114 WAIT_FOR=600  # if waiting for an event sleep n seconds before rechecking 
   115               # recomended value 10 minutes 600
   116 WAIT_TIMES=30 # recheck n times before giving up - recomended 30 - total of 5h
   118 if [ -z "$QAYEAR" ]   # may I introduce - the y2k+1 bug? QA for last year 
   119 then                  # might not work
   120     QAYEAR=`date +%Y`
   121 fi
   123 if [ -z "$TMP" ]        
   124 then
   125     if [  -z "$TEMP" ]
   126     then
   127         TMP="/tmp"
   128     else
   129         TMP=$TEMP
   130     fi
   131 fi
   132 if [ ! -w "$TMP" ]        
   133 then
   134     echo "Can't write to tmp directory $TMP - exiting"
   135     echo "Can't write to tmp directory $TMP - exiting" >&2
   136     exit 1
   137 fi
   139 KILLPIDS="$TMP/killpids.$$"
   140 export KILLERPIDS
   141 TMPFILES="$TMPFILES $KILLPIDS"
   143 KILL_SELFSERV=OFF   # if sourcing script sets this to on cleanup will also 
   144                     # kill the running selfserv processes
   146                     # Set the masterbuilds 
   147 if [ -z "$UX_MASTERBUILD" ]
   148 then                     
   149     UX_MASTERBUILD=booboo_Solaris8
   150     #if [ ! -d $UX_MASTERBUILD ] ; then
   151         #UX_MASTERBUILD=booboo_Solaris8_forte6
   152     #fi
   153     UX_MB_WAS_SET=FALSE
   154 else
   155     UX_MB_WAS_SET=TRUE
   156 fi
   157 if [ -z "$NT_MASTERBUILD" ]
   158 then                     
   159     NT_MASTERBUILD=blowfish_NT4.0_Win95
   160     NT_MB_WAS_SET=FALSE      # in this case later functions can override if
   161                              # they find a different build that looks like NT
   162 else
   163     NT_MB_WAS_SET=TRUE
   164 fi
   165 if [ -z "$MASTERBUILD" ]    
   166 then
   167     MASTERBUILD=$UX_MASTERBUILD
   168 fi
   170                     # Set the default build
   171 if [ -z "$BUILDNUMBER" ]    
   172 then
   173     BUILDNUMBER=1
   174 fi
   175 export BUILDNUMBER
   176 O_LDIR=OFF          #local QA dir for NT, temporary
   178 if [ -z "$WIN_WAIT_FOREVER" ]    # header is global, some including scripts 
   179 then                # want the init to wait forever for directories to
   180                     # appear (windows only) if OFF exit, if ON wait forever
   181     WIN_WAIT_FOREVER=OFF
   182 fi
   184                           # NOTE: following variables have to change 
   185                           # from release to release
   186 if [ -z "$BC_MASTER" ]    # master directory for backwardscompatibility testing
   187 then
   188     RH="NO"
   189     grep 7.1 /etc/redhat-release > /dev/null 2>/dev/null && RH="YES"
   190     grep 7.2 /etc/redhat-release > /dev/null 2>/dev/null && RH="YES"
   192     if [ "$RH" = "YES" ] 
   193     then                      # NSS-3-3-1RTM
   194         BC_UX_MASTER=nss331/builds/20010928.2.331-RTM/booboo_Solaris8
   195         BC_NT_MASTER=nss331/builds/20010928.2.331-RTM/blowfish_NT4.0_Win95
   196     else                      # NSS-3-2-2RTM
   197         BC_UX_MASTER=nss322/builds/20010820.1/y2sun2_Solaris8
   198         BC_NT_MASTER=nss322/builds/20010820.1/blowfish_NT4.0_Win95
   199     fi
   200     BC_MASTER=$BC_UX_MASTER
   201     BC_MASTER_WAS_SET=FALSE
   202 else
   203     BC_MASTER_WAS_SET=TRUE
   204 fi
   205 BC_RELEASE=3.2
   206 export BC_RELEASE
   208 EARLY_EXIT=TRUE     #before the report file has been created, causes Exit to 
   209                     #create it
   211 UX_D0=/share/builds/mccrel3/nss
   213 ################################### glob_init ##########################
   214 # global shell function, main initialisation function
   215 ########################################################################
   216 glob_init()
   217 {
   218     if [ $O_PARAM = "ON" ] ; then
   219         eval_opts $*    # parse parameters and options - set flags
   220     fi
   221                         # if running from cron HOST needs to be known early, 
   222     init_host            # so the output file name can be constructed. 
   223     Debug "Setting up environment...( $QASCRIPT_DIR/set_environment) "
   224     . $QASCRIPT_DIR/set_environment #finds out if we are running on Windows
   225     Debug "OPerating system: $os_name $os_full"
   226     umask 0    
   227     init_dirs
   228     init_files
   229     init_vars
   230 }
   232 ################################### init_vars ###########################
   233 # global shell function, sets the environment variables, part of init 
   234 ########################################################################
   235 init_vars()
   236 {
   237     if [ -z "$LOGNAME" ]
   238     then
   239         if [ $O_WIN = "ON" ]
   240         then
   241             LOGNAME=$USERNAME
   242         else
   243             LOGNAME=$USER
   244         fi
   245         if [ -z "$LOGNAME" ]
   246         then
   247             LOGNAME=$UNAME
   248             if [ -z "$LOGNAME" ]
   249             then
   250                 LOGNAME=`basename $HOME`
   251             fi
   252         fi
   253     fi
   254     if [ -z "$LOGNAME" ]
   255     then
   256         Exit "Can't determine current user"
   257     fi
   258     case $HOST in
   259         iws-perf)
   260             O_HWACC=ON
   261             HWACC_LIST="rainbow ncipher"
   262             #MODUTIL="-add rainbow -libfile /usr/lib/libcryptoki22.so"
   263             export HWACC_LIST
   264             ;;
   265         *)
   266             O_HWACC=OFF
   267             ;;
   268     esac
   269    export O_HWACC
   270 }
   272 ########################################################################
   273 # functions below deal with setting up the directories and PATHs for
   274 # all different flavors of OS (Unix, Linux, NT MKS, NT Cygnus) and QA
   275 # (Standard, local tinderbox)
   276 ########################################################################
   278 ########################## find_nt_masterbuild #########################
   279 # global shell function, sets the nt masterbuild directories, part of init 
   280 ########################################################################
   281 find_nt_masterbuild()
   282 {
   283     NT_MASTERDIR=${DAILY_BUILD}/${NT_MASTERBUILD}
   284     if [ "${NT_MB_WAS_SET}" = "FALSE" -a ! -d $NT_MASTERDIR ] ; then
   285         if [ -d ${DAILY_BUILD}/*NT4* ] ; then
   286             NT_MASTERBUILD=` cd ${DAILY_BUILD}; ls -d *NT4* `
   287             Debug "NT_MASTERBUILD $NT_MASTERBUILD"
   288             NT_MASTERDIR=${DAILY_BUILD}/${NT_MASTERBUILD}
   289         fi
   290     fi
   291     Debug "NT_MASTERDIR $NT_MASTERDIR"
   292 }
   294 ################################### set_daily_build_dirs ###########################
   295 # global shell function, sets directories 
   296 ########################################################################
   297 set_daily_build_dirs()
   298 {
   299     if [ "$O_LOCAL" = "ON" -a "$O_LN" = "OFF" ] ; then
   300         DAILY_BUILD=${LOCAL_MOZROOT}        # on local builds NSS_VER_DIR and DAILY_BUILD are 
   301                              # set to the LOCAL_MOZROOT, since it is not sure
   302                              # if ../.. (DAILY_BUILD) even exists
   303         LOCALDIST=${LOCAL_MOZROOT}/dist
   304     elif [ "$O_TBX" = "ON" ] ; then
   305         DAILY_BUILD="$TBX_DAILY_BUILD"
   306         LOCALDIST=${UXDIST}
   307     else
   308         DAILY_BUILD=${NSS_VER_DIR}/builds/${QAYEAR}${BUILDDATE}.${BUILDNUMBER}
   309         LOCALDIST=${DAILY_BUILD}/${MASTERBUILD}/mozilla/dist
   310     fi
   311 }
   313 map_os64()
   314 {
   315   IS_64=""
   316   case `uname -s` in
   317       #OSF1) has been done already - always 64 bit
   318       SunOS)
   319           MAPPED_OS=Solaris*8
   320           IS_64=`(isainfo -v | grep 64)>/dev/null 2>/dev/null && echo 64 bit`
   321           if [ "$O_TBX" = "OFF" ] ; then
   322               set_osdir
   323               if [ -n "$IS_64" ]
   324               then #Wait for the 64 bit build to finish...
   325                   Debug Testing build for $MAPPED_OS in $OSDIR
   326                   Wait ${OSDIR}/SVbuild.InProgress.1 0
   327               fi
   328           fi
   329           ;;
   330       AIX)
   331           IS_64=`lslpp -l | grep "bos.64bit"> /dev/null && echo 64 bit`
   332           ;;
   333       HP-UX)
   334           IS_64=`getconf KERNEL_BITS | grep 64 >/dev/null && echo 64 bit`
   335           ;;
   336   esac
   337   Debug "Mapped OS to $MAPPED_OS"
   338 }
   342 ################################### copy_to_local ########################
   343 # global shell function, copies the necessary directories from the 
   344 # daily build aerea to the local disk
   345 ########################################################################
   346 copy_to_local()
   347 {
   348     Debug "Copy network directories to local directories"
   349     C2L_ERROR=0
   350     if [ ! -d ${LOCAL_MOZROOT}/dist ] ; then
   351         mkdir -p ${LOCAL_MOZROOT}/dist || C2L_ERROR=1
   352     fi
   353     if [ ! -d ${LOCAL_MOZROOT}/security/nss ] ; then
   354         mkdir -p ${LOCAL_MOZROOT}/security/nss || C2L_ERROR=2
   355     fi
   356     if [ $C2L_ERROR != 0 ] ; then
   357         Exit "copy_to_local: Can t make necesssary directories ($C2L_ERROR ) "
   358     fi
   359     if [ ! -d ${LOCAL_MOZROOT}/security/nss/tests ] ; then
   360         cp -r ${TESTSCRIPTDIR} ${LOCAL_MOZROOT}/security/nss || C2L_ERROR=1
   361     fi
   362     if [ ! -d ${LOCAL_MOZROOT}/security/coreconf ] ; then
   363         cp -r ${MOZILLA_ROOT}/security/coreconf ${LOCAL_MOZROOT}/security || C2L_ERROR=2
   364     fi
   366     NO_DIRS=0;
   367     if [ "$O_WIN" = "ON" ] ; then
   368         OS_TARGET=WINNT;export OS_TARGET
   369     fi
   370     unset BUILD_OPT;export BUILD_OPT;
   371     unset USE_64;export USE_64;
   372 #FIXME only tested on 64 bit Solaris and only got 32 bit builds
   373     while [ $NO_DIRS -lt 4 ] ; do
   374                                                   # first time thru: Debug 32 bit NT
   375         set_objdir
   376         Debug "Copying ${OBJDIR}..."
   377         if [ ! -d ${LOCAL_MOZROOT}/dist/${OBJDIR} ] ; then
   378             cp -r ${LOCALDIST}/${OBJDIR} ${LOCAL_MOZROOT}/dist || C2L_ERROR=3
   379         fi
   380         NO_DIRS=`expr $NO_DIRS + 1`
   381         if [ $NO_DIRS = 1 ] ; then                # 2nd time: OPT 32 bit NT
   382             BUILD_OPT=1; export BUILD_OPT;
   383         elif [ $NO_DIRS = 2 ] ; then              # 3rd time: OPT, either 64 bit or Win95 or force exit
   384             if [ "$O_WIN" = "ON" ] ; then
   385                 OS_TARGET=WIN95;export OS_TARGET
   386             else
   387                 map_os64
   388                 if [ -z "$IS_64" ] ; then #32 bit platform
   389                     NO_DIRS=4
   390                 else
   391                     USE_64=1; export USE_64
   392                 fi
   393             fi
   394         elif [ $NO_DIRS = 3 ] ; then              # 4th time:  Debug either 64 bit or Win95
   395             unset BUILD_OPT;export BUILD_OPT;
   396         fi
   399     done
   400     if [ $C2L_ERROR != 0 ] ; then
   401         Exit "copy_to_local: Can t copy necesssary directories ($C2L_ERROR ) "
   402     fi
   403     unset TESTSCRIPTDIR
   404     unset TESTDIR
   405     unset RESULTDIR
   406     O_LN=OFF       #from here on pretend it is regular -l local QA FIXME, might cause 
   407                    #problems with the backwardcompatibility tests
   408     Debug "Successfully copied network directories to local directories"
   409 }
   411 ################################### local_dirs ###########################
   412 # global shell function, sets the directories for local QA
   413 ########################################################################
   414 local_dirs()
   415 {
   416     Debug "Set directories for local QA"
   417     #if [ "$O_WIN" = "ON" ] ; then
   418         #win_set_tmp
   419     #fi
   420     NSS_VER_DIR=${LOCAL_MOZROOT}        # on local builds NSS_VER_DIR and DAILY_BUILD are 
   421                          # set to the LOCAL_MOZROOT, since it is not sure
   422                          # if ../../../.. (NSS_VER_DIR) even exists
   423     if [ -z "${RESULTDIR}" ] ; then # needs to be local as well
   424         Debug "Setting RESULTDIR for local QA"
   425         RESULTDIR="${LOCAL_MOZROOT}/tests_results/security/${HOST}-`date +%Y%m%d-%H.%M`"
   426     fi
   427     set_daily_build_dirs
   428     UX_MASTERDIR=`dirname ${LOCAL_MOZROOT}`
   429     NT_MASTERDIR=$UX_MASTERDIR
   430     MOZILLA_ROOT=${LOCAL_MOZROOT}
   432     UXDIST=${MOZILLA_ROOT}/dist
   433     NTDIST=${UXDIST}
   435     if [ -z "${TESTDIR}" ] ; then 
   436         Debug "Setting TESTDIR for local QA"
   437         TESTDIR=${RESULTDIR}
   438     fi
   439     if [ -n "$TESTDIR" ] ; then
   440         if [ ! -d $TESTDIR ] ; then
   441             Debug "Making TESTDIR for local QA"
   442             mkdir -p $TESTDIR
   443         fi
   444     fi
   445     export TESTDIR
   446     Debug "RESULTDIR $RESULTDIR TESTDIR $TESTDIR"
   448     TESTSCRIPTDIR=${LOCAL_MOZROOT}/security/nss/tests
   449     COMMON=${TESTSCRIPTDIR}/common
   451     set_objdir
   452     debug_dirs
   453     export_dirs
   454 }
   457 ################################### tbx_dirs ###########################
   458 # global shell function, sets the directories for tinderbox QA
   459 ########################################################################
   460 tbx_dirs()
   461 {
   462     Debug "Set directories for tinderbox"
   463     if [ "$O_WIN" = "ON" ] ; then
   464         win_set_d1 # we need the NSS_VER_DIR later
   465     else
   466         NSS_VER_DIR="$UX_D0"/nss$NSSVER
   467     fi
   468     if [ -z "${RESULTDIR}" ] ; then # needs to be different for tinderbox
   469         Debug "Setting RESULTDIR for tinderbox"
   470         TBX_NOBITS=""
   471         echo $QASCRIPT_DIR | grep 64  >/dev/null && TBX_NOBITS=64
   472         TRD="${HOST}${TBX_NOBITS}-`date +%Y%m%d-%H.%M`"
   473         RESULTDIR="${NSS_VER_DIR}/tinderbox/tests_results/security/${TRD}"
   474         if [ ${DOMSUF} = "mcom.com" -o  ${DOMSUF} = "netscape.com" -o ${DOMSUF} = "nscp.aoltw.net" ] ; then
   475             URL="sbs-rel.nscp.aoltw.net"
   476         else
   477             URL="cindercone.red.iplanet.com"
   478         fi
   479         if [ "$O_WIN" = "ON" ] ; then
   480             RESULTDIRURL="<a title=\"QA Results\" href=\"http://${URL}${UX_D0}/nsstip/tinderbox/tests_results/security/${TRD}\">QA</a>"
   481         else
   482             RESULTDIRURL="<a title=\"QA Results\" href=\"http://${URL}${RESULTDIR}\">QA</a>"
   483         fi
   484         Debug "RESULTDIRURL TinderboxPrint:$RESULTDIRURL"
   485     fi
   486     TBX_DAILY_BUILD=`cd ../../../../..;pwd`
   487     NSS_VER_DIR="${TBX_DAILY_BUILD}/../.." 
   488     TBX_LOGFILE_DIR=`ls ${NSS_VER_DIR}/logs/tinderbox | sed -e 's/ .*//g'`
   489     if [ -z "$TBX_LOGFILE_DIR" ] ; then
   490         TBX_LOGFILE_DIR=`ls ${NSS_VER_DIR}/logs/tbx | sed -e 's/ .*//g'`
   491         TBX_LOGFILE_DIR="${NSS_VER_DIR}/logs/tbx/${TBX_LOGFILE_DIR}"
   492     else
   493         TBX_LOGFILE_DIR="${NSS_VER_DIR}/logs/tinderbox/${TBX_LOGFILE_DIR}"
   494     fi
   495     Debug "Set TBX_LOGFILE_DIR ${TBX_LOGFILE_DIR}"
   497     set_daily_build_dirs
   498     UX_MASTERDIR=`cd ../../../..;pwd`
   499     NT_MASTERDIR=$UX_MASTERDIR
   500     MOZILLA_ROOT=$UX_MASTERDIR/mozilla
   502     UXDIST=${MOZILLA_ROOT}/dist
   503     NTDIST=${UXDIST}
   505     if [ -z "${TESTDIR}" ] ; then 
   506         Debug "Setting TESTDIR for tinderbox"
   507         TESTDIR=${RESULTDIR}
   508     fi
   509     if [ -n "$TESTDIR" ] ; then
   510         if [ ! -d $TESTDIR ] ; then
   511             Debug "Making TESTDIR for tinderbox"
   512             mkdir -p $TESTDIR
   513         fi
   514     fi
   515     Debug "Making QAstatus file"
   516     echo "QA running" >${TESTDIR}/QAstatus
   517     export TESTDIR
   518     Debug "RESULTDIR $RESULTDIR TESTDIR $TESTDIR"
   520     TESTSCRIPTDIR=`pwd`
   521     COMMON=${TESTSCRIPTDIR}/common
   523     set_objdir
   524     debug_dirs
   525     export_dirs
   526 }
   528 ################################### init_mcom ###########################
   529 # global shell function, sets domain specific variables for AOL's 
   530 # domains according to Bishakha's instructions
   531 ########################################################################
   532 init_mcom()
   533 {
   534     Debug "Running in mcom or netscape domain - changing directories..."
   535     if [ "${UX_MB_WAS_SET}" = "FALSE" ] ; then #in case it was set
   536         # before script was called use these values 
   537         UX_MASTERBUILD=spd04_Solaris8
   538     fi
   539     if [ "${NT_MB_WAS_SET}" = "FALSE" ] ; then 
   540         NT_MASTERBUILD=spd06_NT4
   541     fi
   543     MASTERBUILD=$UX_MASTERBUILD
   544     if [ "${BC_MASTER_WAS_SET}" = "FALSE" ] ; then
   545         BC_UX_MASTER=nss322/builds/20010820.1/y2sun2_Solaris8
   546         BC_NT_MASTER=nss322/builds/20010820.1/blowfish_NT4.0_Win95
   547         BC_MASTER=$BC_UX_MASTER
   548     fi
   549     UX_D0=/share/builds/sbsrel2/nss
   550     URL="sbs-rel.nscp.aoltw.net"
   551 }
   552 ################################### init_dirs ###########################
   553 # global shell function, sets the directories for standard QA
   554 # calls special functions for tinderbox, windows or local QA, part of init 
   555 ########################################################################
   556 init_dirs()
   557 {
   558     if [ ${DOMSUF} = "mcom.com" -o  ${DOMSUF} = "netscape.com" -o ${DOMSUF} = "nscp.aoltw.net" ] ; then
   559         init_mcom
   560     fi
   561     if [ $O_WIN = "ON" ] ; then
   562         win_set_tmp
   563         write_to_tmpfile
   564         MASTERBUILD=$NT_MASTERBUILD
   565         BC_MASTER=$BC_NT_MASTER
   566     fi
   567     if [ "$O_LOCAL" = "ON" -a $O_LN = "OFF" ] ; then  # if it is a LN we need to know
   568                        # all the directories off the network first to copy them
   569         local_dirs     # O_LOCAL alone assumes that all the directories are already there 
   570         return
   571     elif [ "$O_TBX" = "ON" ] ; then
   572         tbx_dirs
   573         return
   574     elif [ "$O_WIN" = "ON" ] ; then
   575         win_set_d1
   576     else
   577         NSS_VER_DIR="$UX_D0"/nss$NSSVER
   578     fi
   579     #set -x
   581     set_daily_build_dirs
   583     if [ -z "${BCDIST}" ] ; then
   584         #BCDIST=/share/builds/mccrel3/nss/${BC_MASTER}/mozilla/dist
   585         BCDIST=${NSS_VER_DIR}/../${BC_MASTER}/mozilla/dist
   586         if [ ! -d $BCDIST -a `basename $0` != jssqa ] ; then
   587             ask "Backward compatibility directory $BCDIST does not exist, continue" "y" "n" || Exit
   588         fi
   589     fi
   591     UX_MASTERDIR=${DAILY_BUILD}/${UX_MASTERBUILD}
   592     find_nt_masterbuild
   594     if [ "$O_WIN" = "ON" ]
   595     then
   596         MOZILLA_ROOT=${NT_MASTERDIR}/mozilla
   597     else
   598         MOZILLA_ROOT=${UX_MASTERDIR}/mozilla
   599     fi
   601     UXDIST=${UX_MASTERDIR}/mozilla/dist
   602     NTDIST=${NT_MASTERDIR}/mozilla/dist
   604     if [ -z "${RESULTDIR}" ] ; then 
   605         RESULTDIR=${UX_MASTERDIR}/mozilla/tests_results/security
   606     fi
   608     if [ -n "$PRODUCT_TO_TEST" -a "$PRODUCT_TO_TEST" = "JSS" ] ; then
   610         if [ "$O_WIN" = "ON" ] ; then
   611             JSS_NSS_SRC_DIR=$JSS_NSS_NT_SRC_DIR
   612         fi
   613         TESTSCRIPTDIR=${NSS_VER_DIR}/../${JSS_NSS_SRC_DIR}/mozilla/security/nss/tests
   614     else
   615         TESTSCRIPTDIR=${MOZILLA_ROOT}/security/nss/tests
   616     fi
   618     if [ ! -d $TESTSCRIPTDIR -a `basename $0` != jssqa ] ; then
   619         if [ "$O_WIN" = "ON" -a "$WIN_WAIT_FOREVER" = "ON" ]
   620         then
   621             WaitForever $TESTSCRIPTDIR/all.sh 1
   622         else
   623             Exit "Test directory $TESTSCRIPTDIR does not exist"
   624         fi
   625     fi
   627     COMMON=${TESTSCRIPTDIR}/common
   628     if [ "$O_LOCAL" = "ON" -a $O_LN = "ON" ] ; then  # if it is a LN we need to know
   629                        # all the directories off the network first to copy them
   630         copy_to_local
   631         local_dirs     
   632     fi
   633     #set +x
   636     set_objdir
   637     debug_dirs
   638     export_dirs
   639 }
   641 debug_dirs()
   642 {
   643     Debug "NTDIST $NTDIST"
   644     Debug "UXDIST $UXDIST"
   645     Debug "TESTSCRIPTDIR $TESTSCRIPTDIR"
   646     Debug "RESULTDIR $RESULTDIR"
   647     Debug "TMP $TMP"
   648     Debug "LOCALDIST_BIN $LOCALDIST_BIN"
   649     Debug "COMMON $COMMON"
   650     Debug "MOZILLA_ROOT $MOZILLA_ROOT"
   651     Debug "BCDIST $BCDIST"
   652 }
   654 export_dirs()
   655 {
   656     export NSS_VER_DIR DAILY_BUILD NTDIST UXDIST RESULTDIR TESTSCRIPTDIR BCDIST
   657     export UX_MASTERDIR NT_MASTERDIR COMMON MOZILLA_ROOT
   658 }
   660 set_osdir()
   661 {
   662     OSDIR=${DAILY_BUILD}/*${MAPPED_OS}*
   663 }
   665 ################################### init_files ###########################
   666 # global shell function, sets filenames, initializes files, part of init 
   667 ########################################################################
   668 init_files()
   669 {
   670     if [ $O_CRONFILE = "ON" ]
   671     then
   672         Debug "attempting to create resultfiles"
   673         if [ "$O_TBX" = "ON" ] ; then
   674             NEWFILENAME=${TBX_LOGFILE_DIR}/qa.log
   675             if [ ! -w ${TBX_LOGFILE_DIR} ] ; then
   676                 Exit "can't touch $NEWFILENAME"
   677             fi
   678         else
   679             NEWFILENAME=$RESULTDIR/$HOST.`basename $0`
   680         fi
   681         if [ ! -d $RESULTDIR ]
   682         then
   683             mkdir -p $RESULTDIR || Exit "Error: can't make $RESULTDIR"
   684         fi
   685         if [ ! -w $RESULTDIR ] ; then
   686             Exit "can't touch $NEWFILENAME"
   687         fi
   688         Debug "About to touch $NEWFILENAME "
   689         touch $NEWFILENAME || Exit "Error: can't touch $NEWFILENAME"
   690         if [ "$O_TBX" = "ON" ] ; then
   691              echo "QA results in $RESULTDIR" >>$NEWFILENAME || Exit "Error: can't write to $NEWFILENAME"
   692         fi
   693         Debug "About to cat $FILENAME >>$NEWFILENAME "
   694         cat $FILENAME >>$NEWFILENAME || Exit "Error: can't append $FILENAME to $NEWFILENAME"
   695         TMPFILES="$TMPFILES $FILENAME"
   696         FILENAME=$NEWFILENAME
   697         Debug "Writing output to $FILENAME"
   698     fi
   700 }
   702 ################################### write_to_tmpfile ##########################
   703 # global shell function, for NT and cron operation, first a tmpfile 
   704 # needs to be created
   705 ########################################################################
   706 write_to_tmpfile()
   707 {
   708     O_CRONFILE=ON
   709     O_FILE=ON
   710     FILENAME=${TMP}/nsstmp.$$    # for now write to the temporary file
   711                                  # since we don't know the hostname yet
   712                                  # will be inserted to the real file later
   713     TMPFILES="$TMPFILES nsstmp.$$"        
   714     touch $FILENAME || Exit "Error: can't touch $FILENAME"
   715     Debug "Writing output to $FILENAME"
   716 }
   718 ############################# turn_on_cronoptions ######################
   719 # global shell function, turns on options needed for cron and tinderbox
   720 ########################################################################
   721 turn_on_cronoptions()
   722 {
   723     O_CRON=ON
   724     O_SILENT=ON
   725     O_DEBUG=ON                # FIXME take out!
   726     O_ALWAYS_YES=ON
   727     write_to_tmpfile
   728 }
   730 ########################## test_mozroot ##########################
   731 # global shell function, determines if the variable LOCAL_MOZROOT is set, 
   732 # and is usable as mozilla root diretory for a local QA
   733 ###################################################################
   734 test_mozroot()
   735 {
   736   PWD=`pwd`
   737   Debug "LOCAL_MOZROOT = $LOCAL_MOZROOT"
   738   case "$LOCAL_MOZROOT" in
   739       [0-9-]*|tip)
   740           glob_usage "Error: -"$1" requires a directoryname to follow (start with a letter) "
   741           ;;
   742       \.\.)
   743           LOCAL_MOZROOT=`dirname $PWD`
   744           ;;
   745       \.)
   746           LOCAL_MOZROOT=$PWD
   747           ;;
   748       \.\/*)
   749           LOCAL_MOZROOT=`echo $LOCAL_MOZROOT | sed -e "s/^\.//"`
   750           LOCAL_MOZROOT="${PWD}${LOCAL_MOZROOT}"
   751           ;;
   752       \.\.\/*)
   753           LOCAL_MOZROOT="${PWD}/${LOCAL_MOZROOT}"
   754           ;;
   755       \/*|[a-zA-Z]:\/*)
   756           ;;
   757       ?*)
   758           LOCAL_MOZROOT="${PWD}/${LOCAL_MOZROOT}"
   759           ;;
   760       *)
   761           glob_usage "Error: -"$1" requires a directoryname to follow"
   762           ;;
   763   esac
   764   Debug "Reformated MOZROOT to $LOCAL_MOZROOT"
   765   if [ "$1" = "ln" ] ; then
   766       LOCAL_MOZROOT_PARENT=`dirname $LOCAL_MOZROOT`
   767       if [ ! -d $LOCAL_MOZROOT_PARENT -o ! -w $LOCAL_MOZROOT_PARENT -o \
   768            ! -x $LOCAL_MOZROOT_PARENT ] ; then
   769               Exit "Error: Can't create $LOCAL_MOZROOT (permissions)"
   770       fi
   771       if [ ! -d "$LOCAL_MOZROOT" ] ; then
   772           mkdir $LOCAL_MOZROOT ||
   773               Exit "Error: Can't create mozroot $LOCAL_MOZROOT (mkdir failed)"
   774       else
   775           ask "mozroot $LOCAL_MOZROOT exists - continue (y will remove dir) ?" \
   776                "y" "n" || Exit
   777           rm -rf $LOCAL_MOZROOT/dist $LOCAL_MOZROOT/security $LOCAL_MOZROOT/tests_results ||
   778               Exit "Error: Can't clean mozroot $LOCAL_MOZROOT"
   779       fi
   780   fi
   781   if [ ! -d "$LOCAL_MOZROOT" ] ; then
   782       glob_usage "Error: mozilla root $LOCAL_MOZROOT not a valid directory"
   783   fi
   784 }
   786 ################################### eval_opts ##########################
   787 # global shell function, evapuates options and parameters, sets flags
   788 # variables and defaults
   789 ########################################################################
   790 eval_opts()
   791 {
   792   while [ -n "$1" ]
   793   do
   794     case $1 in
   795         -cron)
   796             turn_on_cronoptions
   797             ;;
   798         -T*|-t*)
   799             O_TBX=ON
   800             turn_on_cronoptions
   801             O_SILENT=OFF	#FIXME debug only
   802             ;;
   803         -S*|-s*)
   804             O_SILENT=ON
   805             ;;
   806         -Y*|-y)
   807             Debug "Option -y dedectet"
   808             O_ALWAYS_YES=ON
   809             ;;
   810         -d*|-D)
   811             O_DEBUG=ON
   812             #set -x
   813             ;;
   814         -ml|-ML)
   815             O_MAIL_LINK=ON
   816             shift
   817             MAILINGLIST=$1
   818             if [ -z "$MAILINGLIST" ]
   819             then
   820                 glob_usage "Error: -m requires a mailinglist to follow, for example sonmi,wtc,nelsonb "
   821             fi
   822             Debug "Sending link to result to $MAILINGLIST"
   823             ;;
   824         -m|-M)
   825             O_MAIL=ON
   826             shift
   827             MAILINGLIST=$1
   828             if [ -z "$MAILINGLIST" ]
   829             then
   830                 glob_usage "Error: -m requires a mailinglist to follow, for example sonmi,wtc,nelsonb "
   831             fi
   832             Debug "Sending result to $MAILINGLIST"
   833             ;;
   834         -fcron*|-F[Cc][Rr][Oo][Nn]*)
   835             write_to_tmpfile
   836             ;;
   837         -f|-F)
   838             O_FILE=ON
   839             shift
   840             FILENAME=$1
   841             if [ -z "$FILENAME" ]
   842             then
   843                 glob_usage "Error: -f requires a filename to follow"
   844             fi
   845             #rm -f $FILENAME 2>/dev/null
   846             touch $FILENAME || Exit "Error: can't touch $FILENAME"
   847                                     #NOTE we append rather that creating
   848             Debug "Writing output to $FILENAME"
   849             ;;
   850         -h|-help|"-?")
   851             glob_usage
   852             ;;
   853         -ln)
   854             if [ `basename $0` != nssqa ] ; then
   855                 glob_usage "Error: Can't handle option $1"
   856             fi
   857             O_LOCAL=ON
   858             O_LN=ON
   859             shift
   860             LOCAL_MOZROOT=$1
   861             test_mozroot ln
   862             ;;
   863         -lt)
   864             if [ `basename $0` != nssqa ] ; then
   865                 glob_usage "Error: Can't handle option $1"
   866             fi
   867             O_LN=ON
   868             O_LOCAL=ON
   869             ;;
   870         -l)
   871             if [ `basename $0` != nssqa ] ; then
   872                 glob_usage "Error: Can't handle option $1"
   873             fi
   874             O_LOCAL=ON
   875             shift
   876             LOCAL_MOZROOT=$1
   877             test_mozroot l
   878             ;;
   879         -p)
   880             shift
   881             PORT=$1
   882             export PORT
   883             ;;
   884         -*)
   885             glob_usage "Error: Can't handle option $1"
   886             ;;
   887         tip|3.|3..)
   888             NSSVER=$1
   889             if [ -z "$NSSVER" ] ; then
   890                 glob_usage "Error: illegal parameter"
   891             fi
   892             ;;
   893         [01][0-9][0123][0-9])
   894             BUILDDATE=$1
   895             if [ -z "$BUILDDATE" ] ; then
   896                 glob_usage "Error: illegal parameter"
   897             fi
   898             ;;
   899         ?*)
   900             glob_usage "Error: Can't handle parameter $1"
   901             ;;
   902     esac
   903     shift
   904   done
   906   if [ -z "$PORT" -a "$O_TBX" = "ON" ] ; then
   907       PORT=8444
   908       export PORT
   909       if [ -z "$NSSVER" ] ; then
   910           NSSVER="tip"
   911           Debug "NSS Version: Parameters missing - defaulting to tip!"
   912       fi
   913   elif [ -z "$NSSVER" ] ; then
   914       NSSVER="tip"
   915       Debug "NSS Version: Parameters missing - defaulting to tip!"
   916   fi
   917   if [ -z "$BUILDDATE" ] ; then
   918       BUILDDATE=`date +%m%d`
   919       Debug "Builddate: Parameters missing - defaulting to today!"
   920   fi
   922   Debug "Builddate $BUILDDATE NssVersion $NSSVER"
   923   export BUILDDATE NSSVER
   924   export O_CRON O_SILENT O_DEBUG O_ALWAYS_YES O_TBX
   925 }
   927 win_set_tmp()
   928 {
   929     TMP=`echo "$TMP" | sed -e 's/	/\/t/g' -e 's//\/b/' -e 's/\\\/\//g'`
   930     Debug "TMP reformated to $TMP"
   931 }
   933 ######################### win_set_d1 ################################
   934 # global shell function, interactively finds the directories in case
   935 # windows can't get to the default
   936 ########################################################################
   937 win_set_d1()
   938 {
   939     Debug "set Windows Directories..."
   940     #win_set_tmp
   941     if [ "$O_CYGNUS" = ON ]
   942     then
   943         NSS_VER_DIR=/cygdrive/w/nss/nss$NSSVER
   944     else
   945         NSS_VER_DIR=w:/nss/nss$NSSVER
   946     fi
   947     if [ ! -w $NSS_VER_DIR ]
   948     then
   949         Echo "Windows special... can't write in $NSS_VER_DIR"
   950         if [ "$O_CYGNUS" = ON ]
   951         then
   952             NSS_VER_DIR=/cygdrive/u/nss/nss$NSSVER
   953         else
   954             NSS_VER_DIR="u:/nss/nss$NSSVER"
   955         fi
   956     else
   957         Debug "NSS_VER_DIR set to $NSS_VER_DIR"
   958         return
   959     fi
   961     while [ ! -w $NSS_VER_DIR ]
   962     do
   963         if [ "$O_CRONFILE" = "ON" ] 
   964         then
   965             Exit "cant write in $NSS_VER_DIR" 
   966         fi
   967         Warning "cant write in $NSS_VER_DIR" 
   968         Echo "input start directory (u:/nss, d:/src/nss, f:/shared/nss) "
   969         read D
   970         if [ -n "$D" ]
   971         then
   972             NSS_VER_DIR=$D/nss$NSSVER
   973         fi
   974     done
   975     Debug "NSS_VER_DIR set to $NSS_VER_DIR"
   976 }
   978 ########################### init_host ##################################
   979 # global shell function, sets required variables HOST and DOMSUF, and asks
   980 # the user if it has been set right
   981 ########################################################################
   982 set_host()
   983 {
   984     init_host
   985 }
   986 init_host()
   987 {
   988     if [ `basename $0` != nssqa ] ; then
   989         return
   990     fi
   992     init_host_done=0
   994     if [ $DS_WAS_SET = FALSE ] #give chance to overwrite, espec. for NT
   995     then
   996         Debug "Domainname was not set..."
   997         DOMSUF=`domainname 2>/dev/null`
   998         if [ -z "$DOMSUF" ]
   999         then
  1000             Debug "domainname command did not work ..."
  1001             DOMSUF=`echo $HOST | grep '\.' | sed -e "s/[^\.]*\.//"`
  1003             if [ -z "$DOMSUF" ]
  1004             then
  1005                 Debug "Domainname not part of the hostname"
  1006                 DOMSUF=`cat /etc/defaultdomain 2>/dev/null`
  1007                 if [ -z "$DOMSUF" ]
  1008                 then
  1009                     Debug "Domainname needs to be hardcoded to red.iplanet.com"
  1010                     DOMSUF="red.iplanet.com"
  1011                 fi
  1012             fi
  1013         fi
  1014     fi
  1015     case $HOST in
  1016         *\.*)
  1017             Debug "HOSTNAME $HOST contains Dot"
  1018             HOST=`echo $HOST | sed -e "s/\..*//"`
  1019             ;;
  1020     esac
  1021     if [ -z "$HOST" ]
  1022     then
  1023         HOST=`uname -n`
  1024         case $HOST in
  1025             *\.*)
  1026                 Debug "HOSTNAME $HOST contains Dot"
  1027                 HOST=`echo $HOST | sed -e "s/\..*//"`
  1028                 ;;
  1029         esac
  1030     fi
  1031     if [ $O_DEBUG = "ON" ]
  1032     then
  1033         while [ $init_host_done -eq 0 ]
  1034         do
  1035             Echo
  1036             ask "DOMSUF=$DOMSUF, HOST=$HOST - OK", "y" "n" &&
  1037                 init_host_done=1
  1038             if [ $init_host_done -eq 0 ]
  1039             then
  1040                 Echo "input DOMSUF: "
  1041                 read D
  1042                 if [ -n "$D" ]
  1043                 then
  1044                     DOMSUF=$D
  1045                 fi
  1046                 Echo "input HOST: "
  1047                 read H
  1048                 if [ -n "$H" ]
  1049                 then
  1050                     HOST=$H
  1051                 fi
  1052             fi
  1053         done
  1054     fi
  1055     export HOST DOMSUF
  1056     Debug "HOST: $HOST, DOMSUF: $DOMSUF"
  1059 #-----------------------------# UTILS #----------------------------------
  1061 ########################### qa_stat_get_sysinfo ########################
  1062 # local shell function, tries to determine the QA operating system
  1063 ########################################################################
  1064 qa_stat_get_sysinfo()
  1066     case $1 in
  1067         ?*) REM_SYS=$1
  1068             GET_SYSINFO="rsh $1"
  1069             ;;
  1070         *)  REM_SYS=""
  1071             GET_SYSINFO=""
  1072             ;;
  1073     esac
  1074     QA_SYS=`$GET_SYSINFO uname -sr`
  1075     echo $QA_SYS | grep Linux >/dev/null &&
  1076               QA_RHVER=`$GET_SYSINFO cat /etc/redhat-release`
  1077     if [ -n "$QA_RHVER" ]
  1078     then
  1079         QA_OS=`echo $REM_SYS $QA_RHVER | sed -e "s/Red Hat /RH /" \
  1080                     -e "s/ release//"`
  1081     else
  1082         case $QA_SYS in
  1083             *SunOS*5.[89]*)
  1084                 ISAINFO=`$GET_SYSINFO isainfo -v`
  1085                 IS_64=`echo $ISAINFO | grep 64 >/dev/null && \
  1086                     echo 64 bit`
  1087                 IS_I386=`echo $ISAINFO | grep i386 >/dev/null && \
  1088                     echo i86pc`
  1089                 if [ -n "$IS_I386" ] ; then IS_64="$IS_I386"; fi;
  1090                 if [ -z "$IS_64" ] ; then IS_64="32 bit"; fi;
  1091                 ;;
  1092             *HP*)
  1093                 IS_64=`$GET_SYSINFO getconf KERNEL_BITS |
  1094                     grep 64 >/dev/null && echo 64 bit`
  1095                 if [ -z "$IS_64" ] ; then IS_64="32 bit"; fi;
  1096                 ;;
  1097             *AIX*)
  1098                 IS_64=`$GET_SYSINFO lslpp -l |
  1099                     grep "bos.64bit"> /dev/null && echo 64 bit`
  1100                 if [ -z "$IS_64" ] ; then IS_64="32 bit"; fi;
  1101                 ;;
  1102         esac
  1103         QA_OS=`echo "$REM_SYS $QA_SYS $IS_64"`
  1104     fi
  1105     if [ "$O_SILENT" != ON ] ; then
  1106         echo $QA_OS
  1107     fi
  1108     QA_OS_STRING=`echo $QA_OS | sed -e "s/^[_ ]//" -e "s/ /_/g"`
  1111 ################################### set_objdir #########################
  1112 # global shell function, sets the object directories and DIST
  1113 ########################################################################
  1114 set_objdir()
  1116     Debug "set object dir"
  1117     OBJDIR=`cd ${TESTSCRIPTDIR}/common; gmake objdir_name`
  1118     OS_ARCH=`cd ${TESTSCRIPTDIR}/common; gmake os_arch`
  1120     #at this point $MASTERBUILD needs to be either NT or unix
  1122     set_daily_build_dirs
  1123     LOCALDIST_BIN=${LOCALDIST}/${OBJDIR}/bin
  1124     DIST=$LOCALDIST
  1126     if [ -z "${TEST_LEVEL}" ] ; then 
  1127         TEST_LEVEL=0
  1128     fi
  1129     bc ${TEST_LEVEL}   #set the path for the backward compatibility test
  1131     PATH_CONTAINS_BIN="TRUE"
  1132     export PATH_CONTAINS_BIN
  1134     export OBJDIR OS_ARCH LOCALDIST LOCALDIST_BIN DIST PATH 
  1137 ########################### bc #########################################
  1138 # global shell function , sets paths for the backward compatibility test
  1139 ########################################################################
  1140 bc()
  1142   if [ -n "$PRODUCT_TO_TEST" -a "$PRODUCT_TO_TEST" = "JSS" ] ; then
  1143       TESTDIR=${RESULTDIR}
  1144       BC_ACTION=""
  1145       DON_T_SET_PATHS="FALSE" #let init.sh override - FIXME - check if necessary
  1146       return
  1147   fi
  1148   DON_T_SET_PATHS="TRUE"
  1149   case $1 in
  1150     0)
  1151       #unset TESTDIR
  1152       TESTDIR=${RESULTDIR}
  1153       if [ "$O_WIN" = "ON" -a "$O_CYGNUS" != ON ] ; then
  1154           PATH="$TESTSCRIPTDIR;$LOCALDIST_BIN;$BASEPATH"
  1155       else
  1156           PATH=$TESTSCRIPTDIR:$LOCALDIST_BIN:$BASEPATH
  1157       fi
  1158       BC_ACTION=""
  1159       DON_T_SET_PATHS="FALSE" #let init.sh override - FIXME - check if necessary
  1160       ;;
  1161     *)
  1162       if [ "$O_LOCAL" = "ON" ] ; then
  1163           Exit "FIXME Can't run backwardcompatibility tests locally yet"
  1164       fi
  1165       TESTSCRIPTDIR=${BCDIST}/../security/nss/tests
  1166       COMMON=${TESTSCRIPTDIR}/common
  1167       TESTDIR=${RESULTDIR}/bct
  1168       BC_ACTION="backward compatibility of binaries in $BC_MASTER to new libs"
  1169       BCDIST_BIN=${BCDIST}/${OBJDIR}/bin
  1170       LD_LIBRARY_PATH=${LOCALDIST}/${OBJDIR}/lib
  1171       if [ "$O_WIN" = "ON" ] ; then
  1172           if [ "$O_CYGNUS" = ON ] ; then
  1173               PATH=$TESTSCRIPTDIR:$BCDIST_BIN:$BASEPATH:$LD_LIBRARY_PATH
  1174           else
  1175               PATH="$TESTSCRIPTDIR;$BCDIST_BIN;$BASEPATH;$LD_LIBRARY_PATH"
  1176           fi
  1177       else
  1178           PATH=$TESTSCRIPTDIR:$BCDIST_BIN:$BASEPATH
  1179       fi
  1180       Debug "1st stage of backward compatibility test"
  1181       ;;
  1182   esac
  1183   if [ -n "$TESTDIR" ] ; then
  1184       if [ ! -d $TESTDIR ] ; then
  1185           mkdir -p $TESTDIR
  1186       fi
  1187       export TESTDIR
  1188   fi
  1189   SHLIB_PATH=${LD_LIBRARY_PATH}
  1190   LIBPATH=${LD_LIBRARY_PATH}
  1191   Debug "PATH $PATH"
  1192   Debug "LD_LIBRARY_PATH $LD_LIBRARY_PATH"
  1193   export PATH LD_LIBRARY_PATH SHLIB_PATH LIBPATH
  1194   export DON_T_SET_PATHS BC_ACTION
  1195   export TESTSCRIPTDIR COMMON
  1198 ########################### Ps #########################################
  1199 # global shell function , attempts a platform specific ps
  1200 ########################################################################
  1201 Ps()
  1203 #AIX, OSF ps -ef, solaris /usr/5bin/ps -ef, win ps -ef but no user id
  1204 #linux ps -ef, HP
  1206     if [ $os_name = "SunOS" ]
  1207     then
  1208         /usr/5bin/ps -ef
  1209     else
  1210         ps -ef
  1211     fi
  1214 ########################### kill_by_name ################################
  1215 # global shell function , kills the process whose name is given as 
  1216 # parameter 
  1217 ########################################################################
  1218 kill_by_name()
  1220     for PID in `Ps | grep "$1" | grep -v grep | \
  1221         sed -e "s/^ *//g" -e "s/^[^ ]* //" -e "s/^ *//g" -e "s/ .*//g"`
  1222     do
  1223         if [ $O_WIN = "ON" -a $O_CYGNUS = "ON" ]
  1224         then
  1225             ask "Do you want to kill Process $PID (`Ps | grep $PID | \
  1226                 grep -v grep | awk '{ print $1, $2, $6, $7, $8, $9 }' | \
  1227                 sed -e "s/[0-9]:[0-6][0-9]//g" | grep $PID `)" \
  1228                 "y" "n" && {
  1229                 kill $PID
  1230                 sleep 1
  1231                 kill -9 $PID 2>/dev/null
  1233         else
  1234             ask "Do you want to kill Process $PID (`Ps | grep $PID | \
  1235                 grep -v grep | awk '{ print $1, $2, $8, $9, $10, $11 }' | \
  1236                 sed -e "s/[0-9]:[0-6][0-9]//g" | grep $PID `)" \
  1237                 "y" "n" && {
  1238                 kill $PID
  1239                 sleep 1
  1240                 kill -9 $PID 2>/dev/null
  1242         fi
  1243     done
  1246 ############################### early_exit ###################################
  1247 # global shell function , attempts a little more usefull user notification
  1248 # of a complete failure
  1249 ########################################################################
  1251 early_exit()
  1253     if [ -z "$DOCDIR" ]
  1254     then
  1255         DOCDIR=`dirname $0`/../doc
  1256     fi
  1257     if [ -f $DOCDIR/QAerror.html ]
  1258     then
  1259         Debug "Found QA errorheader"
  1260         rm ${FILENAME}.err 2>/dev/null
  1261         cp $DOCDIR/QAerror.html ${FILENAME}.err
  1262         echo "$1" >>${FILENAME}.err
  1263         echo '</font></b></h1>' >>${FILENAME}.err
  1264         if [ -n "$FILENAME" -a -f "$FILENAME" ]
  1265         then
  1266             cat $FILENAME | sed -e "s/^/<br>/" >>${FILENAME}.err
  1267         fi
  1268         echo '</body></html>' >>${FILENAME}.err
  1269         cat ${FILENAME}.err | $RMAIL $MAILINGLIST
  1271         rm ${FILENAME}.err 2>/dev/null
  1272         #echo "cat ${FILENAME}.err | $RMAIL $MAILINGLIST "
  1273     fi
  1276 ############################### Exit ###################################
  1277 # global shell function , central exiting point
  1278 # cleanup: temporary files, kill the remaining selfservers if sourcing
  1279 # script sets KILL_SELFSERV 
  1280 ########################################################################
  1281 Exit()
  1283     Echo $1    
  1284     if [ "$O_CRON" = "OFF" ] 
  1285     then
  1286         echo $1 >&2
  1287     fi
  1288     if [ -f "${KILLPIDS}" ]
  1289     then
  1290         Debug "Attempting to kill background processes...`cat ${KILLPIDS}`"
  1291         kill `cat "${KILLPIDS}"` 
  1292         sleep 1
  1293         kill -9  `cat "${KILLPIDS}"`
  1294     fi
  1295     if [ -n "${TMPFILES}" ]
  1296     then
  1297         Debug "rm -f ${TMPFILES}"
  1298         rm -f $TMPFILES 2>/dev/null
  1299     fi
  1300     O_ALWAYS_YES=ON # set to non-interactive - don't ask anymore questions here
  1301     if [ $KILL_SELFSERV = "ON" ]
  1302     then
  1303         kill_by_name selfserv
  1304     fi
  1305     if [ $O_MAIL_LINK = "ON" -a $O_FILE = "ON" ]
  1306     then
  1307         if [ $EARLY_EXIT = TRUE ]    #before the report file has been created
  1308         then
  1309             early_exit "$1"
  1310         else
  1311             head -3  $FILENAME >$ML_FILE
  1312             echo "Content-Type: text/plain; charset=us-ascii; format=flowed
  1313     Content-Transfer-Encoding: 7bit
  1315 " >>$ML_FILE
  1316             echo $HREF_TMP_HTML_FILE >>$ML_FILE
  1317             cat $ML_FILE | $RMAIL $MAILINGLIST
  1318         fi
  1320 #FIXME - early exit etc
  1321     elif [ $O_MAIL = "ON" -a $O_FILE = "ON" ]
  1322     then
  1323         if [ $EARLY_EXIT = TRUE ]    #before the report file has been created
  1324         then
  1325             early_exit "$1"
  1326         elif [ -n "$FILENAME" -a -f "$FILENAME" ]
  1327         then
  1328             cat $FILENAME | $RMAIL $MAILINGLIST
  1329         fi
  1330         #rm $FILENAME 2>/dev/null
  1331     elif  [ $O_MAIL = "ON" -a $EARLY_EXIT = TRUE ]
  1332     then
  1333         early_exit "$1"
  1334         rm $FILENAME 2>/dev/null
  1335     fi
  1336     #chmod a+rw ${RESULTDIR} ${RESULTDIR}/* ${RESULTDIR}/*/* &
  1337     if [ -n "$O_TBX" -a "$O_TBX" = "ON" ] ; then
  1338         rm ${TESTDIR}/QAstatus
  1340         if [ "$1" = "killed... cleaning up..." ] ; then
  1341             echo "QA killed" >${TESTDIR}/QAstatus
  1342         elif [ "$TBX_EXIT" = 0 ] ; then
  1343             echo "QA passed" >${TESTDIR}/QAstatus
  1344         else
  1345             echo "QA failed" >${TESTDIR}/QAstatus
  1346         fi
  1348         exit $TBX_EXIT
  1350     else
  1351         exit
  1352     fi
  1355 trap "rm -f ${TMPFILES} 2>/dev/null; Exit 'killed... cleaning up...'" 2 3 15
  1357 ################################ Wait ##################################
  1358 # global shell function to wait for an event to happen, 1st parameter
  1359 # filename to watch, 2nd parameter 0 - wait for it to disappear, 1 wait
  1360 # for it to be created.
  1361 # uses the variables WAIT_FOR and WAIT_TIMES
  1362 # WAIT_FOR: if waiting for an event sleep n seconds before rechecking 
  1363 #     recomended value 10 minutes 600
  1364 # WAIT_TIMES: recheck n times before giving up to prevent endless loop
  1365 #     recomended 30 - total of 5h
  1366 ########################################################################
  1368 Wait()
  1370     i=0
  1371     Debug "Waiting for $1"
  1372     while [ $i -lt $WAIT_TIMES ]
  1373     do
  1374         i=`expr $i + 1`
  1375         if [ -f "$1" -a $2 -eq 1 ]   # if file exists and is supposed to 
  1376         then
  1377             return
  1378         fi
  1379         if [ ! -f "$1" -a $2 -eq 0 ] # not exists and not supposed to exist
  1380         then
  1381             return
  1382         fi
  1383         Debug "Waiting for $1, loop #$i, about to sleep $WAIT_FOR seconds zzzz..."
  1384         sleep $WAIT_FOR
  1385     done
  1386     TOTAL=`expr $WAIT_TIMES \* $WAIT_FOR / 60`
  1387     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... "
  1390 ################################ WaitForever ##################################
  1391 # global shell function to wait for an event to happen, 1st parameter
  1392 # filename to watch, 2nd parameter 0 - wait for it to disappear, 1 wait
  1393 # for it to be created.
  1394 # because we daon't have any relyable cron on NT...
  1395 ########################################################################
  1397 WaitForever()
  1399     i=0
  1400     Debug "Waiting for $1"
  1401     TOTAL=0
  1402     while [ 1 ]
  1403     do
  1404         i=`expr $i + 1`
  1405         if [ -f "$1" -a $2 -eq 1 ] # if file exists and is supposed to 
  1406         then
  1407             return
  1408         fi
  1409         if [ ! -f "$1" -a $2 -eq 0 ] # not exists and not supposed to exist
  1410         then
  1411             return
  1412         fi
  1413         Debug "Waiting for $1, loop #$i, about to sleep $WAIT_FOR seconds Total $TOTAL"
  1414         sleep $WAIT_FOR
  1415         TOTAL=`expr $i \* $WAIT_FOR / 60`
  1416         if [ -n "$MAX_FOREVER" ] # we are cheating. Forever can be very short...
  1417         then
  1418             if [ "$TOTAL" -gt "$MAX_FOREVER" ] 
  1419             then
  1420                 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... "
  1421             fi
  1422         fi
  1423     done
  1425 ################################### is_running #########################
  1426 # global shell function , implements primitive locking mechanism
  1427 # filename is passed as a parameter, if filename.* exists we assume calling
  1428 # script is running already and exit, otherwise filename.processid is 
  1429 # created 
  1430 ########################################################################
  1431 is_running()
  1433     Debug "Testing if $0 is already running... file ${1} - ${1}.$$"
  1434     if [ -f ${1}.* ]
  1435     then
  1436         Exit "$0 seems to be running already ($1 exists) - Exiting"
  1437     fi
  1438     TMPFILES="$TMPFILES ${1}.$$"
  1439     echo "running $0 on `date` PID $$" >${1}.$$
  1440     Debug "wrote \"running $0 on `date` PID $$\" to ${1}.$$"
  1444 #---------------------------# USERCOM #---------------------------------
  1445 ############################## Echo #####################################
  1446 # global shell function , depending on the options the output gets written 
  1447 # to a file, or is being discarded
  1448 # FIXME  \n and \c are mistreates by differnet shells, and linux has /bin/echo
  1449 # instead of /usr/bin/echo
  1450 ########################################################################
  1451 Echo ()
  1453     if [ $O_SILENT = OFF ]
  1454     then
  1455         echo "$*"
  1456         #/usr/bin/echo "$*"
  1457     fi
  1458     if [ $O_FILE = ON ]
  1459     then
  1460         echo "$*" >>$FILENAME
  1461     fi
  1464 ################################### ask ################################
  1465 # global shell function, Asks the a question, and gives the returns 0
  1466 # on the 1st choice, 1 on the 2nd choice
  1468 # PARAMETERS:
  1469 #    $1 question text
  1470 #    $2 1st choice
  1471 #    $3 2nd choice
  1473 # MODIFIERS:
  1474 #    -y O_ALWAYS_YES will assume a first choice always (not neccessaryly "y")
  1476 # RETURN:
  1477 #    0 - User picked 1st choice
  1478 #    1 - User picked 2nd choice
  1480 # EXAMPLE
  1481 #    ask "Would you like to continue" "y" "n" || Exit
  1482 #        will produce the string "Would you like to continue (y/n) ?",
  1483 #        read input from keyboard (or assume a yes with option -y)
  1484 #        - on a yes it will return 0, on a no it will return 1, the 
  1485 #        shell interprets it as error and the || Exit will be executed
  1487 # NOTE: NEVER use "n" as the second parameter - it will mess up -y
  1488 #    don't ask "Continue" "n" "y" || Exit # it will Exit on a "y"
  1490 ########################################################################
  1491 Ask()
  1493     ask $*
  1496 ask()
  1498     if [ $O_ALWAYS_YES = ON ]
  1499     then
  1500         Echo "$1 ($2/$3) ?"
  1501         Echo "YES!"
  1502         return 0
  1503     fi
  1504     A=""
  1505     while [ 1 ]
  1506     do
  1508         Echo "$1 ($2/$3) ?"
  1509         read A
  1510         if [ -n "$A" ]
  1511         then
  1512             if [ $A = $2 ]
  1513             then
  1514                 return 0
  1515             elif [ $A = $3 ]
  1516             then
  1517                 return 1
  1518             fi
  1519         fi
  1520     done
  1521     return 0
  1524 ################################### Warning ############################
  1525 # global shell function, Asks the user a "... continue? (y/n)" question, 
  1526 # and exits when the user answers with no
  1527 # NOTE -y will answer the warnings always with yes
  1528 ########################################################################
  1529 Warning ()
  1531     ask "WARNING: $0: \n $* continue " "y" "n" || Exit 
  1534 ################################### Debug ############################
  1535 # global shell function, when option -d Debugging output is written
  1536 ########################################################################
  1537 Debug()
  1539     if [ $O_DEBUG = ON ]
  1540     then
  1541         Echo "DEBUG: (`date +%H:%M`) $0: $*"
  1542     fi
  1545 ################################### line ###############################
  1546 # global shell function, supposed to make output more readable...
  1547 ########################################################################
  1548 line()
  1550 Echo
  1551 #Echo "======================================================================="
  1552 #Echo
  1555 ################################### opt_usage ##########################
  1556 # global shell function, tells user about available options
  1557 ########################################################################
  1558 opt_usage()
  1560   if [ $O_OPTIONS = "ON" ]
  1561   then
  1562     Echo
  1563     line
  1564     Echo
  1565     Echo "    -y answer all questions with y - use at your own risk..."
  1566     Echo "    -s silent (only usefull with -y)"
  1567     Echo "    -h, -? - you guessed right - displays this text"
  1568     Echo "    -d debug"
  1569     Echo "    -f <filename> - write the (error)output to filename"
  1570     Echo "    -fcronfile produces the resultfiles in the same locations"
  1571     Echo "        as would have been produced with -cron"
  1572     Echo "    -m <mailinglist> - send filename to mailinglist (csl "
  1573     Echo "         example sonmi,nelsonb,wtc) only useful with -f"
  1574     Echo "    -ml <mailinglist> - send link to filename to mailinglist "
  1575     Echo "         (csl example sonmi,nelsonb,wtc) only useful with -f"
  1576     Echo "    -cron equivalient to -y -s -d -f \$RESULTDIR/\$HOST.nssqa"
  1577     Echo "    -t run on a tinderbox build (included -cron)"
  1578     if [ `basename $0` = nssqa ] ; then
  1579         Echo "    -l <mozroot> run on a local build"
  1580         Echo "    -ln <mozroot> copy a networkbuild to a local directory "
  1581         Echo "        mozroot,  used for networkindipendend QA "
  1582         Echo "    -lt try to copy a networkbuild to a local directory, if"
  1583         Echo "        not possible run on the network
  1584         Echo "        used for networkindipendend QA
  1585     fi
  1587 # special strings
  1588   fi
  1592 ################################### glob_usage #########################
  1593 # global shell function, how to use the calling script (parameters, options)
  1594 ########################################################################
  1595 glob_usage()
  1597     line
  1598     Echo $1
  1599     Echo
  1600     if [ $O_OPTIONS = "ON" ]
  1601     then
  1602         Echo "usage $0 [options] nssversion builddate"
  1603     else
  1604         Echo "usage $0 nssversion builddate"
  1605     fi
  1607     Echo " for example: $0 30b 0926"
  1608     Echo "     $0 31 1002"
  1609     opt_usage
  1610     Echo
  1611     Exit "$1"
  1614 tell()
  1616     if [ $O_SILENT = OFF ]
  1617     then
  1618         line
  1619         pwd
  1620         ls -CF
  1621         line
  1622     fi
  1623     if [ $O_FILE = ON ]
  1624     then
  1625         line
  1626         pwd >>$FILENAME
  1627         ls -CF >>$FILENAME
  1628         line 
  1629     fi
  1632 if [ $O_INIT = "ON" ]
  1633 then
  1634     glob_init $*
  1635 fi
  1636 EARLY_EXIT=FALSE

mercurial