You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stdcxx.apache.org by se...@apache.org on 2008/05/15 17:34:27 UTC

svn commit: r656702 - in /stdcxx/branches/4.2.x/bin: buildntest duration genxviews xbuildgen xcomp.awk

Author: sebor
Date: Thu May 15 08:34:26 2008
New Revision: 656702

URL: http://svn.apache.org/viewvc?rev=656702&view=rev
Log:
2008-05-15  Martin Sebor  <se...@roguewave.com>

	* bin/duration: Copied from trunk.

	Merged revisionss 656465, 656465, 654595, 651359, 650603, 648374,
	648319, 644773, 642778, 640489, 640483, 640477, 639851, 639851,
	639764, 638417, 637303, 637301, 637295, 637279, 637274, 637269,
	637269, 636590, 611460,	and 611460 from trunk.

	2008-05-14  Martin Sebor  <se...@roguewave.com>

	* bin/genxviews (process_results): Added verbose output to make
	debugging easier.

	2008-05-14  Martin Sebor  <se...@roguewave.com>

	STDCXX-682
	* bin/genxviews (XBUILDGEN): Defined variable to (the best guess
	of) pathname of the xbuildgen utility.
	(logdir): Added a variable and the -L command line option to set
	the directory containing build logs.
	(outdir): Set to /www/stdcxx.apache.org/builds, the "official"
	default location of the cross build result pages.
	(myurl): Avoided using shell variables in definition.
	Added argument validation and more (verbose) progress output.
	* bin/xbuildgen (logdir): Determined from log pathnames passed
	in on the command line and passed to xcomp.awk.
	(process_builds): Removed unused function.
	* bin/xcomp.awk (get_gzlogfname): Used logdir.

	2008-05-08  Martin Sebor  <se...@roguewave.com>

	* bin/genxviews: Added gcc 4.3.0 on Linux and Solaris.

	2008-04-24  Martin Sebor  <se...@roguewave.com>

	* bin/genxviews: Added Windows Vista, EM64T, MSVC 9.0.

	2008-04-04  Martin Sebor  <se...@roguewave.com>

	* bin/genxviews: Added  builds with HP C++ 7.1 on Tru64 UNIX 5.1.

	2008-03-30  Martin Sebor  <se...@roguewave.com>

	* bin/genxviews (process_results): Removed stderr output
	for missing logs to reduce cron noise.

	2008-03-21  Martin Sebor  <se...@roguewave.com>

	* bin/xbuildgen: Corrected how Bash is invoked to prevent infinite
	recursion and preserve parameter quoting.
	Changed output subdirectory for .html files to builds/.
	* bin/genxviews: Same.
	Added the -V option (version) and removed -q (quiet mode).

	2008-03-21  Martin Sebor  <se...@roguewave.com>

	* bin/genxviews: Set /bin/sh as the interpreter and invoked
	Bash if the interpreter is a different shell and Bash exists.
	Added the -v (verbose) command line option and some output.
	Added the -V (version) command line option to specify the
	stdcxx version and branch to generate cross-build results for.
	(output): New function.

	2008-03-18  Martin Sebor  <se...@roguewave.com>

	* genxviews: Added MSVC 9 builds on Windows 2003 and Windows XP.

	2008-03-12  Martin Sebor  <se...@roguewave.com>

	* genxviews: Added HP aCC 6.16 and 3.80.

	2008-03-27  Scott Zhong  <sc...@roguewave.com>

	STDCXX-401
	* etc/config/makefile.rules (run): Used the POSIX TMPDIR
	environment variable instead of TMP.
	* etc/config/run_locale_utils.sh: Same.
	* bin/xbuildgen: Same.

	2008-03-24  Martin Sebor  <se...@roguewave.com>

	* bin/xbuildgen (logdir): Corrected the pathname of the directory
	containing gzipped build log files from results/builds to just
	results/.

	2008-03-21  Martin Sebor  <se...@roguewave.com>

	* bin/xbuildgen: Set /bin/sh as the interpreter and invoked
	Bash if the interpreter is a different shell and Bash exists.
	Added the -V (version) command line option to specify the
	stdcxx version and branch to generate cross-build results for.

	2008-03-14  Martin Sebor  <se...@roguewave.com>

	STDCXX-702
	* bin/xbuildgen: Moved all buildlog processing to...
	* bin/xcomp.awk: ...here, improving the detection of platform details
	as well build start times and the numbers of diagnosics (broken down
	by library and all other components).
	Removed min, max, total, and average statistics from the Logs and
	Columns table. The size of the gzipped log is not being reported
	yet.
	Only builds where the configuration or library build stage failed
	are now highlighted in red (including on Windows).


	2008-05-14  Martin Sebor  <se...@roguewave.com>

	* bin/xcomp.awk (get_gzlogfname): Temporarily hardcoded "logs/"
	as the directory prefix for logs HTML href tags, until a cleaner
	solution is devised.

	008-05-06  Martin Sebor  <se...@roguewave.com>

	STDCXX-906
	* bin/xcomp.awk (print_section): Corrected the computation
	of date ranges. Added comments. This is already on 4.2.x
	(inadvertently done in rev 653930).

	2008-04-15  Martin Sebor  <se...@roguewave.com>

	* bin/xcomp.awk: Added comments describing how platform pattern
	matching works for the expected failures feature.
	Prepended 'X' to the signal name when the signal is expected
	to match the legend at the bottom of the page.

	2008-04-15  Martin Sebor  <se...@roguewave.com>

	* bin/xcomp.awk: Enclosed runtime warnings in parentheses
	as documented in the legend at the bottom of the generated
	page.

	2008-03-24  Martin Sebor  <se...@roguewave.com>

	* bin/xcomp.awk (print_section): Consistently prepended "../" to the
	log file name since build logs are stored in the parent directory of
	the one that contains the cross-build results.

	2008-03-24  Martin Sebor  <se...@roguewave.com>

	* bin/xcomp.awk (print_section): Prepended "../" to the log file name
	since build logs are stored in the parent directory of the one that
	contains the cross-build results.

	2008-03-14  Martin Sebor  <se...@roguewave.com>

	* bin/xcomp.awk (get_gzlogfname): Replaced .txt suffix with
	the hopefully now correct .gz.txt.

	2008-03-14  Martin Sebor  <se...@roguewave.com>

	* bin/xcomp.awk (get_gzlogfname): New function to removed directory
	prefix from log file and replace the temporary PID suffix with the
	original .gz extension.
	(print_logtable, print_timingstable): Called get_gzlogfname().

	2008-03-14  Martin Sebor  <se...@roguewave.com>

	* bin/xcomp.awk (print_timingstable): Highlighted totals in bold.

	2008-03-14  Martin Sebor  <se...@roguewave.com>

	* bin/xcomp.awk: Closed pipelines to avoid exhausting OPEN_MAX limit.

	2008-03-14  Martin Sebor  <se...@roguewave.com>

	* bin/xcomp.awk: Escaped a forward slash to make FreeBSD awk happy.

	2008-04-22  Martin Sebor  <se...@roguewave.com>

	* bin/buildntest [AIX]: Added more information about the system,
	including model name, number of processors, their type and speed,
	and the type of the kernel.

Added:
    stdcxx/branches/4.2.x/bin/duration
      - copied unchanged from r656504, stdcxx/trunk/bin/duration
Modified:
    stdcxx/branches/4.2.x/bin/buildntest   (contents, props changed)
    stdcxx/branches/4.2.x/bin/genxviews   (contents, props changed)
    stdcxx/branches/4.2.x/bin/xbuildgen   (contents, props changed)
    stdcxx/branches/4.2.x/bin/xcomp.awk   (contents, props changed)

Modified: stdcxx/branches/4.2.x/bin/buildntest
URL: http://svn.apache.org/viewvc/stdcxx/branches/4.2.x/bin/buildntest?rev=656702&r1=656701&r2=656702&view=diff
==============================================================================
--- stdcxx/branches/4.2.x/bin/buildntest (original)
+++ stdcxx/branches/4.2.x/bin/buildntest Thu May 15 08:34:26 2008
@@ -353,12 +353,12 @@
 echo "### running $0 $* [$#]"
 
 # script's revision number
