Edit

openbios/fcode-utils/testsuite/AutoExec

Branch :

  • Show log

    Commit

  • Author : Stefan Reinauer
    Date : 2006-10-14 20:36:03
    Hash : af385f3f
    Message : small fix for test executor git-svn-id: svn://coreboot.org/openbios/fcode-utils@93 f158a5a8-5612-0410-a976-696ce0be7e32

  • testsuite/AutoExec
  • #!  /bin/csh -f
    #
    #  Part of automation of the testing process for the Tokenizer/De-Tokenizer
    #  Automate Execution of Tokenizing and De-Tokenizing the various test-cases
    
    #  Updated Thu, 09 Feb 2006 at 13:10 PST by David L. Paktor
    
    #  Run this from the parent-directory of the various Test categories.
    #  Sym-links to the binaries should be here.
    
    #  Each Test category directory must have a TestArgs file,
    #      formatted as follows:
    #          Lines starting with  #  (Pound-sign Space) are comments,
    #              and are ignored
    #          Blank lines are also allowed, and are also ignored
    #          Valid lines have four comma-separated fields:
    #                 Test-file base-name
    #                 Result-file label
    #                 Extra command-line switches
    #                 A script-command, to be run after, for specific
    #                     verification of this Test.  Arguments can also
    #                     be included in this field, as long as they have
    #                     no commas.
    #          An unspecified intermediate field must be represented as
    #               an empty field separated by commas from the fields
    #               preceding and following.
    #          Lines that have no label, no switches, and no script
    #              do not need any commas.
    #          The -v (verbose) switch will always be used and does not need
    #              to be explicitly specified.  However, if the "script-command"
    #              field starts with +V (case-sensitive), then the -v (verbose)
    #              switch will not be used.
    #
    #          The Test-file base-name field may have multiple base-names,
    #              to run a multiple-file batch command.
    #          If a multiple-file batch is run:
    #              The Result-file label will apply only to the Log file.
    
    #  To Do:
    #          Contrive a way to run the second through last input files as
    #              separate individual jobs (with same command-line switches)
    #          This needs to be co-ordinated with the Auto-Compare script:
    #              It will need to compare the .FC files from the batch with
    #                   those from the individual runs.
    
    
    #  Initial error-checking:
    if ( ( ! -x ./toke ) || ( ! -x ./detok ) || ( ! -x ./romheaders ) ) then
        echo 'Starting in wrong directory.  Executable toke, detok and romheaders are not here.'
        exit 1
    endif
    
    set TArgFiles = `find . -name TestArgs -exec expr {} : '\./\(.*\)' \;`
    if ( $#TArgFiles == 0 ) then
        echo 'No TestArgs files found in subdirectories.'
        echo 'Starting in wrong directory?'
        exit 1
    endif
    
    set parent  = `pwd`
    set tokex  = `pwd`/toke
    set detokex  = `pwd`/detok
    set romhdrex = `pwd`/romheaders
    
    set chirren = `echo $TArgFiles | tr ' ' \\012 | sed -e 'sX/[^/]*$XXg'`
    
    #  The "verbose" flag is now a variable.
    set vflg = '-v'
    
    #  Let's show a progress-downcount and time, stamps and elapsed.
    #  Find the count; leave the max number on display:
    set cnt = `egrep '^[^#].*' $TArgFiles | wc -l`
    echo ''
    set starttime = `date +'%T'`
    echo $starttime
    echo $cnt
    
    foreach dir ( $chirren )
       cd $dir
       set lindxmax = `cat TestArgs | wc -l`
       set lindx = 0
       while ( $lindx < $lindxmax )
          @ lindx++
          set targline = `sed -n ${lindx}p TestArgs`
          if ( $#targline == 0 ) continue
          if ( "$targline[1]" == "#" ) continue
          set ttargs = `echo $targline | awk -F , '{print $1}'`
    #  One more error-check:
          set tfths = ''
          set fcfils = ''
          unset FMissing
          foreach tfth ( $ttargs )
    	  if ( ! -f ${tfth}.fth ) then
                 echo File Not found: ${dir}/${tfth}.fth
                 echo Please update ${dir}/TestArgs file, line $lindx
    	     set FMissing
    	  endif
    	  set tfths = ( $tfths ${tfth}.fth )
    	  set fcfils = ( $fcfils ${tfth}.fc )
          end
          if ( $?FMissing ) continue
    
          set ttarg = $ttargs[1]
    
          set outfile = ''
          set label = `echo $targline | awk -F , '{print $2}'`
          if ( "$label" != "" ) then
    	 set label = .$label
    	 if ( $#tfths == 1 ) then
    	    set fcfils = ${ttarg}${label}.fc
    	    set outfile = ( -o $fcfils )
    	 endif
          endif
    #  We don't set the switches as a shell-variable because we might
    #      need to preserve quoted groupings that have embedded spaces.
    
    #  Collect the script-command.
    #  Awkward place to expect a  "+V"  option, but it'll have to serve....
          set scriptcmd = `echo $targline | awk -F , '{print $4}'`
          if ( $#scriptcmd > 0 ) then
    	 if ( "$scriptcmd[1]" == "+V" ) then
                set vflg = ""
    	    if ( $#scriptcmd == 1 ) then
    	       set scriptcmd = ""
    	    else
    	       set scriptcmd = ( $scriptcmd[2-] )
    	    endif
    	 endif
          endif
    
          echo -n X${cnt}' ' | tr X \\015
          @ cnt--
    
    #  Now do it.
          set doromhdr = 0
          echo toke $vflg `sed -n ${lindx}p TestArgs | awk -F , '{print $3}'` $outfile ${tfths} >& ${ttarg}${label}.Log
          echo '' >>& ${ttarg}${label}.Log
          eval $tokex $vflg `sed -n ${lindx}p TestArgs | awk -F , '{print $3}'` $outfile ${tfths} >>& ${ttarg}${label}.Log
          set vflg = '-v'
    
          foreach fcfil ( $fcfils )
    	 if ( -f ${fcfil} ) then
    	    $detokex -v -o ${fcfil} > ${fcfil:r}.DeTok
    	    set doromhdr = `grep 'PCI Header identified' ${fcfil:r}.DeTok | wc -l`
    	    if ( $doromhdr ) then
    	       $romhdrex ${fcfil} > ${fcfil:r}.RomHdr
    	    endif
    	 endif
          end
    
    
          if ( "$scriptcmd" != "" ) then
    	 eval $scriptcmd
          endif
    
       end
       cd $parent
    end
    #  Clear the display-line
    echo -n X'   'X | tr X \\015
    #  Show time, stamps and elapsed.
    date +'%T'
    echo $starttime ' (Started)'