1#! /bin/sh
2
3########################################################################
4#
5# /u/sonmi/bin/nssqa - /u/svbld/bin/init/nss/nssqa
6#
7# this script is supposed to automatically run QA for NSS on all required
8# Unix and Windows (NT and 2000) platforms
9#
10# parameters
11# ----------
12#   nssversion  (supported: 30b, 31, tip)
13#   builddate   (default - today)
14#
15# options
16# -------
17#   -y answer all questions with y - use at your own risk...ignores warnings
18#   -s silent (only usefull with -y)
19#   -h, -? - you guessed right - displays this text
20#   -d debug
21#   -f <filename> - write the (error)output to filename
22#   -cron equivalient to -y -s -d -f $RESULTDIR/$HOST.nssqa
23#
24# 12/1/00
25# took out the (unused) local directory for releasebuild QA on NT
26# cleaned up 32 - 64 bit issues
27# took hardcoded machinenames out
28########################################################################
29
30O_OPTIONS=ON            # accept options (see above for listing)
31WIN_WAIT_FOREVER=ON     # first we wait forever for a TESTDIR to appear, than
32                        # we wait forever for the build to finish...
33
34TBX_EXIT=50             # in case we are running on a tinderbox build, any
35                        # early exit needs to return an error
36. `dirname $0`/header   # utilities, shellfunctions etc, global to NSS QA
37
38if [ -z "$O_TBX" -o "$O_TBX" != "ON" ] ; then
39    is_running ${TMP}/nssqa
40                        # checks if the file exists, if yes Exits, if not
41                        # creates to implement a primitive locking mechanism
42fi
43
44KILL_SELFSERV=OFF       # cleanup will also kill the leftover selfserv processes
45
46################################ check_distdir #########################
47# local shell function to check if the DIST directory exists, if not there
48# is no use to continue the test
49########################################################################
50check_distdir()
51{
52    set_objdir
53
54    if [ ! -d "$LOCALDIST_BIN" ]
55    then
56        Debug "Dist $DIST"
57        Warning "$LOCALDIST_BIN (the dist binaries dir) does not exist"
58        return 1
59    fi
60
61    if [ ! -d "$LOCALDIST" -a ! -h "$LOCALDIST" ]
62    then
63        Debug "Dist $DIST"
64        Warning "$LOCALDIST (the dist directory) does not exist"
65        return 1
66    fi
67
68    Debug "LOCALDIST_BIN $LOCALDIST_BIN"
69    Debug "Dist $DIST"
70    return 0
71}
72
73################################ run_all ###############################
74# local shell function to start the all.sh after asking user and redirect
75# the output apropriately
76########################################################################
77run_all()
78{
79    check_distdir || return 1
80    #kill_by_name selfserv
81    ask "Testing $OBJDIR continue with all.sh" "y" "n" || Exit
82
83    Debug "running all.sh in `pwd`"
84    if [ $O_SILENT = ON ]
85    then
86        if [ $O_DEBUG = ON -a $O_FILE = ON ]
87        then
88            all.sh >>$FILENAME 2>>$FILENAME
89        else
90            all.sh >/dev/null 2>/dev/null
91        fi
92    else
93        all.sh
94    fi
95    Debug "Done with all.sh "
96    line
97}
98
99all_sh()
100{
101    echo
102}
103
104
105########################### wait_for_build #############################
106# local shell function to wait until the build is finished
107########################################################################
108wait_for_build()
109{
110  if [ $O_WIN = "ON" ]
111  then
112      WaitForever ${OSDIR}/SVbuild.InProgress.1 0
113                     #Wait for the build to finish Windows a lot longer
114      OS_TARGET=WINNT;export OS_TARGET;Debug "OS_TARGET set to $OS_TARGET"
115      QA_OS_NAME=`cd ${TESTSCRIPTDIR}/common; gmake objdir_name | \
116          sed -e "s/WINNT4.0.*/Windows-NT-4.0/" -e "s/WINNT5.0.*/Windows-2000/"`
117      Echo "WINDOWS-OS-LINE: $QA_OS_NAME"
118  else
119      Wait ${OSDIR}/SVbuild.InProgress.1 0
120                     #Wait for the build to finish... Unix a few hours
121      qa_stat_get_sysinfo
122      Echo "UNIX-OS-LINE: $QA_OS"
123  fi
124  find_nt_masterbuild
125}
126
127
128########################### map_os #############################
129# local shell function: From the operatingsystem figure out the name of
130#     the build ; needed to detemine if the build finished, passed and for
131#     the directory names
132########################################################################
133map_os32()
134{
135    case `uname -s` in
136        SunOS)
137            S_REL=`uname -r | sed -e "s/^[^\.]*\.//g"`
138            if [ `uname -p` = "i386" ] ; then
139                MAPPED_OS=Solaris8_x86
140            elif [ "$S_REL" -lt 8 ] ; then
141                MAPPED_OS=Solaris2.6
142            else
143                MAPPED_OS=Solaris8_forte6
144            fi
145            ;;
146        OSF1)
147            MAPPED_OS=OSF1V4.0
148            ;;
149        Darwin)
150            MAPPED_OS=Darwin6.5
151            ;;
152        AIX)
153            MAPPED_OS=AIX4.3
154            ;;
155        Linux)
156            RH_MR=`cat /etc/redhat-release | sed \
157                -e "s/Red Hat Linux release //" -e "s/ .*//g" \
158                -e "s/\..*//g"`
159
160            if [ "$RH_MR" = "6" ] ; then
161                MAPPED_OS=Linux2.2
162            else
163                MAPPED_OS=Linux2.4
164                LD_ASSUME_KERNEL="2.2.5"
165                export LD_ASSUME_KERNEL
166            fi
167            ;;
168        HP-UX)
169            MAPPED_OS=HPUX11.00
170            ;;
171        *)
172            if [ "$os_name" = "Windows" ]
173            then
174                MAPPED_OS=NT4.0
175            else
176                Exit "Sorry, operating system `uname -s` is not supported yet"
177            fi
178            ;;
179    esac
180    set_osdir
181    Debug "Mapped OS to $MAPPED_OS"
182}
183
184############################# nssqa_main ###############################
185# local shell function main controlling function of the nss qa
186########################################################################
187nssqa_main()
188{
189  Debug "In function nssqa_main"
190
191  if [ $O_WIN = "OFF" -a "$O_TBX" = "OFF" -a $O_LOCAL = "OFF" ] ; then
192      if [ ! -h ${NTDIST}/WINNT5.0_DBG.OBJ -o \
193              ! -h ${UXDIST}/SunOS5.8_OPT.OBJ -o \
194              ! -h ${UXDIST}/OSF1V5.0_DBG.OBJ ] ; then
195          # determine if all needed symbolic links are present, in case
196          # we build on one platform and QA on another
197          # create the symbolic links
198          #mksymlinks $* ||
199          `dirname $0`/mksymlinks  $NSSVER $BUILDDATE ||
200              Warning "Can't make the neccessary symbolic links"
201      fi
202  fi
203
204  if [ -d $TESTSCRIPTDIR ]    #the directory mozilla/security/nss/tests,
205  then            # where all.sh lives
206      cd $TESTSCRIPTDIR
207  else
208      Exit "cant cd to $TESTSCRIPTDIR Exiting"
209  fi
210
211  Debug "Testing from `pwd`"
212  line
213  Debug "HOST: $HOST, DOMSUF: $DOMSUF"
214
215  if [  "$O_TBX" = "OFF" ] ; then
216      map_os32 # From the operatingsystem figure out the name of the build
217      Debug Testing build for $MAPPED_OS in $OSDIR
218      wait_for_build
219  fi
220  run_all
221  BUILD_OPT=1; export BUILD_OPT; Debug "BUILD_OPT $BUILD_OPT"
222  run_all
223
224  # now for the 64 bit build!
225  map_os64 # From the operatingsystem figure out the name of the build
226  if [ -n "$IS_64" ] ; then #Wait for the 64 bit build to finish...
227      Debug "This is a $IS_64 platform"
228      USE_64=1;export USE_64;Debug "Use_64 set to $USE_64"
229      unset BUILD_OPT;export BUILD_OPT;Debug "BUILD_OPT $BUILD_OPT"
230
231      run_all
232      BUILD_OPT=1; export BUILD_OPT; Debug "BUILD_OPT $BUILD_OPT"
233      run_all
234  elif [ "$O_WIN" = "ON" ] ; then
235      OS_TARGET=WIN95;export OS_TARGET
236      Debug "OS_TARGET set to $OS_TARGET"
237      #Echo "WINDOWS-OS-LINE: $os_name $os_full $OS_TARGET"
238      unset BUILD_OPT;export BUILD_OPT;Debug "BUILD_OPT $BUILD_OPT"
239      #if [ "$TEST_LEVEL" = "0" ] ; then
240          #QA_OS_NAME=`cd ${TESTSCRIPTDIR}/common; gmake objdir_name | \
241              #sed -e "s/WINNT4.0.*/Windows-NT-4.0/" -e \
242                     #"s/WINNT5.0.*/Windows-2000/"`
243          #Echo "WINDOWS-OS-LINE: $QA_OS_NAME $OS_TARGET"
244      #fi
245      run_all
246      BUILD_OPT=1; export BUILD_OPT; Debug "BUILD_OPT $BUILD_OPT"
247      run_all
248  else
249      Debug "This is a 32 bit platform"
250  fi
251}
252
253TEST_LEVEL=0
254
255while [ $TEST_LEVEL -lt 2 ] ; do
256    export TEST_LEVEL
257    unset BUILD_OPT;export BUILD_OPT;Debug "BUILD_OPT $BUILD_OPT"
258    unset USE_64;export USE_64;Debug "USE_64 $USE_64"
259    bc $TEST_LEVEL
260    Debug "About to start nssqa_main"
261    if [ $O_FILE = ON -a "$O_WIN" != "ON" ] ; then
262        nssqa_main 2>>$FILENAME
263    else
264        nssqa_main
265    fi
266    if [  "$O_TBX" = "ON" ] ; then      # do not do backward compatibility
267         TEST_LEVEL=3                   # testing on tinderbox
268    else
269         TEST_LEVEL=`expr $TEST_LEVEL + 1 `
270    fi
271done
272
273if [  "$O_TBX" = "ON" -o "$O_LOCAL" = "ON" ] ; then
274#FIXME - maybe it should be copied back to the networkdrive later (-ln)
275    if [ -n "${TMPFILES}" ] ; then #caused problems on tinderbox machines
276        Debug "rm -f ${TMPFILES}"
277        rm -f $TMPFILES 2>/dev/null
278    fi
279    Debug "running qa_stat"
280    . `dirname $0`/qa_stat
281fi
282
283
284qa_stat_get_sysinfo
285
286Exit "nssqa completed. Done `uname -n` $QA_OS_STRING"
287