-myrev='$Revision: 634307 $'
+myrev='$Revision$'
 myrev=${myrev#'$Revision: '}   # strip leading text
 myrev=${myrev%' $'}            # strip trailing text
 
 # URL to this version of the script in the repository
-myurl='$HeadURL: https://svn.apache.org/repos/asf/stdcxx/trunk/bin/buildntest $'
+myurl='$HeadURL$'
 myurl=${myurl#'$HeadURL: '}   # strip leading text
 myurl=${myurl%' $'}           # strip trailing text
 myurl="$myurl?view=markup&rev=$myrev"
@@ -476,9 +476,35 @@
 AWK=awk
 case "$osname" in
     (AIX)
+    # output the machine model name
+    echo; echo "### Model name:"
+    /usr/bin/uname -M
+    
+    # output the number of processors installed on the system
+    echo; echo "### Number of processors:"
+    /usr/sbin/lscfg -lproc\* | /usr/bin/wc -l
+
+    # output the type of the processors
+    echo; echo "### Processor type:"
+    /usr/sbin/lscfg -lproc0 -p | /usr/bin/sed -n "s/ *Name: *\(.*\)/\1/p"
+
+    # output processor clock speed
+    echo; echo "### Processor clock speed:"
+    /usr/sbin/lsconf -s | /usr/bin/cut -d' ' -f4-
+
+    # output the kernel type (32-bit- uni or muli-processor, or
+    # 64-bit multiprocessor)
+    echo; echo "### /usr/sbin/lsconf -k"
+    /usr/sbin/lsconf -k
+
     # output the amount of real memory installed on the host
-    echo; echo "### /usr/sbin/lsattr -El sys0 -a realmem:"
-    /usr/sbin/lsattr -El sys0 -a realmem
+    echo; echo "### Physical memory:"
+
+    # one way of doing it:
+    # /usr/sbin/lsattr -El sys0 -a realmem | /usr/bin/cut -d' ' -f2
+
+    # or the easy way:
+    /usr/sbin/lsconf -m | /usr/bin/cut -d' ' -f3-
     ;;
 
     (HP-UX)

Propchange: stdcxx/branches/4.2.x/bin/buildntest
------------------------------------------------------------------------------
--- svn:keywords (original)
+++ svn:keywords Thu May 15 08:34:26 2008
@@ -1 +1 @@
-Id
+HeadURL Id Revision

Modified: stdcxx/branches/4.2.x/bin/genxviews
URL: http://svn.apache.org/viewvc/stdcxx/branches/4.2.x/bin/genxviews?rev=656702&r1=656701&r2=656702&view=diff
==============================================================================
--- stdcxx/branches/4.2.x/bin/genxviews (original)
+++ stdcxx/branches/4.2.x/bin/genxviews Thu May 15 08:34:26 2008
@@ -1,6 +1,10 @@
 #!/bin/sh
 #
-# $Id$
+<<<<<<< .working
+# $Id: genxviews 589896 2007-10-29 22:44:55Z sebor $
+=======
+# $Id: genxviews 601595 2007-12-06 01:33:50Z sebor $
+>>>>>>> .merge-right.r656504
 #
 ########################################################################
 #
@@ -22,13 +26,159 @@
 #
 ########################################################################
 
-CROSS=$HOME/bin/xbuildgen
+if [ "$BASH" = "" ]; then
+    # this is not Bash; try to invoke it
+    if [ -x /usr/local/bin/bash ]; then
+        /usr/local/bin/bash $0 "$@"
+        exit $?
+    fi
+fi
 
-OUTDIR=$HOME/public_html/stdcxx/results
+readonly www_stdcxx_dir="/www/stdcxx.apache.org/builds"
 
-cd $OUTDIR
+XBUILDGEN=`which xbuildgen 2>/dev/null`
 
-cat<<EOF
+if [ "$XBUILDGEN" = "" ]; then
+    XBUILDGEN=`dirname $0`/xbuildgen
+fi
+
+# default directory where to look for build logs to process
+logdir=.
+
+# show the command line to invoke xbuildgen without actually
+# invoking the script
+dryrun=0
+
+# write verbose progress output to stdout?
+verbose=0
+
+# process command line options
+while getopts "dvD:L:o:V:" opt_name; do
+    case $opt_name in
+        # options with no arguments
+
+        d)  # dry run (do not invoke xbuildgen)
+            dryrun=1
+            ;;
+
+        v) # verbose mode
+           verbose=1
+           ;;
+
+        # options with arguments
+
+        D)  # argument names the directory where to create output files
+            outdir=$OPTARG
+            ;;
+
+        L)  # argument names the directory containing build logs
+            logdir=$OPTARG
+            ;;
+
+        o)  # argument is the name of output file (stdout by default)
+            outfile=$OPTARG
+            ;;
+
+        V)  # specify stdcxx branch/version to generate cross-build
+            # result views for (trunk by default)
+            version=$OPTARG
+            ;;
+
+     esac;
+done
+
+
+# set the Subversion and output directories based on version
+if [ "$version" = "" ]; then
+
+    # Subversion (sub)directory under stdcxx/
+    svndir="trunk"
+
+    # set output directory unless already set on the command line
+    if [ "$outdir" = "" -a -w $www_stdcxx_dir ]; then
+        outdir="/www/stdcxx.apache.org/builds/$svndir"
+    fi
+else
+    # Subversion (sub)directory under stdcxx/
+    svndir="branches/$version"
+
+    # set output directory unless already set on the command line
+    if [ "$outdir" = "" -a -w $www_stdcxx_dir ]; then
+        outdir="/www/stdcxx.apache.org/builds/$version"
+    fi
+
+    verarg="-V$version"
+fi
+
+
+# extract the script's revision number
+myrev='$Revision$'
+myrev=${myrev#'$Revision: '}   # strip leading text
+myrev=${myrev%' $'}            # strip trailing text
+
+# form the URL to this version of the script in the repository
+myurl='$HeadURL: http://svn.apache.org/repos/asf/stdcxx/trunk/bin/genxviews $'
+myurl=${myurl#'$HeadURL: '}   # strip leading text
+myurl=${myurl##*asf/}         # strip svn prefix
+myurl=${myurl%' $'}           # strip trailing text
+
+# prepend ViewVC prefix
+myurl="http://svn.apache.org/viewvc/$myurl"
+
+# extract program name from the url (used in diagnostic messages)
+readonly myname=${myurl##*/}
+
+myurl="$myurl?view=markup&rev=$myrev"
+
+######################################################################
+# validate arguments
+
+if [ ! -x $XBUILDGEN ]; then
+    echo "$myname $error: cannot find xbuildgen" >&1
+    exit 2
+fi
+
+
+if [ ! -d "$logdir" -o ! -r "$logdir" ]; then
+    echo "$myname error: \"$logdir\" does not exist or isn't readable" >&2
+    exit 2
+fi
+
+
+if [ $verbose -ne 0 ]; then
+    echo "$myname: using output directory: \"$outdir\""
+    echo "$myname: reading logs from: \"$logdir\""
+fi
+
+######################################################################
+
+# write to output file when specified or to stdout otherwise
+output ()
+{
+    if [ $# -eq 0 ]; then
+        # no arguments provided, copy its own stdin to outfile
+        if [ -z $outfile ]; then
+            cat
+        else
+            cat >>$outfile
+        fi
+    elif [ -z $outfile ]; then
+        echo "$*"
+    else
+        echo "$*" >>$outfile
+    fi
+}
+
+######################################################################
+
+# start the clock measuring the amount of wall clock time to process
+# all logs and generate the page
+readonly start_time=`LC_ALL=C date`
+
+
+readonly scripturl="<a href=\"$myurl\"><code>$myname</code></a>"
+
+cat<<EOF | output
 <html>
   <body>
     <style type="text/css">
@@ -51,36 +201,41 @@
       }
     </style>
     <h1>Available Multi-platform Build Result Views</h1>
-    Generated `date`
+    Generated `date` by $scripturl on `hostname` running `uname -sr`
     <hr>
     <table>
       <thead>
         <tr>
-          <th>OS</td>
+          <th>Operating System</td>
           <th>Architecture</td>
           <th>Compiler</td>
           <th>Build Results</td>
+          <th>Logs</td>
+          <th>Time<br>(sec)</td>
         </tr>
         </thead>
         <tbody>
 EOF
 
+
 process_results ()
 {
     osname="$1"
     arch="$2"
     compiler="$3"
     alllogs="$4"
-    outfile="$5"
+    xfile="$5"
 
-    cat<<EOF
+    if [ $verbose -ne 0 ]; then
+        echo "$myname: processing logs for $compiler on $osname, $arch"
+        echo "$myname: searching for files matching \"$alllogs\""
+    fi
+
+    cat<<EOF | output
           <tr>
             <td>$osname</td>
             <td>$arch</td>
             <td>$compiler</td>
-            <td><a href="$outfile">$outfile</a></td>
-          </tr>
-
 EOF
 
     # build types:
@@ -92,162 +247,381 @@
 
     # a, A: AIX shared archive (32-bit and 64-bit, respectively)
     # d, D: shared library (.sl, .so, or .dll)
-    # s, S: archive library (.a or .lib(
+    # s, S: archive library (.a or .lib)
     suffixes="a A d D s S"
 
     unset buildlogs
+    count=0
 
     for b in $btypes; do
         for s in $suffixes; do
-            log=`echo $alllogs | tr ' ' '\n' | grep "[-]$b$s-" \
-                               | sort | tail -n 1`
-            buildlogs="$buildlogs $log"
+
+            log=`  echo $logdir/$alllogs | tr ' ' '\n' \
+                 | grep "[-]$b$s-" | sort | tail -n 1`
+
+            if [ "$log" != "" ]; then
+                buildlogs="$buildlogs $log"
+                count=`expr $count + 1`
+            fi
         done
     done
 
-    $CROSS -o$OUTDIR/$outfile $buildlogs
+    if [ $verbose -ne 0 ]; then
+        echo "$myname: found $count logs: $buildlogs"
+    fi
+
+    # create a title for the page
+    title="$compiler results on $osname/$arch"
+
+    # start the clock
+    duration=`expr \( $(date +%M) \* 60 \) + $(date +%S)`
+
+    if [ "$buildlogs" = "" ]; then
+        # format missing logs in italics
+        output "            <td><i>$xfile</i></td>"
+    else
+        if [ $verbose -ne 0 ]; then
+            echo "$myname: $XBUILDGEN $verarg -s -o$outdir/$xfile -T\"$title\" $buildlogs"
+        fi
+
+        output "            <td><a href=\"$xfile\">$xfile</a></td>"
+
+        if [ $dryrun -eq 0 ]; then
+            $XBUILDGEN $verarg -s -o$outdir/$xfile -T"$title" $buildlogs
+        fi
+    fi
+
+    # compute the number of seconds it took to process the logs
+    end=`expr \( \( $(date +%M) \* 60 \) + $(date +%S) \)`
+
+    if [ $end -lt $duration ]; then
+        # adjust for overflow
+        end=`expr $end + 60`
+    fi
+
+    duration=`expr $end - $duration`
+
+    cat<<EOF | output
+        <td>$count</td>
+        <td>$duration</td>
+    </tr>
+EOF
 }
 
+########################################################################
+# operating systems and compilers below are listed alphabetically
+# starting with the most recent version first
+
 # AIX ##################################################################
 process_results "AIX 5.3" "PowerPC" "IBM XLC++ 9.0" \
-                "aix-5.3-ppc-vacpp-*-9.0-*-*-log.gz.txt" \
+                "aix-5.3-ppc-vacpp-9.0-*-*-log.gz.txt" \
                 aix-5.3-ppc-vacpp-9.0.html
 
 process_results "AIX 5.3" "PowerPC" "IBM XLC++ 8.0" \
-                "aix-5.3-ppc-vacpp-*-8.0-*-*-log.gz.txt" \
+                "aix-5.3-ppc-vacpp-8.0-*-*-log.gz.txt" \
                 aix-5.3-ppc-vacpp-8.0.html
 
 process_results "AIX 5.3" "PowerPC" "IBM XLC++ 7.0" \
-                "aix-5.3-ppc-vacpp-*-7.0.0.0-*-*-log.gz.txt" \
+                "aix-5.3-ppc-vacpp-7.0-*-*-log.gz.txt" \
                 aix-5.3-ppc-vacpp-7.0.html
 
 process_results "AIX 5.2" "PowerPC" "IBM VisualAge C++ 6.0" \
-                "aix-5.2-ppc-visualage-*-6.0.0-*-*-log.gz.txt" \
-                aix-5.2-ppc-visualage-6.0.html
+                "aix-5.2-ppc-vacpp-6.0-*-*-log.gz.txt" \
+                aix-5.2-ppc-vacpp-6.0.html
 
 # FreeBSD ##############################################################
 process_results "FreeBSD 6.2" "x86" "gcc 3.4.4" \
-                "freebsd-6.2-x86-gcc-*-3.4.4-*-*-log.gz.txt" \
+                "freebsd-6.2-x86-gcc-3.4.4-*-*-log.gz.txt" \
                 freebsd-6.2-x86-gcc-3.4.4.html
 
 # HP-UX ################################################################
+process_results "HP-UX 11.31" "IPF" "HP aCC 6.16" \
+                "hpux-11.31-ia64-acc-6.16-*-*-log.gz.txt" \
+                hpux-11.31-ia64-6.16.html
+
+process_results "HP-UX 11.31" "IPF" "HP aCC 6.15" \
+                "hpux-11.31-ia64-acc-6.15-*-*-log.gz.txt" \
+                hpux-11.31-ia64-6.15.html
+
 process_results "HP-UX 11.31" "PA-RISC" "HP aCC 3.74" \
-                "hpux-11.31-pa-acc-*-3.74-*-*-log.gz.txt" \
+                "hpux-11.31-pa-acc-3.74-*-*-log.gz.txt" \
                 hpux-11.31-pa-acc-3.74.html
 
 process_results "HP-UX 11.31" "PA-RISC" "HP aCC 3.73" \
-                "hpux-11.31-pa-acc-*-3.73-*-*-log.gz.txt" \
+                "hpux-11.31-pa-acc-3.73-*-*-log.gz.txt" \
                 hpux-11.31-pa-acc-3.73.html
 
 process_results "HP-UX 11.23" "IPF" "HP aCC 6.13" \
-                "hpux-11.23-ia64-acc-64b-6.13-*-*-log.gz.txt" \
+                "hpux-11.23-ia64-acc-6.13-*-*-log.gz.txt" \
                 hpux-11.23-ia64-acc-6.13.html
 
 process_results "HP-UX 11.23" "IPF" "HP aCC 6.00" \
-                "hpux-11.23-ia64-acc-64b-6.00-*-*-log.gz.txt" \
+                "hpux-11.23-ia64-acc-6.00-*-*-log.gz.txt" \
                 hpux-11.23-ia64-acc-6.00.html
 
 process_results "HP-UX 11.23" "IPF" "HP aCC 5.57" \
-                "hpux-11.23-ia64-acc-64b-5.57-*-*-log.gz.txt" \
+                "hpux-11.23-ia64-acc-5.57-*-*-log.gz.txt" \
                 hpux-11.23-ia64-acc-5.57.html
 
+process_results "HP-UX 11.23" "PA-RISC" "HP aCC 3.80" \
+                "hpux-11.23-pa-acc-3.80-*-*-log.gz.txt" \
+                hpux-11.23-pa-acc-3.80.html
+
 process_results "HP-UX 11.23" "PA-RISC" "HP aCC 3.73" \
-                "hpux-11.23-pa-acc-*-3.73-*-*-log.gz.txt" \
+                "hpux-11.23-pa-acc-3.73-*-*-log.gz.txt" \
                 hpux-11.23-pa-acc-3.73.html
 
 process_results "HP-UX 11.23" "PA-RISC" "HP aCC 3.63" \
-                "hpux-11.23-pa-acc-*-3.63-*-*-log.gz.txt" \
+                "hpux-11.23-pa-acc-3.63-*-*-log.gz.txt" \
                 hpux-11.23-pa-acc-3.63.html
 
 process_results "HP-UX 11.11" "PA-RISC" "HP aCC 3.73" \
-                "hpux-11.11-pa-acc-*-3.73-*-*-log.gz.txt" \
+                "hpux-11.11-pa-acc-3.73-*-*-log.gz.txt" \
                 hpux-11.11-pa-acc-3.73.html
 
 process_results "HP-UX 11.11" "PA-RISC" "HP aCC 3.63" \
-                "hpux-11.11-pa-acc-*-3.63-*-*-log.gz.txt" \
+                "hpux-11.11-pa-acc-3.63-*-*-log.gz.txt" \
                 hpux-11.11-pa-acc-3.63.html
 
 # IRIX #################################################################
-process_results "IRIX 6.5.16" "MIPS" "SGI MIPSpro 7.41" \
-                "irix-6.5.16-mips-mipspro-*-7.41-*-*-log.gz.txt" \
-                irix-6.5.16-mips-mipspro-7.41.htm
+process_results "IRIX 6.5" "MIPS" "SGI MIPSpro 7.41" \
+                "irix-6.5-mips-mipspro-7.41-*-*-log.gz.txt" \
+                irix-6.5-mips-mipspro-7.41.html
 
 # Red Hat Linux ########################################################
-process_results "Red Hat EL 5.0" "EM64T" "gcc 4.1.1" \
-                "linux_redhat_el-5.0-em64t-gcc-*-4.1.1-*-*-log.gz.txt" \
+# Red Hat Enterprise Linux 5.0
+process_results "Red Hat Enterprise Linux 5.0" "EM64T" "EDG eccp 3.9" \
+                "linux_redhat_el-5.0-em64t-eccp-3.9-*-*-log.gz.txt" \
+                linux_redhat_el-5.0-em64t-eccp-3.9.html
+
+process_results "Red Hat Enterprise Linux 5.0" "EM64T" "gcc 4.3.0" \
+                "linux_redhat_el-5.0-em64t-gcc-4.3.0-*-*-log.gz.txt" \
+                linux_redhat_el-5.0-em64t-gcc-4.3.0.html
+
+process_results "Red Hat Enterprise Linux 5.0" "EM64T" "gcc 4.1.1" \
+                "linux_redhat_el-5.0-em64t-gcc-4.1.1-*-*-log.gz.txt" \
                 linux_redhat_el-5.0-em64t-gcc-4.1.1.html
 
-process_results "Red Hat AS 4 Update 4" "AMD64" "gcc 3.4.4" \
-                "linux_redhat_el-4.4-amd64-gcc-*-3.4.4-*-*-log.gz.txt" \
-                linux_redhat_el-4.4-amd64-gcc-3.4.4.html
+process_results "Red Hat Enterprise Linux 5.0" "EM64T" "Intel C++ 10.0" \
+                "linux_redhat_el-5.0-em64t-icc-10.0-*-*-log.gz.txt" \
+                linux_redhat_el-5.0-em64t-icc-10.0.html
+
+process_results "Red Hat Enterprise Linux 5.0" "EM64T" "Intel C++ 9.1" \
+                "linux_redhat_el-5.0-em64t-icc-9.1-*-*-log.gz.txt" \
+                linux_redhat_el-5.0-em64t-icc-9.1.html
+
+# Red Hat Enterprise Linux 4 Update 4
+process_results "Red Hat Enterprise Linux 4 Update 4" "AMD64" "gcc 4.3.0" \
+                "linux_redhat_el-4.4-amd64-gcc-4.3.0-*-*-log.gz.txt" \
+                linux_redhat_el-4.4-amd64-gcc-4.3.0.html
 
-process_results "Red Hat AS 4 Update 2" "AMD64" "gcc 3.4.6" \
-                "linux_redhat_el-4.4-amd64-gcc-*-3.4.6-*-*-log.gz.txt" \
+process_results "Red Hat Enterprise Linux 4 Update 4" "AMD64" "gcc 3.4.6" \
+                "linux_redhat_el-4.4-amd64-gcc-3.4.6-*-*-log.gz.txt" \
                 linux_redhat_el-4.4-amd64-gcc-3.4.6.html
 
-process_results "Red Hat AS 4 Update 2" "IA64" "gcc 3.4.4" \
-                "linux_redhat_el-4.2-ia64-gcc-*-3.4.4-*-*-log.gz.txt" \
+process_results "Red Hat Enterprise Linux 4 Update 4" "EM64T" "Intel C++ 10.0" \
+                "linux_redhat_el-4.4-em64t-icc-10.0-*-*-log.gz.txt" \
+                linux_redhat_el-4.4-em64t-icc-10.0.html
+
+process_results "Red Hat Enterprise Linux 4 Update 4" "EM64T" "Intel C++ 9.1" \
+                "linux_redhat_el-4.4-em64t-icc-9.1-*-*-log.gz.txt" \
+                linux_redhat_el-4.4-em64t-icc-9.1.html
+
+# Red Hat Enterprise Linux 4 Update 2
+process_results "Red Hat Enterprise Linux 4 Update 4" "AMD64" "gcc 3.4.6" \
+                "linux_redhat_el-4.4-amd64-gcc-3.4.6-*-*-log.gz.txt" \
+                linux_redhat_el-4.4-amd64-gcc-3.4.6.html
+
+process_results "Red Hat Enterprise Linux 4 Update 2" "IA64" "gcc 3.4.4" \
+                "linux_redhat_el-4.2-ia64-gcc-3.4.4-*-*-log.gz.txt" \
                 linux_redhat_el-4.2-ia64-gcc-3.4.4.html
 
-process_results "Red Hat AS 3 Update 8" "EM64T" "gcc 3.2.3" \
-                "linux_redhat_el-3.8-em64t-gcc-3.2.3-*-*-log.gz.txt \
-                 linux_redhat_el-3.8-em64t-gcc-64b-3.2.3-*-log.gz.txt" \
+process_results "Red Hat Enterprise Linux 4 Update 2" "IA64" "Intel C++ 9.1" \
+                "linux_redhat_el-4.2-ia64-icc-9.1-*-*-log.gz.txt" \
+                linux_redhat_el-4.2-ia64-icc-9.1.html
+
+# Red Hat Enterprise Linux 3 Update 8
+process_results "Red Hat Enterprise Linux 3 Update 8" "EM64T" "gcc 3.2.3" \
+                "linux_redhat_el-3.8-em64t-gcc-3.2.3-*-*-log.gz.txt" \
                 linux_redhat_el-3.8-em64t-gcc-3.2.3.html
 
 # Solaris ##############################################################
+process_results "Solaris 10" "SPARC" "EDG eccp 3.9" \
+                "solaris-10-sparc-eccp-3.9-*-*-log.gz.txt" \
+                solaris-10-sparc-eccp-3.9.html
+
+process_results "Solaris 10" "SPARC" "gcc 4.3.0" \
+                "solaris-10-sparc-gcc-4.3.0-*-*-log.gz.txt" \
+                solaris-10-sparc-gcc-4.3.0.html
+
 process_results "Solaris 10" "SPARC" "gcc 4.1.1" \
-                "solaris-10-sparc-gcc-*-4.1.1-*-*-log.gz.txt" \
+                "solaris-10-sparc-gcc-4.1.1-*-*-log.gz.txt" \
                 solaris-10-sparc-gcc-4.1.1.html
 
 process_results "Solaris 10" "SPARC" "Sun C++ 5.9" \
-                "solaris-10-sparc-sunpro-*-5.9-*-*-log.gz.txt" \
+                "solaris-10-sparc-sunpro-5.9-*-*-log.gz.txt" \
                 solaris-10-sparc-sunpro-5.9.html
 
 process_results "Solaris 10" "SPARC" "Sun C++ 5.8" \
-                "solaris-10-sparc-sunpro-*-5.8-*-*-log.gz.txt" \
+                "solaris-10-sparc-sunpro-5.8-*-*-log.gz.txt" \
                 solaris-10-sparc-sunpro-5.8.html
 
 process_results "Solaris 10" "SPARC" "Sun C++ 5.7" \
-                "solaris-10-sparc-sunpro-*-5.7-*-*-log.gz.txt" \
+                "solaris-10-sparc-sunpro-5.7-*-*-log.gz.txt" \
                 solaris-10-sparc-sunpro-5.7.html
 
-process_results "Solaris 9" "SPARC" "Sun C++ 5.6" \
-                "solaris-9-sparc-sunpro-*-5.6-*-*-log.gz.txt" \
-                solaris-9-sparc-sunpro-5.6.html
+process_results "Solaris 9" "SPARC" "EDG eccp 3.9" \
+                "solaris-9-sparc-eccp-3.9-*-*-log.gz.txt" \
+                solaris-9-sparc-eccp-3.9.html
 
-# process_results "Solaris 9" "SPARC" "Sun C++ 5.5" \
-#                 "solaris-9-sparc-sunpro-*-5.5-*-*-log.gz.txt" \
-#                 solaris-9-sparc-sunpro-5.5.html
+process_results "Solaris 9" "SPARC" "Sun C++ 5.9" \
+                "solaris-9-sparc-sunpro-5.9-*-*-log.gz.txt" \
+                solaris-9-sparc-sunpro-5.9.html
 
-process_results "Solaris 9" "SPARC" "EDG eccp 3.9" \
-                "solaris-9-sparc-eccp-*-3.9-*-*-log.gz.txt" \
-                solaris-9-sparc-eccp--3.9.html
+process_results "Solaris 9" "SPARC" "Sun C++ 5.6" \
+                "solaris-9-sparc-sunpro-5.6-*-*-log.gz.txt" \
+                solaris-9-sparc-sunpro-5.6.html
 
-# process_results "Solaris 8" "SPARC" "Sun C++ 5.5" \
-#                 "solaris-8-sparc-sunpro-*-5.5-*-*-log.gz.txt" \
-#                 solaris-8-sparc-sunpro-5.5.html
+process_results "Solaris 8" "SPARC" "Sun C++ 5.8" \
+                "solaris-8-sparc-sunpro-5.8-*-*-log.gz.txt" \
+                solaris-8-sparc-sunpro-5.8.html
 
 process_results "Solaris 8" "SPARC" "Sun C++ 5.3" \
-                "solaris-8-sparc-sunpro-*-5.3-*-*-log.gz.txt" \
+                "solaris-8-sparc-sunpro-5.3-*-*-log.gz.txt" \
                 solaris-8-sparc-sunpro-5.3.html
 
+process_results "Solaris 10" "AMD64" "Sun C++ 5.9" \
+                "solaris-10-amd64-sunpro-5.9-*-*-log.gz.txt" \
+                solaris-10-amd64-sunpro-5.9.html
+
+process_results "Solaris 10" "AMD64" "Sun C++ 5.8" \
+                "solaris-10-amd64-sunpro-5.8-*-*-log.gz.txt" \
+                solaris-10-amd64-sunpro-5.8.html
+
 # SuSE Linux ###########################################################
-process_results "SuSE ES 10.0" "x86" "gcc 4.1.0" \
-                "linux_suse-10.0-em64t-gcc-*-4.1.0-*-*-log.gz.txt" \
+# SuSE Enterprise Server 10
+process_results "SuSE Enterprise Server 10.0" "EM64T" "EDG eccp 3.9" \
+                "linux_suse-10.0-em64t-eccp-3.9-*-*-log.gz.txt" \
+                linux_suse-10.0-em64t-eccp-3.9.html
+
+process_results "SuSE Enterprise Server 10.0" "EM64T" "gcc 4.3.0" \
+                "linux_suse-10.0-em64t-gcc-4.3.0-*-*-log.gz.txt" \
+                linux_suse-10.0-em64t-gcc-4.3.0.html
+
+process_results "SuSE Enterprise Server 10.0" "EM64T" "gcc 4.1.0" \
+                "linux_suse-10.0-em64t-gcc-4.1.0-*-*-log.gz.txt" \
                 linux_suse-10.0-em64t-gcc-4.1.0.html
 
-process_results "SuSE ES 9.1" "AMD64" "gcc 3.3.3" \
-                "linux_suse-9.1-amd64-gcc-3.3.3-43.28-*-*-log.gz.txt \
-                 linux_suse-9.1-amd64-gcc-64b-3.3.3-*-*-log.gz.txt" \
+process_results "SuSE Enterprise Server 10.0" "EM64T" "Intel C++ 10.0" \
+                "linux_suse-10.0-em64t-icc-10.0-*-*-log.gz.txt" \
+                linux_suse-10.0-em64t-icc-10.0.html
+
+process_results "SuSE Enterprise Server 10.0" "EM64T" "Intel C++ 9.1" \
+                "linux_suse-10.0-em64t-icc-9.1-*-*-log.gz.txt" \
+                linux_suse-10.0-em64t-icc-9.1.html
+
+# SuSE Enterprise Server 9.1
+process_results "SuSE Enterprise Server 9.1" "AMD64" "gcc 3.3.3" \
+                "linux_suse-9.1-amd64-gcc-3.3.3-*-*-log.gz.txt" \
                 linux_suse-9.1-amd64-gcc-3.3.3.html
 
+process_results "SuSE Enterprise Server 9.1" "AMD64" "Intel C++ 10.0" \
+                "linux_suse-9.1-amd64-icc-10.0-*-*-log.gz.txt" \
+                linux_suse-9.1-amd64-icc-10.0.html
+
+process_results "SuSE Enterprise Server 9.1" "AMD64" "Intel C++ 9.1" \
+                "linux_suse-9.1-amd64-icc-9.1-*-*-log.gz.txt" \
+                linux_suse-9.1-amd64-icc-9.1.html
+
+process_results "SuSE Enterprise Server 9.1" "AMD64" "EDG eccp 3.9" \
+                "linux_suse-9.1-amd64-eccp-3.9-*-*-log.gz.txt" \
+                linux_suse-9.1-amd64-eccp-3.9.html
+
+process_results "SuSE Enterprise Server 9.1" "AMD64" "Sun C++ 5.9" \
+                "linux_suse-9.1-amd64-sunpro-5.9-*-*-log.gz.txt" \
+                linux_suse-9.1-amd64-sunpro-5.9.html
+
+# Tru64 UNIX ###########################################################
+
+process_results "Tru64 UNIX 5.1" "Alpha" "HP C++ 7.1" \
+                "tru64-5.1-alpha-compaq-7.1-*-*-log.gz.txt" \
+                tru64-5.1-alpha-compaq-7.1.html
+
 # CygWin ###############################################################
 process_results "CygWin/Windows XP" "x86" "gcc 3.4.4" \
-                "win_xp-2-x86-gcc-*-3.4.4-*-*-log.gz.txt" \
+                "win_xp-2-x86-gcc-3.4.4-*-*-log.gz.txt" \
                  win_xp-2-x86-gcc-3.4.4.html
 
-cat<<EOF
+# Windows ##############################################################
+process_results "Windows Vista" "EM64T" "MSVC 9.0" \
+                "win_vista-0-em64t-msvc-9.0-*-*-log.gz.txt" \
+                 win_vista_0-em64t-msvc-9.0.html
+
+process_results "Windows Vista" "EM64T" "MSVC 8.0" \
+                "win_vista-0-em64t-msvc-8.0-*-*-log.gz.txt" \
+                 win_vista_0-em64t-msvc-8.0.html
+
+process_results "Windows Vista" "EM64T" "Intel C++ 10.0" \
+                "win_vista-0-em64t-icl-10.0-*-*-log.gz.txt" \
+                 win_vista_0-em64t-icl-10.0.html
+
+process_results "Windows XP, SP2" "x86" "MSVC 8.0" \
+                "win_xp-2-x86-msvc-8.0-*-*-log.gz.txt" \
+                 win_xp_2-x86-msvc-8.0.html
+
+process_results "Windows XP, SP2" "x86" "MSVC 7.1" \
+                "win_xp-2-x86-msvc-7.1-*-*-log.gz.txt" \
+                 win_xp_2-x86-msvc-7.1.html
+
+process_results "Windows XP, SP2" "x86" "Intel C++ 10.0" \
+                "win_xp-2-x86-icl-10.0-*-*-log.gz.txt" \
+                 win_xp_2-x86-icl-10.0.html
+
+process_results "Windows XP, SP2" "x86" "Intel C++ 9.1" \
+                "win_xp-2-x86-icl-9.1-*-*-log.gz.txt" \
+                 win_xp_2-x86-icl-9.1.html
+
+process_results "Windows XP, SP1" "EM64T" "MSVC 9.0" \
+                "win_xp-1-em64t-msvc-9.0-*-*-log.gz.txt" \
+                 win_xp_1-em64t-msvc-9.0.html
+
+process_results "Windows XP, SP1" "EM64T" "MSVC 8.0" \
+                "win_xp-1-em64t-msvc-8.0-*-*-log.gz.txt" \
+                 win_xp_1-em64t-msvc-8.0.html
+
+process_results "Windows XP, SP1" "EM64T" "Intel C++ 10.0" \
+                "win_xp-1-em64t-icl-10.0-*-*-log.gz.txt" \
+                 win_xp_1-em64t-icl-10.0.html
+
+process_results "Windows 2003, SP1" "EM64T" "MSVC 9.0" \
+                "win_2003-1-em64t-msvc-9.0-*-*-log.gz.txt" \
+                 win_2003_1-em64t-msvc-9.0.html
+
+process_results "Windows 2003, SP1" "EM64T" "MSVC 8.0" \
+                "win_2003-1-em64t-msvc-8.0-*-*-log.gz.txt" \
+                 win_2003_1-em64t-msvc-8.0.html
+
+process_results "Windows 2003, SP1" "EM64T" "Intel C++ 10.0" \
+                "win_2003-1-em64t-icl-10.0-*-*-log.gz.txt" \
+                 win_2003_1-em64t-icl-10.0.html
+
+process_results "Windows 2000, SP4" "x86" "MSVC 7.1" \
+                "win_2000-4-x86-msvc-7.1-*-*-log.gz.txt" \
+                 win_2000_4-x86-msvc-7.1.html
+
+process_results "Windows 2000, SP4" "x86" "Intel C++ 9.1" \
+                "win_2000-4-x86-icl-9.1-*-*-log.gz.txt" \
+                 win_2000_4-x86-icl-9.1.html
+
+
+# compute the number of seconds it took to process all logs
+readonly now=`date`
+processing_time=`$HOME/stdcxx/bin/duration "$start_time" "$now"`
+
+cat<<EOF | output
     </table>
+    <hr>
+    <i>Generated in $processing_time.</i>
   </body>
 </html>
 EOF

Propchange: stdcxx/branches/4.2.x/bin/genxviews
------------------------------------------------------------------------------
--- svn:keywords (original)
+++ svn:keywords Thu May 15 08:34:26 2008
@@ -1 +1 @@
-Id
+Revision

Modified: stdcxx/branches/4.2.x/bin/xbuildgen
URL: http://svn.apache.org/viewvc/stdcxx/branches/4.2.x/bin/xbuildgen?rev=656702&r1=656701&r2=656702&view=diff
==============================================================================
--- stdcxx/branches/4.2.x/bin/xbuildgen (original)
+++ stdcxx/branches/4.2.x/bin/xbuildgen Thu May 15 08:34:26 2008
@@ -1,6 +1,10 @@
 #!/bin/sh
 #
-# $Id$
+<<<<<<< .working
+# $Id: xbuildgen 589895 2007-10-29 22:37:40Z sebor $
+=======
+# $Id: xbuildgen 601917 2007-12-06 23:46:48Z sebor $
+>>>>>>> .merge-right.r656504
 #
 ########################################################################
 #
@@ -20,7 +24,7 @@
 #  implied.   See  the License  for  the  specific language  governing
 #  permissions and limitations under the License.
 #
-#  Copyright 2007 Rogue Wave Software.
+#  Copyright 2007 - 2008 Rogue Wave Software, Inc.
 #
 ########################################################################
 #
@@ -49,6 +53,8 @@
 #          Generate a report for the specified list of example programs
 #          with examples listed in columns and builds in rows.
 #
+#     -h   Print help.
+#
 #     -l <list-of-locales>
 #          Generate a report for the specified list of locales with
 #          locales listed in columns and builds in rows.
@@ -57,12 +63,49 @@
 #          Specify the pathname of the output file. The utility will
 #          use stdout when no output file is specified.
 #
+#     -T <text>
+#          Specify the title for the page.
+#
 #     -t <list-of-tests>
 #          Generate a report for the specified list of tests with
 #          tests listed in columns and builds in rows.
 #
+#     -V <version>
+#          Stdcxx version (branch) to generate results for.
+#          When omitted, trunk is assumed.
+#
 ########################################################################
 
+if [ "$BASH" = "" ]; then
+    # this is not Bash; try to invoke it
+    if [ -x /usr/local/bin/bash ]; then
+        /usr/local/bin/bash $0 "$@"
+        exit $?
+    fi
+fi
+
+######################################################################
+# global constants
+
+# set program name (used in diagnostic messages)
+readonly myname=`basename $0`
+
+readonly today=`LC_ALL="C" date`
+
+# URL to the ViewVC directory
+readonly viewvc="http://svn.apache.org/viewvc"
+
+# URL to the revision number (use: "$revurl=$revno")
+readonly revurl="$viewvc?view=rev&rev"
+
+# URL to the trunk of the source repository
+readonly svnpath="$viewvc/stdcxx/trunk"
+
+# expected failures
+readonly xfailfile=$HOME/stdcxx/etc/config/xfail.txt
+
+######################################################################
+# global variables
 
 # by default, display one component (example, locale, or test) per row
 components_in_rows=1
@@ -70,11 +113,446 @@
 # no verbosity by default
 verbose=0
 
-## process command line options
-while getopts ":nsv:e:l:o:t:" opt_name; do
+# default page title (unless overridden on the command line)
+title="Multi-platform Test Result View"
+
+# script's revision number
+myrev='$Revision$'
+myrev=${myrev#'$Revision: '}
+myrev=${myrev%' $'}
+
+# URL to this version of the script in the repository
+readonly myurl="$svnpath/bin/xbuildgen?view=markup&rev=$myrev"
+
+
+######################################################################
+
+print_help ()
+{
+    echo "NAME"
+    echo "    $myname - generate a cross-build result page"
+    echo
+    echo "SYNOPSIS"
+    echo "    $myname [option(s)...] [log-file(s)...]"
+    echo
+    echo "DESCRIPTION"
+    echo "    The $myname utility generates a build result in HTML format"
+    echo "    across multiple platforms or tests with builds in columns and"
+    echo "    components such as examples, locales, and tests in rows by"
+    echo "    default."
+    echo
+    echo "OPTIONS"
+    echo "     -n   No clean. Avoid removing temporary files."
+    echo
+    echo "     -s   Stylesheet. Create a style sheet named resultstyle.css in"
+    echo "          the same directory as the output file when the -o option"
+    echo "          is specified, or in the current working directory otherwise."
+    echo
+    echo "     -v   Verbose. Produce verbose output on stdout."
+    echo
+    echo "     -e <list-of-examples>"
+    echo "          Generate a report for the specified list of example programs"
+    echo "          with examples listed in columns and builds in rows."
+    echo
+    echo "     -h   Print help."
+    echo
+    echo "     -l <list-of-locales>"
+    echo "          Generate a report for the specified list of locales with"
+    echo "          locales listed in columns and builds in rows."
+    echo
+    echo "     -o <output-file>"
+    echo "          Specify the pathname of the output file. The utility will"
+    echo "          use stdout when no output file is specified."
+    echo
+    echo "     -T <text>"
+    echo "          Specify the title for the page."
+    echo
+    echo "     -t <list-of-tests>"
+    echo "          Generate a report for the specified list of tests with"
+    echo "          tests listed in columns and builds in rows."
+}
+
+######################################################################
+
+# extracts the real, user and system times for a specified stage
+# of the build process from the file given by the second argument
+# and writes them out to stdout
+get_times ()
+{
+    stage=$1
+    file=$2
+
+    pattern="^### real, user, system time ($stage):"
+
+    # extract the real, user and system times for the children
+    # of the shell that executed the commands from the log
+    # the format of the output is:
+    #   <real-time>
+    #   <times-output>
+    # with <real-time> looking like:
+    #   [1-9][0-9]*m[1-9][0-9]s
+    # and with <times-output> being the output of the POSIX standard
+    # times built-in utility, i.e., the first line giving the system
+    # and user times for the shell and the second line giving the
+    # system and user times for its children in the format:
+    #   "%dm%fs %dm%fs"
+    # we don't care about the shell times, just the times for its
+    # children, so we skip that line
+
+
+    stage_times=`  sed -n "/$pattern/{n;p;n;n;p;}" $file`
+
+    # strip newlines and fractional parts of seconds and replace
+    # 'm' with ':'
+    
+    stage_times=`  echo $stage_times \
+                 | sed -e "s/\.[0-9][0-9]*s//g" \
+                       -e "s/s//" \
+                       -e "s/m/:/g"`
+
+    # extract the real time (first)
+    real_time=${stage_times%% *}
+
+    # append a leading '0' to single-digit seconds
+    sec=${real_time##*:}
+    if [ ${#sec} -eq 1 ]; then
+        real_time=${real_time%:*}":0$sec"
+    fi
+
+    # extract the user time (middle)
+    user_time=${stage_times#* }
+    user_time=${user_time%% *}
+
+    # append a leading '0' to single-digit seconds
+    sec=${user_time##*:}
+    if [ ${#sec} -eq 1 ]; then
+        user_time=${user_time%:*}":0$sec"
+    fi
+
+    # extract the system time (last)
+    sys_time=${stage_times##* }
+
+    # append a leading '0' to single-digit seconds
+    sec=${sys_time##*:}
+    if [ ${#sec} -eq 1 ]; then
+        sys_time=${sys_time%:*}":0$sec"
+    fi
+
+    # output the three times
+    cat <<EOF
+    <td>$real_time</td>
+    <td>$user_time</td>
+    <td>$sys_time</td>
+EOF
+}
+
+######################################################################
+# extracts the date and time the build started from the file
+# given by the second argument
+get_build_date ()
+{
+    file=$1
+
+    # extract the date and time the build started
+    # the date is expected to be introduced by a line like this:
+    #   ### date:
+    date=`sed -n "/^##* *date *: *$/{n;p;q;}" $file`
+    if [ "$date" = "" ]; then
+        echo "$myname: warning: unable to extract date from $l" >&2
+        unset date
+    fi
+
+    # strip the year from the date
+    echo ${date% [1-9][0-9][0-9][0-9]}
+}
+
+
+######################################################################
+# formats a size value in an easy-to-read way
+format_size ()
+{
+    size=$1
+
+    if [ "$size" = "" ]; then
+        :
+    elif [ $size -ge 1000000000 ]; then
+        # over billion bytes, get size in gigabytes up to 2 decimal places
+        gbsize="$((size / 1073741824)).$(((size % 1073741) / 100000))"
+        size="<div title=\"$size bytes\">$gbsize GB</div>"
+    elif [ $size -ge 1000000 ]; then
+        # over million bytes, get size in megabytes up to 2 decimal places
+        mbsize="$((size / 1048576)).$(((size % 1048576) / 100000))"
+        size="<div title=\"$size bytes\">$mbsize MB</div>"
+    elif [ $size -ge 10000 ]; then
+        # over ten thoudand bytes, get even size in kilobytes
+        kbsize="$((size / 1024))"
+        size="<div title=\"$size bytes\">$kbsize kB</div>"
+    elif [ $size -ge 1000 ]; then
+        # over thoudand bytes, get size in kilobytes up to 2 decimal places
+        kbsize="$((size / 1024)).$(((size % 1024) / 100))"
+        size="<div title=\"$size bytes\">$kbsize kB</div>"
+    fi
+
+    echo $size
+}
+
+
+######################################################################
+# extracts the size of the library binary from the build log
+# being careful to avoid the symlink (in the case of a .so)
+get_lib_size ()
+{
+    file=$1
+
+    libsize=`awk '/build\/lib\/libstd[^ ]*\$/{ print $5 }' $file`
+    if [ "$libsize" = "" ]; then
+        # avoid warning for missing library size to reduce the noise
+        # in cases when it fails to build
+        # echo "$myname: warning: unable to extract library size from $l" >&2
+        unset libsize
+    fi
+
+    echo $libsize
+}
+
+
+######################################################################
+# extracts the build type from the string specified by the argument
+# (the name of the log)
+get_buildtype ()
+{
+    str=$1
+
+    # extract the build type from the name of the log, removing
+    # the name of thread library
+    buildtype=`  echo $str \
+               | sed "s/\(.*-[18][125]*[aAdDsS]\)-dce-\(.*\)/\1-\2/" \
+               | sed "s/\(.*-[18][125]*[aAdDsS]\)-solaris-\(.*\)/\1-\2/" \
+               | sed "s/\(.*-[18][125]*[aAdDsS]\)-win32-\(.*\)/\1-\2/" \
+               | sed "s/.*-\([18][125]*[aAdDsS]\)-[1-9][0-9]*-log.*/\1/"`
+    if [ "$buildtype" = "" ]; then
+        echo "$myname: warning: unable to extract build type from $str" >&2
+        unset buildtype
+    fi
+
+    echo $buildtype
+}
+
+######################################################################
+# extracts the operating system name and version from the log file
+get_os ()
+{
+    file=$1
+
+    uname=`sed -n "/^##* uname  *-a.*:$/{n;p;q;}" $file`
+
+    case "$uname" in
+        "AIX "*)
+            osname="AIX"
+            # extract the version number from AIX uname -a output:
+            #   "AIX <hostname> <minor> <major> ...
+            osver=${uname#* }   # remove AIX
+            osver=${osver#* }   # remove hostname
+            minor=${osver%% *}  # extract minor version
+            osver=${osver% *}   # remove gibberish at the end
+            osver=${osver#* }"."$minor
+            ;;
+
+        CYGWIN*)
+            osname="Cygwin"
+            osver=${uname#* }   # remove CYGWIN
+            osver=${osver#* }   # remove hostname
+            osver=${osver%%(*}  # extract version
+            ;;
+
+        *"FreeBSD "*)
+            osname="FreeBSD"
+            ;;
+
+        "HP-UX "*)
+            # for example
+            # HP-UX hostname B.11.23 U ia64 0025699549 unlimited-user license
+            osname="HP-UX"
+            osver=${uname#* }       # remove HP-UX
+            osver=${osver#* }       # remove hostname
+            osver=${osver%% *}      # extract full version
+            osver=${osver#[A-Z].}   # remove letter prefix
+            ;;
+
+        "IRIX64 "*)
+            ;;
+
+        "Linux "*)
+            # extract the Linux distron name from the contents
+            # of the /etc/*-release files
+            osname=`  sed -n "/^##* * cat  *\/etc\/.*-release /{n;p;n;p;}"   \
+                             $file                                           \
+                    | sed -e "/^ *LSB_VERSION *=/d" -e "/^ *VERSION *= */d"`
+
+            rhel="Red Hat Enterprise Linux"
+
+            # SuSE Linux 10
+            suse_Linux="SUSE Linux Enterprise Server"
+
+            # SuSE Linux 9 (sigh...)
+            suse_LINUX="SUSE LINUX Enterprise Server"
+
+            pfx="<div title=\"$osname\">"
+            sfx="</div>"
+
+            case "$osname" in
+                "$rhel "*)
+                    # remove the Red Hat code name including the release
+                    # and keep the distribution code name and update info:
+                    #   RHEL 5:      Tikanga (Update 1 through 2)
+                    #   RHEL 4:      Nahant (Update 1 through 6)
+                    #   RHEL 3:      Taroon (Update 1 through 9)
+                    #   RHEL 2.1 AS: Pensacola
+                    #   RHEL 2.1 ES: Panama
+                    oscode=${osname##* (}
+                    # append space (important below)
+                    oscode="${oscode%)} "
+
+                    update=${oscode#* }       # strip code name
+                    update=${update#* }       # strip the word "Update"
+
+                    osver=${osname#$rhel }    # strip the distro name
+                    ostype=${osver%% *}       # extract OS type (AS or Server)
+                    osver=${osver#* release } # strip OS type
+                    osver=${osver%% (*}
+                    
+                    # osver="[osver=$osver][oscode=$oscode][update=$update]"
+
+                    osname="RHEL"
+                    if [ "$update" != "" ]; then
+                        osver="$osver.$update"
+                    fi
+                    ;;
+
+                "$suse_Linux "*)
+                    osver=${osname#$suse_Linux }
+                    osver=${osver%% *}
+
+                    osname="SLES"
+                    ;;
+
+                "$suse_LINUX "*)
+                    osver=${osname#$suse_LINUX }
+                    osver=${osver%% *}
+
+                    osname="SLES"
+                    ;;
+                *)
+                    ;;
+            esac
+            ;;
+
+        "SunOS "*)
+            osname="SunOS"
+            osver=${uname#* }    # remove SunOS
+            osver=${osver#* }    # remove hostname
+            osver=${osver%% *}   # strip averything past version
+            ;;
+       
+        *)
+            osname=$uname
+            ;;
+    esac
+
+    echo "$pfx$osname $osver$sfx"
+}
+
+######################################################################
+# extracts the hardware architecture from the log file
+get_arch ()
+{
+    file=$1
+
+    uname=`sed -n "/^##* uname  *-a.*:$/{n;p;}" $file`
+
+    if [ "$uname" = "" -o "${uname%%_*}" = "CYGWIN" ]; then
+        # Windows or CygWin
+        id=`sed -n "s/^ *PROCESSOR_IDENTIFIER *= *\(.*\)/\1/p" $file`
+        arch=${id%% *}
+        arch="<div title=\"$id\">$arch</div>"
+    else
+        
+        case "$uname" in
+            # recent HP-UX machines always return 9000/800
+            "HP-UX "*" 9000/8"??" "*) arch="PA-RISC";;
+
+            *" i686 "*) arch="i686";;
+            *" i586 "*) arch="i586";;
+            *" i486 "*) arch="i486";;
+            *" i386 "*) arch="i386";;
+            *" i286 "*) arch="i286";;
+
+            *" ia64 "*) arch="IA64";;
+
+            *" sparc "*) arch="SPARC";;
+
+            *" x86_64 "*)
+                arch="x86_64"
+                model=`  sed -n "s/^model name.*: *\(.*\)/\1/p" $file \
+                       | sed 's/  */ /g' | head -n 1`
+                if [ ${model%% *} = "Intel(R)" ]; then
+                    arch="<div title=\"$model\">EM64T</div>"
+                else
+                    arch="<div title=\"$model\">AMD64</div>"
+                fi
+                ;;
+        esac
+    fi
+
+    echo $arch
+}
+
+######################################################################
+# extracts the compiler and version from the log file
+get_compiler ()
+{
+    file=$1
+
+    compiler=`  sed -n "/^configuring stdcxx /{p;q;}" $file \
+              | sed "s/.* for \([^ ][^ ]*\) .*/\1/"`
+
+    if [    "${compiler%%[-_]*}" = "xlCcore" ]; then
+        # replace xlCcore with XLC++ for IBM XLC/C++
+        compiler="XLC++ "${compiler#*-}
+    elif [ "${compiler%%-*}" = "aCC" ]; then
+        # remove the "A.0" version prefix from HP aCC version
+        compiler="aCC ${compiler#aCC-[A-Z].0}"
+    elif [ "$compiler" = "" ]; then
+        # this must be a Windoze compiler...
+        compiler=`  sed -n "/^ *CXX *=.*/{p;q;}" $file \
+                  | sed "s/^.*= *\(.*\)/\1/"`
+
+        if [ "$compiler" = "cl" ]; then
+            vs="Microsoft Visual Studio"
+
+            compiler=`  sed -n "/^ *Variables *: *$/{n;p;}" $file\
+                      | sed "s/ *VERSION= *\(.*\)/\1/"`
+            compiler="MSVC $compiler"
+        elif [ "$compiler" = "icl" ]; then
+            true
+        fi
+    fi
+
+    echo $compiler | sed "s/-/ /g"
+}
+
+######################################################################
+
+# process command line options
+while getopts ":hnsv:e:l:o:T:t:V:" opt_name; do
     case $opt_name in
         # options with no arguments 
 
+        h)  # print help and exit
+            print_help
+            exit
+            ;;
+
         n)  # avoid cleaning up temporary files
             no_clean=1
             ;;
@@ -103,12 +581,23 @@
             outfile=$OPTARG
             ;;
 
+        T)  # argument is the title of the page
+            title=$OPTARG
+            ;;
+
         t)  # argument is a list of tests to process
             test_list=$OPTARG
             components_in_rows=0
             ;;
 
-        *) echo "unknown option : -$opt_name" >&2;
+        V)  # specify stdcxx branch/version to generate cross-build
+            # result views for (trunk by default)
+            version=$OPTARG
+            ;;
+
+        *) echo "$myname: unknown option : -$opt_name" >&2;
+           echo
+           print_help
            exit 1;;
      esac;
 done
@@ -116,13 +605,14 @@
 # remove command line options and their arguments from the command line
 shift $(($OPTIND - 1))
 
+
 # take the remaining command line arguments as the names of logs
 # to process
 gzlogs=$*
 
 
-# set the TMP variable to /tmp if not set
-[ -z $TMP ] && TMP=/tmp
+# set the TMPDIR variable to /tmp if not set
+[ -z $TMPDIR ] && TMPDIR=/tmp
 
 ######################################################################
 
@@ -164,167 +654,195 @@
     cat <<EOF >$dir/resultstyle.css
 
 table {
-    border-width:0px;
-    background:#000000;
-    font-size:smaller;
+    background:lightslategray;
+    font-family:courier;
+    font-size: 80%;
+}
+caption {
+    background:lightslategray;
+    color:lightgray;
+    font-weight:bold;
+    font-family:lucida mono;
+    font-size: 120%;
 }
 th {
-    font-family:fixed
-    font-size:smaller;
-    background:#cccccc;
+    background:lightgray;
     text-align:center;
+    font-family:lucida mono;
 }
 td {
-    font-family:fixed;
-    font-size:smaller;
-    padding: 3px;
+    padding: 2px;
     text-align: center;
-    background-color: lightblue;
+}
+tr {
+    background:powderblue;
 }
 td.rowno {
-    font-family:fixed;
-    font-size:smaller;
-    padding: 3px;
     text-align: right;
-    background-color:#cccccc;
+    background:lightgray;
 }
 td.name {
-    font-family:fixed;
-    font-size:smaller;
-    padding: 3px;
     text-align: left;
-    background-color:lightblue;
+    background:lightblue;
 }
 td.number {
-    font-family:fixed;
-    font-size:smaller;
-    padding: 3px;
     text-align: center;
-    background-color:lightblue;
+    background:lightblue;
 }
 td.na {
     background:white;
     text-align:left;
-    font-family:fixed
-    font-size:smaller;
 }
-td.header {
+.header {
     background:#cccccc;
     text-align:center;
-    font-family:fixed;
-    font-size:smaller;
+    font-weight:bold;
+    font-family:lucida mono;
+}
+td.total {
+    text-align:center;
     font-weight:bold;
 }
 td.OK {
     background:forestgreen;
     text-align:center;
-    font-family:fixed;
-    font-size:smaller;
+    font-weight:bold;
+}
+td.XPASS {
+    color:yellow;
+    background:forestgreen;
+    text-align:center;
     font-weight:bold;
 }
 td.BASE {
     background:lightgreen;
     text-align:center;
-    font-size:smaller;
     font-weight:bold;
-    font-family:fixed;
 }
 td.NOUT {
     background:lightgreen;
     text-align:center;
-    font-size:smaller;
     font-weight:bold;
-    font-family:fixed;
 }
 td.OUTPUT {
     background:lightgreen;
     text-align:center;
-    font-size:smaller;
     font-weight:bold;
-    font-family:fixed;
 }
-td.missing {
+td.MISS {
     color:white;
     background:lightgray;
     text-align:center;
-    font-size:smaller;
-    font-family:fixed;
     font-weight:bold;
 }
 td.WARN {
     color:red;
     background:#ffff99;
     text-align:center;
-    font-family:fixed
+    font-weight:bold;
+}
+td.XWARN {
+    color:tomato;
+    background:lightgreen;
+    text-align:center;
+    font-weight:bold;
 }
 td.EXIT {
     color:red;
     background:gold;
     text-align:center;
     font-weight:bold;
-    font-family:fixed;
-    font-size:smaller;
+}
+td.XEXIT {
+    color:tomato;
+    background:lightgreen;
+    text-align:center;
+    font-weight:bold;
 }
 td.FORMAT {
     background:#ffffcc;
     text-align:center;
-    font-family:fixed
-    font-size:smaller;
 }
 td.RUNWARN {
     color:black;
     background:#ffff99;
     text-align:center;
     font-weight:bold;
-    font-family:fixed;
-    font-size:smaller;
+}
+td.XRUNWARN {
+    color:dimgray;
+    background:lightgreen;
+    text-align:center;
+    font-weight:bold;
 }
 td.DIFF {
     color:red;
     background:#ffff99;
     font-weight:bold;
     text-align:center;
-    font-family:fixed;
-    font-size:smaller;
+}
+td.XDIFF {
+    color:tomato;
+    background:lightgreen;
+    font-weight:bold;
+    text-align:center;
 }
 td.ASSERT {
     color:red;
     background:#ffff99;
     font-weight:bold;
     text-align:center;
-    font-family:fixed;
-    font-size:smaller;
+}
+td.XASSERT {
+    color:tomato;
+    background:lightgreen;
+    font-weight:bold;
+    text-align:center;
 }
 td.SIGNAL {
     color:yellow;
     background:red;
     font-weight:bold;
     text-align:center;
-    font-family:fixed;
-    font-size:smaller;
+}
+td.XSIGNAL {
+    color:tomato;
+    background:lightgreen;
+    font-weight:bold;
+    text-align:center;
 }
 td.COMP {
     background:violet;
     font-weight:bold;
     text-align:center;
-    font-family:fixed;
-    font-size:smaller;
+}
+td.XCOMP {
+    color:violet;
+    background:lightgreen;
+    font-weight:bold;
+    text-align:center;
 }
 td.LINK {
     color:yellow;
     background:mediumpurple;
     font-weight:bold;
     text-align:center;
-    font-family:fixed;
-    font-size:smaller;
+}
+td.XLINK {
+    color:mediumpurple;
+    background:lightgreen;
+    font-weight:bold;
+    text-align:center;
 }
 td.xdep {
     color:yellow;
     background:gray;
     font-weight:bold;
     text-align:center;
-    font-family:fixed;
-    font-size:smaller;
+}
+tr.LIB {
+    background:pink;
+    color:black;
 }
 EOF
 
@@ -332,435 +850,104 @@
 
 ######################################################################
 
+readonly scripturl="<a href=\"$myurl\"><code>$myname</code></a>"
+
 # output the initial portion of the HTML file
 cat <<EOF | output
 <html>
   <head>
+    <title>$title</title>
     <link rel="stylesheet" href="resultstyle.css" type="text/css"
           title="Cross-Build View Style Sheet">
   </head>
   <body>
 
-    <h1>Multi-platform Test Result View</h1>
-    Generated `date`
+    <h1>$title</h1>
+    Generated $today by $scripturl on `hostname` running `uname -sr`
     <hr>
 
     <h2>Index</h2>
 
     <ul>
-        <li><a href="#examples">Examples</a></li>
-        <li><a href="#tests">Tests</a></li>
-        <li><a href="#locales">Locales</a></li>
-        <li><a href="#codes">Codes and Colors</a></li>
-        <li><a href="#buildtypes">Build Types</a></li>
+      <li><a href="#logs">Logs and Columns</a></li>
+      <li><a href="#timings">Timings</a></li>
+      <li><a href="#examples">Examples</a></li>
+      <li><a href="#tests">Tests</a></li>
+      <li><a href="#locales">Locales</a></li>
+      <li><a href="#codes">Codes and Colors</a></li>
+      <li><a href="#buildtypes">Build Types</a></li>
     </ul>
     <hr>
 EOF
 
 ######################################################################
 
-# the location of the logs
-logdir="http://people.apache.org/~sebor/stdcxx/results"
-
-# the names of temporary files containing the list of components
-# (examples, locales, and tests) to process and include in the
-# generated report
-tests_file=$TMP/.stdcxx-tests.$$
-examples_file=$TMP/.stdcxx-examples.$$
-locales_file=$TMP/.stdcxx-locales.$$
+# the name of a temporary file containing the build timings
+timings_file=$TMPDIR/.stdcxx-timings.$$
 
-# remove temporary files in case they exist
-rm -f $tests_file $examples_file $locales_file
+# remove the temporary file
+rm -f timings_file
 
 if [ $? -ne 0 ]; then
     exit 2
 fi
 
-
-cat <<EOF | output
-    <h2>Logs and Columns</h2>
-    <ol>
-EOF
-
 ######################################################################
 # expand gzipped logs and extract the relevant portion from each into
-# a smaller text file for fast and easy processing
+# a smaller text file for fast and easy processing; the names of all
+# the text files are stored in the textlogs variable
+
+# number of logs processed in loop below
+logcount=0
+
+# space-separated list of names of text logs processed in loop below
+textlogs=""
+logdir=""
 
-n=0
 for l in $gzlogs; do
-    n=`expr $n + 1`
+    logcount=$((logcount + 1))
     fname=`basename $l`
 
     if [ $verbose -eq 1 ]; then
-        echo "processing $l"
+        echo "$myname: processing $l"
     fi
 
-    if [ $components_in_rows -ne 0 ]; then
-        # output one component per row with their results in columns
-        table_header="$table_header <th><div title=\"$fname\">$n</div></th>"
+    # set temporary variables (valid only within the loop)
+    txtlog=$TMPDIR/`basename $l .gz.txt`.txt.$$
 
-        output "      <li><a href=\"$logdir/$fname\">$fname</a></li>"
+    if [ "$logdir" = "" ]; then
+        logdir=`dirname $l`
+    elif [ $logdir != `dirname $l` ]; then
+        echo "$myname: not implemented: logs in multiple directories" >&2
     fi
 
-    # runlog=$TMP/.stdcxx-tmplog.$$.$n
-    runlog=$TMP/`basename $l`.$$
-    textlogs="$textlogs $runlog"
-
-    # unzip the log and cut the firt part up to the first table
-    gunzip -c $l | sed -e "1,/^NAME  *STATUS/d" > $runlog
-
-    status=$?
-
-    if [ $status -eq 0 ]; then
+    # append the name of the log to the list
+    textlogs="$textlogs $txtlog"
 
-        # extract the list of locales from the log
+    # unzip the log into a temporary text file
+    gunzip -c $l > $txtlog
+    if [ $? -ne 0 ]; then
+        echo "$myname: error unzipping $l" >&2
 
-             sed -e "/^PROGRAM SUMMARY:/,999999d" $runlog              \
-           | sed -e "s/^\([^ ][^ ]*\)  *.*/\1/"  >>$locales_file       \
-        && sed -e "1,/^NAME  *STATUS/d" $runlog > $runlog.next
-
-        status=$?
-
-        if [ $verbose -eq 1 ]; then
-            echo "  extracted locale results into $locales_file"
-        fi
-    else
-        exit 3
+        # continue processing the empty log below
     fi
-
-    if [ $status -eq 0 ]; then
-
-        # extract the list of tests from the log
-
-             sed -e "/^PROGRAM SUMMARY:/,999999d" $runlog.next          \
-           | sed -e "s/^\([^ ][^ ]*\)  *.*/\1/"  >>$tests_file          \
-        && sed -e "1,/^NAME  *STATUS/d" $runlog.next > $runlog.next.2   \
-        && mv $runlog.next.2 $runlog.next
-
-        status=$?
-
-        if [ $verbose -eq 1 ]; then
-            echo "  extracted test results into $tests_file"
-        fi
-    else
-        exit 3
-    fi
-
-    if [ $status -eq 0 ]; then
-
-        # extract the list of examples from the log
-
-             sed -e "/^PROGRAM SUMMARY:/,999999d" $runlog.next          \
-           | sed -e "s/^\([^ ][^ ]*\)  *.*/\1/"  >>$examples_file       \
-        && sed -e "1,/^NAME  *STATUS/d" $runlog > $runlog.next.2        \
-        && mv $runlog.next.2 $runlog.next
-
-        if [ $verbose -eq 1 ]; then
-            echo "  extracted example results into $examples_file"
-        fi
-    else
-        exit 3
-    fi
-
-    rm $runlog.next
 done
 
-
-n=0
-if [ $components_in_rows -eq 0 ]; then
-
-    for c in $example_list $test_list $locale_list; do
-        n=`expr $n + 1`
-
-        # output one build per row, with components in columns
-        table_header="$table_header <th><div title=\"$c\">$n</div></th>"
-        output "      <li>$c</li>"
-    done
-fi
-
-output "    </ol>"
-output "    <hr>"
-
-if [ -s $locales_file ]; then
-    # if the list of locales non-empty sort it and weed out duplicates
-       sort $locales_file | uniq > $locales_file.2 \
-    && mv $locales_file.2 $locales_file
-fi
-
-if [ -s $examples_file ]; then
-    # if the list of examples is non-empty sort it and weed out duplicates
-       sort $examples_file | uniq > $examples_file.2 \
-    && mv $examples_file.2 $examples_file
-fi
-
-if [ -s $tests_file ]; then
-    # if list of tests file is non-empty sort it and weed out duplicates
-       sort $tests_file | uniq > $tests_file.2 \
-    && mv $tests_file.2 $tests_file
-fi
-
 ######################################################################
 
-awkscript=$TMP/stdcxx-cross.$$.awk
-
-cat > $awkscript <<EOF
-BEGIN {
-    columns     = ""
-    compinx     = 0
-    count       = 0
-    max_asserts = 0
-    min_asserts = -1
-}
-\$0 ~ "^" name "  *[^-]" {
-
-    status = \$2
-
-    if (status == 0) {
-        if (comp == "example" || \$5 == 0) {
-            if (\$3 == 0) {
-                class = "OK"
-                value = "0"
-            }
-            else {
-                ++count;
-                ++nfailures [compinx]
-                class = "RUNWARN"
-                value = "(" \$3 ")"
-            }
-        }
-        else {
-            ++count
-            ++nfailures [compinx]
-
-            class   = "ASSERT"
-            # value = \$5 " / " \$4
-            value   = "(" \$5 ")"
-        }
-
-        if (comp == "test") {
-            asserts [n] = \$5
-
-            if (max_asserts < \$4) {
-                max_asserts = \$4
-            }
-
-            if (\$4 < min_asserts || min_asserts < 0) {
-                min_asserts = \$4
-            }
-        }
-    }
-    else if (0 < status && status < 256) {
-        ++count
-        ++nfailures [compinx]
-
-        class = "EXIT"
-        value = status
-    }
-    else if (status == "FORMAT" || status == "NOUT" || status == "OUTPUT") {
-        ++count
-
-        class = status
-        value = status
-    }
-    else if (status == "DIFF" || status == "COMP" || status == "LINK") {
-        ++count
-        ++nfailures [compinx]
-
-        class = status
-        value = status
-    }
-    else {
-        ++count
-        ++nfailures [compinx]
-
-        class = "SIGNAL"
-        value = status
-    }
-
-    columns = columns "\n        <td class=\"" class "\">" value "</td>"
-
-    ++compinx
-}
-
-function build_summary () {
-    if (verbose || count) {
-        print "      <tr>"
-        print "        <td class=\"rowno\">" n "</td>"
-        print "        <td class=\"name\"><a name=\"" name "\">" \
-                       name "</a></td>"
-
-        if (comp == "test") {
-            print "        <td class=\"number\">" max_asserts "</td>"
-        }
-
-        print columns;
-        print "      </tr>"
-    }
-
-    tmpfile = "$TMP/.stdcxx-failtotals.$$.txt"
-
-    if (count) {
-        getline < tmpfile
-        close(tmpfile)
-
-        ORS=" "
-        for (i = 0; i < compinx; ++i) {
-            print nfailures [i] + \$(i + 1) > tmpfile
-        }
-
-        ORS="\n"
-        print "" >> tmpfile
-        close(tmpfile)
-    }
-
-    if (FILENAME == "-") {
-
-        if (comp == "test") {
-            print "<td class=\"header\"></td>"
-        }
-
-        getline < tmpfile
-
-        for (i = 1; i < NF + 1; ++i) {
-            print "        <td class=\"header\">" \$(i) "</td>"
-        }
-
-        system("rm -f " tmpfile)
-    }
-}
-
-function component_summary () {
-    print columns;
-}
-
-END {
-    if (comp != "") {
-        build_summary()
-    }
-    else {
-        component_summary()
-    }
-}
-EOF
-
-######################################################################
-
-# process a list of components, one component per row
-process_components()
-{
-    component_name=$1
-    component_list=$2
-
-    if [ $component_name = "test" ]; then
-        column3="        <th><div title=\"maximum total assertions\">asserts</div></th>"
-    else
-        unset column3
-    fi
-
-    cat <<EOF | output
-    <h2>Results of ${component_name}s</h2>
-    <table>
-      <tr>
-        <th><div title="${component_name} number">###</div></th>
-        <th>
-          <a name="${component_name}s"></a>$component_name name
-        </th>
-        $column3
-        $table_header
-      </tr>
-EOF
-
-    n=0;
-    for c in $component_list; do
-
-        n=`expr $n + 1`
-
-          awk -f $awkscript \
-              n=$n name=$c verbose=$verbose comp=$component_name \
-              $textlogs \
-        | output
-
-    done
-    cat <<EOF | output
-      <tr>
-        <td class="rowno">$n</th>
-        <td class="header">
-          <div title="total number of ${component_name}s/failed number of ${component_name}s">total/failed</div>
-        </td>
-EOF
-
-    echo "" | awk -f $awkscript comp=$component_name | output
-
-    cat <<EOF | output
-      </tr>
-    </table>
-EOF
-}
+# xcross-component script
+xcomp=$HOME/stdcxx/bin/xcomp.awk
 
 ######################################################################
 
-# process a list of builds, one build per row
-process_builds()
-{
-    component_name=$1
-    component_list=$2
-
-    cat <<EOF | output
-    <h2>Results of ${component_name}s</h2>
-    <table>
-      <tr>
-        <th><a name="${component_name}s"></a>log</th>
-        $table_header
-      </tr>
-EOF
-
-    for l in $textlogs; do
-
-        fname=`basename $l .$$`
-        cat <<EOF | output
-      <tr>
-        <td class="name">
-            <a href="$logdir/$fname">$fname</a>
-        </td>
-EOF
-
-        for c in $component_list; do
-
-            line=`grep "^$c  *[^-]" $l`
-            if [ $? -eq 0 -a "$line" != "" ]; then
-                  echo $line \
-                | awk -f $awkscript component=$component_name \
-                      name=$c verbose=$verbose \
-                | output
-            else
-                output "        <td class=\"missing\">N/A</td>"
-            fi
-        done
-
-        output "      </tr>"
-    done
-    output "    </table>"
-}
-
-
-if [ $components_in_rows -ne 0 ]; then
-    process_components "example" "`cat $examples_file`"
-    process_components "test" "`cat $tests_file`"
-    process_components "locale" "`cat $locales_file`"
+# check to see 
+if [ -r $xfailfile ]; then
+    xfails=$xfailfile
 else
-    if [ "$examples_list" != "" ]; then
-        process_builds "example" "$examples_list"
-    fi
-
-    if [ "$test_list" != "" ]; then
-        process_builds "test" "$test_list"
-    fi
-
-    if [ "$locale_list" != "" ]; then
-        process_builds "locale" "$locale_list"
-    fi
+    xfails=""
 fi
 
+awk -f $xcomp bodyonly=1 logdir=$logdir $xfails $textlogs | output
 
 ######################################################################
 # output the rest of the HTML file
@@ -768,96 +955,154 @@
     <h2><a name="codes"></a>Codes and Colors</h2>
     <table>
       <thead>
+
         <tr>
-          <td class="header">Symbol</td>
-          <td class="header">Meaning</td>
+          <th colspan=4 class="header">Status</th>
+          <th rowspan=2 class="header">Meaning</th>
+        </tr>
+        <tr>
+          <th class="header" title="Unexpected success or ordinary failure">
+            Unexpected
+          </th>
+          <th class="header">Severity</th>
+          <th class="header" title="Ordinary success or expected failure">
+            Expected
+          </th>
+          <th class="header">Severity</th>
+        </tr>
+      </thead>
+
+      <tbody>
+        <tr>
+          <td class="XPASS">XPASS</td>
+          <td class="na">Success</td>
+          <td class="OK">OK</td>
+          <td class="na">Success</td>
+          <td class="na">
+            Component completed successfully and produced the expected
+            output.
+          </td>
+        </tr>
+        <tr>
+          <td colspan=2 class="na"><center>Not Applicable</center></td>
+          <td class="NOUT">NOUT</td>
+          <td class="na">Success</td>
+          <td class="na">
+            Component completed successfully and produced no output.
+          </td>
+        </tr>
+        <tr>
+          <td colspan=2 class="na"><center>Not Applicable</center></td>
+          <td class="BASE">BASE</td>
+          <td class="na">Success</td>
+          <td class="na">
+            Component completed successfully and matched the baseline.
+          </td>
+        </tr>
+        <tr>
+          <td colspan=2 class="na"><center>Not Applicable</center></td>
+          <td class="FORMAT">FORMAT</td>
+          <td class="na">Success</td>
+          <td class="na">
+             Component completed successfully but produced unexpected
+             output.
+          </td>
+        </tr>
+        <tr>
+          <td class="MISS">N/A</td>
+          <td class="na">Success</td>
+          <td colspan=2 class="na"><center>Not Applicable</center></td>
+          <td class="na">Component was not tested.</td>
+        </tr>
+        <tr>
+          <td class="XDEP">XDEP</td>
+          <td class="na">Failure</td>
+          <td colspan=2 class="na"><center>Not Applicable</center></td>
+          <td class="na">
+              Component was not attempted due to a missing (or failed)
+              dependency.
+          </td>
+        </tr>
+        <tr>
+          <td class="COMP">COMP</td>
+          <td class="na">Failure</td>
+          <td class="XCOMP">XCOMP</td>
+          <td class="na">Success</td>
+          <td class="na">Component failed to compile.</td>
+        </tr>
+        <tr>
+          <td class="LINK">LINK</td>
+          <td class="na">Failure</td>
+          <td class="XLINK">XLINK</td>
+          <td class="na">Success</td>
+          <td class="na">
+               Component compiled successfully but failed to link.
+          </td>
+        </tr>
+        <tr>
+          <td class="WARN">WARN</td>
+          <td class="na">Success</td>
+          <td class="XWARN">XWARN</td>
+          <td class="na">Success</td>
+          <td class="na">
+             Component compiled and linked successfully but with warnings.
+          </td>
+        </tr>
+        <tr>
+          <td class="RUNWARN">(N)</td>
+          <td class="na">Success</td>
+          <td class="XRUNWARN">(N)</td>
+          <td class="na">Success</td>
+          <td class="na">
+
+            Component compiled and linked successfully, exited with
+            a status of 0, but produced N warnings at runtime.
+          </td>
+        </tr>
+        <tr>
+
+          <td class="EXIT">N</td> 
+          <td class="na">Failure</td>
+          <td class="XEXIT">N</td>
+          <td class="na">Success</td>
+          <td class="na">
+            Component compiled and linked successfully but exited with
+            a non-zero status of N.
+          </td>
+        </tr>
+        <tr>
+          <td class="DIFF">DIFF</td>
+          <td class="na">Failure</td>
+          <td class="XDIFF">XDIFF</td>
+          <td class="na">Success</td>
+          <td class="na">
+            Component compiled and linked successfully, exited with
+            a status of 0, but produced unexpected output.
+          </td>
+        </tr>
+        <tr>
+          <td class="SIGNAL">[SIG]&lt;name&gt;</td>
+          <td class="na">Failure</td>
+          <td class="XSIGNAL">X[SIG]&lt;name&gt;</td>
+          <td class="na">Success</td>
+          <td class="na">
+            Component compiled and linked successfully, but exited
+            with the named signal (for example, SIGABRT).
+          </td>
+        </tr>
+        <tr>
+          <td class="ASSERT">(N)</td>
+          <td class="na">Failure</td>
+          <td class="XASSERT">(N)</td>
+          <td class="na">Success</td>
+          <td class="na">
+            Component compiled and linked successfully, exited with
+            a status of 0, but failed N assertions at runtime.
+          </td>
         </tr>
-        </thead>
-        <tbody>
-          <tr>
-            <td class="OK">OK</td>
-            <td class="na">
-              Component completed successfully and produced the expected
-              output.
-            </td>
-          </tr>
-          <tr>
-            <td class="NOUT">NOUT</td>
-            <td class="na">
-              Component completed successfully and produced no output.
-            </td>
-          </tr>
-          <tr>
-            <td class="BASE">BASE</td>
-            <td class="na">
-              Component completed successfully and matched the baseline.
-            </td>
-          </tr>
-          <tr>
-            <td class="missing">N/A</td>
-            <td class="na">Component was not tested.</td>
-          </tr>
-          <tr>
-            <td class="XDEP">XDEP</td>
-            <td class="na">
-                Component was not attempted due to a missing (or failed)
-                dependency.
-            </td>
-          </tr>
-          <tr>
-            <td class="COMP">COMP</td>
-            <td class="na">Component failed to compile.</td>
-          </tr>
-          <tr>
-            <td class="LINK">LINK</td>
-            <td class="na">
-                 Component compiled successfully but failed to link.
-            </td>
-          </tr>
-          <tr>
-            <td class="WARN">WARN</td>
-            <td class="na">
-               Component compiled and linked successfully but with warnings.
-            </td>
-          </tr>
-          <tr>
-            <td class="runwarn">(N)</td>
-            <td class="na">
-              Component compiled and linked successfully, exited with
-              a status of 0, but produced N warnings at runtime.
-            </td>
-          </tr>
-          <tr>
-            <td class="EXIT">N</td>
-            <td class="na">
-              Component compiled and linked successfully but exited with
-              a non-zero status of N.
-            </td>
-          </tr>
-          <tr>
-            <td class="DIFF">DIFF</td>
-            <td class="na">
-              Component compiled and linked successfully, exited with
-              a status of 0, but produced unexpected output.
-            </td>
-          </tr>
-          <tr>
-            <td class="SIGNAL">[SIG]&lt;name&gt;</td>
-            <td class="na">
-              Component compiled and linked successfully, but exited
-              with the named signal (for example, SIGABRT).
-            </td>
-          </tr>
-          <tr>
-            <td class="assert">(N)</td>
-            <td class="na">
-              Component compiled and linked successfully, exited with
-              a status of 0, but failed Nassertions at runtime.
-            </td>
-          </tr>
       </tbody>
     </table>
-    
+   
     <h2><a name="buildtypes"></a>Build Types</h2>
 
     <table>
@@ -973,9 +1218,10 @@
 
 if [ -z $no_clean ]; then
     # clean up
-    rm $awkscript $examples_file $tests_file $locales_file
 
-    for l in $textlogs; do
-        rm $l
-    done
+    if [ $verbose -eq 1 ]; then
+        echo "$myname: rm $textlogs $timings_file"
+    fi
+
+    rm -f $textlogs $timings_file
 fi

Propchange: stdcxx/branches/4.2.x/bin/xbuildgen
------------------------------------------------------------------------------
--- svn:keywords (original)
+++ svn:keywords Thu May 15 08:34:26 2008
@@ -1 +1 @@
-Id
+Revision

Modified: stdcxx/branches/4.2.x/bin/xcomp.awk
URL: http://svn.apache.org/viewvc/stdcxx/branches/4.2.x/bin/xcomp.awk?rev=656702&r1=656701&r2=656702&view=diff
==============================================================================
--- stdcxx/branches/4.2.x/bin/xcomp.awk (original)
+++ stdcxx/branches/4.2.x/bin/xcomp.awk Thu May 15 08:34:26 2008
@@ -23,7 +23,7 @@
 ########################################################################
 #
 # SYNOPSIS
-#     myname [bodyonly=0|1] logs...
+#     myname [bodyonly=0|1 logdir=<logdir>] logs...
 #
 # VARIABLES:
 #   bodyonly     when non-zero, suppresses the <html> tags
@@ -1777,7 +1777,7 @@
     # replace the trailing .txt suffix with .gz.txt
     sub("\\.txt$", ".gz.txt", fref)
 
-    return "../" fref
+    return "logs/" fref
 }
 
 

Propchange: stdcxx/branches/4.2.x/bin/xcomp.awk
            ('svn:eol-style' removed)