The new QA wrapper consistst mainly of 2 scripts, nssqa and qa_stat, both 
include a common header (header) and a common environment (set_environment). 
Also used is mksymlinks and path_uniq.

The scripts that are used on a daily basis are located in /u/sonmi/bin. 

Parameters and Options are the same for both scripts.

Parameters
----------
	nssversion (supported: 30b, 31, tip)
	builddate (default - today, format mmdd)

Options
-------
	-y answer all questions with y - use at your own risk... ignores warnings 
	-s silent (only usefull with -y)
	-h, -? -help you guessed right - displays the usage
	-d debug 
	-f <filename> - write the (error)output to filename
	-m <mailinglist> - send filename to mailinglist (csl) only useful
		with -f on nssqa
	-l <mozroot> run on a local build - does not work at this time
	-cron equivalient to -y -s -d -f $RESULTDIR/$HOST.<scriptname>

nssqa and qa_stat are Beta at the most
--------------------------
Please be aware that 

-) machinenames are still hardcoded --FIXED
-) other very iPlanet specific environments and features are being used.

-d Debug option will be removed from cron in a few weeks - or maybe not
-l QA on local build is not fully implemented yet

Please do not use on Windows 95 and 98, ME platforms yet. 

use -d if script behaves strange or exits unexpectedly

How to use QA
-------------
To test a build, first run nssqa on the required QA platforms (some 
buildplatforms require QA to be run on additional platforms - for 
example Solaris 2.6 has to be tested on 2.8 32 and 64bit) If QA has 
been run on multiple or all required platforms it makes sense to run 
qa_stat on the output of nssqa as well.
Before used on a new system (even if the same platform has been 
tested before) please use completely interactive, to see what the 
variables are being initialized to, and read the warnings. Same is 
true if being run from a different user account than svbld.

In any case, if you are using it, please let me know the results.

Pseudocode Description of nssqa:
--------------------------------
not quite up to date

	header:init (global)
		set flags and variables to default values
		signal trap (for interupts and kills)
		set HOST and DOMSUF variables if running from cron
		parse parameters and options
		determine os and set up the environment (espec. PATH)
		set the directories to run in (influenced by parameters and -l option)
		set and initialize the tmp / debugging / output files

	nssqa:init (local)
		locking: if nssqa is already running on this systems (yes-exit, 
			no-lockfile)
		set HOST and DOMSUF variables if running interavtively
		set flag to kill remaining selfserv processes during cleanup
		if QA platform different from build platform create neccessary 
			symbolic links
		wait for the build to finish (max of 5h)

	main:
		repeated per test (optimized, debug, 32, 64 bit)
			set flags for this run of all.sh (optimized, debug, 32, 64 bit)
			set the DIST directory (where the binaries reside)
			kill running selfservers (sorry - just don't use the svbld 
				account if you need to do your own testing... I will fix 
				selfserv as soon as I can - but it hangs too often and 
				disturbs all following QA)
			run all.sh 
		
	header:exit (global)
		remove temporary files
		kill remaining selfservers
		send email to the list
		
		
	errorhandling
		Option / Parameter errors: Exit with usage information

		Severe errors: Exit wit errormessage 
			example: directory in which all.sh resides does not exist
				can't create files or directories
				build not done after 5 hours
				is already running
				
		Other errors: User is prompted with the "errormessage - continue (y/n)?"
			example: local DIST dir does not exist (continues with next all.sh)
				outputdirectory does not exist (user can specify other)

		Signals 2, 3, 15 are treated as severe errors
		
	

