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 2007/07/03 18:04:06 UTC
svn commit: r552891 - in /incubator/stdcxx/trunk/bin: ./ xbuildgen
Author: sebor
Date: Tue Jul 3 09:04:05 2007
New Revision: 552891
URL: http://svn.apache.org/viewvc?view=rev&rev=552891
Log:
2007-07-03 Martin Sebor <se...@roguewave.com>
* xbuildgen: Utility to generate cross-build results from multiple
stdcxx build logs.
Added:
incubator/stdcxx/trunk/bin/
incubator/stdcxx/trunk/bin/xbuildgen (with props)
Added: incubator/stdcxx/trunk/bin/xbuildgen
URL: http://svn.apache.org/viewvc/incubator/stdcxx/trunk/bin/xbuildgen?view=auto&rev=552891
==============================================================================
--- incubator/stdcxx/trunk/bin/xbuildgen (added)
+++ incubator/stdcxx/trunk/bin/xbuildgen Tue Jul 3 09:04:05 2007
@@ -0,0 +1,966 @@
+#!/bin/sh
+#
+# $Id$
+#
+########################################################################
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed
+# with this work for additional information regarding copyright
+# ownership. The ASF licenses this file to you under the Apache
+# License, Version 2.0 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied. See the License for the specific language governing
+# permissions and limitations under the License.
+#
+# Copyright 2007 Rogue Wave Software.
+#
+########################################################################
+#
+# NAME
+# xbuildgen - Generate build results across multiple platforms.
+#
+# SYNOPSIS
+# xbuildgen [option(s)...] [log-file(s)...]
+#
+# DESCRIPTION
+# The xbuildgen utility generates a build result in HTML format
+# across multiple platforms or tests with builds in columns and
+# components such as examples, locales, and tests in rows by
+# default.
+#
+# OPTIONS
+# -n No clean. Avoid removing temporary files.
+#
+# -s Stylesheet. Create a style sheet named resultstyle.css in
+# the same directory as the output file when the -o option
+# is specified, or in the current working directory otherwise.
+#
+# -v Verbose. Produce verbose output on stdout.
+#
+# -e <list-of-examples>
+# Generate a report for the specified list of example programs
+# with examples listed in columns and builds in rows.
+#
+# -l <list-of-locales>
+# Generate a report for the specified list of locales with
+# locales listed in columns and builds in rows.
+#
+# -o <output-file>
+# Specify the pathname of the output file. The utility will
+# use stdout when no output file is specified.
+#
+# -t <list-of-tests>
+# Generate a report for the specified list of tests with
+# tests listed in columns and builds in rows.
+#
+########################################################################
+
+
+# by default, display one component (example, locale, or test) per row
+components_in_rows=1
+
+## process command line options
+while getopts ":nsv:e:l:o:t:" opt_name; do
+ case $opt_name in
+ # options with no arguments
+
+ n) # avoid cleaning up temporary files
+ no_clean=1
+ ;;
+
+ s) # create a style sheet
+ create_stylesheet=1
+ ;;
+
+ v) # output all components (including passing ones)
+ verbose=1
+ ;;
+
+ # options with arguments
+
+ e) # argument is a list of examples to process
+ example_list=$OPTARG
+ components_in_rows=0
+ ;;
+
+ l) # argument is a list of locales to process
+ locale_list=$OPTARG
+ components_in_rows=0
+ ;;
+
+ o) # argument is the name of output file (stdout by default)
+ outfile=$OPTARG
+ ;;
+
+ t) # argument is a list of tests to process
+ test_list=$OPTARG
+ components_in_rows=0
+ ;;
+
+ *) echo "unknown option : -$opt_name" >&2;
+ exit 1;;
+ esac;
+done
+
+# 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
+
+######################################################################
+
+# output to output file when specified or to stdout
+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
+}
+
+
+######################################################################
+
+# remove output file if specified
+if [ ! -z $outfile ]; then
+ rm -f $outfile
+fi
+
+
+# overwrite style sheet
+if [ "$create_stylesheet" = "1" ]; then
+
+ if [ -z $outfile ]; then
+ dir=.
+ else
+ dir=`dirname $outfile`
+ fi
+
+ cat <<EOF >$dir/resultstyle.css
+
+table {
+ border-width:0px;
+ background:#000000;
+ font-size:smaller;
+}
+th {
+ font-family:fixed
+ font-size:smaller;
+ background:#cccccc;
+ text-align:center;
+}
+td {
+ font-family:fixed;
+ font-size:smaller;
+ padding: 3px;
+ text-align: center;
+ background-color: lightblue;
+}
+td.rowno {
+ font-family:fixed;
+ font-size:smaller;
+ padding: 3px;
+ text-align: right;
+ background-color:#cccccc;
+}
+td.name {
+ font-family:fixed;
+ font-size:smaller;
+ padding: 3px;
+ text-align: left;
+ background-color:lightblue;
+}
+td.number {
+ font-family:fixed;
+ font-size:smaller;
+ padding: 3px;
+ text-align: center;
+ background-color:lightblue;
+}
+td.na {
+ background:white;
+ text-align:left;
+ font-family:fixed
+ font-size:smaller;
+}
+td.header {
+ background:#cccccc;
+ text-align:center;
+ font-family:fixed;
+ font-size:smaller;
+ font-weight:bold;
+}
+td.OK {
+ background:forestgreen;
+ text-align:center;
+ font-family:fixed;
+ font-size:smaller;
+ 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 {
+ 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
+}
+td.EXIT {
+ color:red;
+ background:gold;
+ text-align:center;
+ font-weight:bold;
+ font-family:fixed;
+ font-size:smaller;
+}
+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.DIFF {
+ color:red;
+ background:#ffff99;
+ font-weight:bold;
+ text-align:center;
+ font-family:fixed;
+ font-size:smaller;
+}
+td.ASSERT {
+ color:red;
+ background:#ffff99;
+ font-weight:bold;
+ text-align:center;
+ font-family:fixed;
+ font-size:smaller;
+}
+td.SIGNAL {
+ color:yellow;
+ background:red;
+ font-weight:bold;
+ text-align:center;
+ font-family:fixed;
+ font-size:smaller;
+}
+td.COMP {
+ background:violet;
+ font-weight:bold;
+ text-align:center;
+ font-family:fixed;
+ font-size:smaller;
+}
+td.LINK {
+ color:yellow;
+ background:mediumpurple;
+ font-weight:bold;
+ text-align:center;
+ font-family:fixed;
+ font-size:smaller;
+}
+td.xdep {
+ color:yellow;
+ background:gray;
+ font-weight:bold;
+ text-align:center;
+ font-family:fixed;
+ font-size:smaller;
+}
+EOF
+
+fi
+
+######################################################################
+
+# output the initial portion of the HTML file
+cat <<EOF | output
+<html>
+ <head>
+ <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`
+ <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>
+ </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.$$
+
+# remove temporary files in case they exist
+rm -f $tests_file $examples_file $locales_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
+
+n=0
+for l in $gzlogs; do
+ n=`expr $n + 1`
+ fname=`basename $l`
+
+ 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>"
+
+ output " <li><a href=\"$logdir/$fname\">$fname</a></li>"
+ fi
+
+ # runlog=$TMP/.stdcxx-tmplog.$$.$n
+ runlog=$TMP/`basename $l`.$$
+ textlogs="$textlogs $runlog"
+
+ gunzip -c $l \
+ | sed -e "1,/### [g]*make runall/d" \
+ -e "/^[g]*make\[.\]: .*/d" \
+ -e "/###/,999999d" \
+ -e "/^PHDIR/d" \
+ -e "/\/bin\/sh: /d" > $runlog
+
+ status=$?
+
+ if [ $status -eq 0 ]; then
+
+ # extract the list of locales from the log
+
+ sed -e "1,2d" $runlog \
+ | sed -n -e "1,/NAME */p" \
+ | sed -e "/NAME */d" \
+ -e "s/ *.*//" >>$locales_file
+
+ status=$?
+ else
+ exit 3
+ fi
+
+ if [ $status -eq 0 ]; then
+
+ # extract the list of tests from the log
+
+ sed "1,2d" $runlog \
+ | sed -e "1,/NAME */d" \
+ -e "/NAME */,999999d" \
+ -e "s/ *.*//" >>$tests_file;
+
+ status=$?
+ else
+ exit 3
+ fi
+
+ if [ $status -eq 0 ]; then
+
+ # extract the list of examples from the log
+ \
+ sed "1,2d" $runlog \
+ | sed -e "1,/NAME */d" \
+ | sed -e "1,/NAME */d" \
+ | sed -e "/NAME */,999999d" \
+ -e "s/ *.*//" >>$examples_file
+ else
+ exit 3
+ fi
+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
+}
+
+######################################################################
+
+# 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`"
+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
+fi
+
+
+######################################################################
+# output the rest of the HTML file
+cat <<EOF | output
+ <h2><a name="codes"></a>Codes and Colors</h2>
+ <table>
+ <thead>
+ <tr>
+ <td class="header">Symbol</td>
+ <td class="header">Meaning</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]<name></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>
+ <thead>
+ <tr>
+ <td class="header">Library:</td>
+ <th colspan="2">Archive Library</th>
+ <th colspan="2">Shared Library</th>
+ <th colspan="2">Shared Archive (AIX)</th>
+ </tr>
+ <tr>
+ <td class="header">Number/Symbol</td>
+ <td class="header">s<br>(32-bit)</td>
+ <td class="header">S<br>(64-bit)</td>
+ <td class="header">d<br>(32-bit)</td>
+ <td class="header">D<br>(64-bit)</td>
+ <td class="header">a<br>(32-bit)</td>
+ <td class="header">A<br>(64-bit)</td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="header"><b>8</b><br>(optimized)</td>
+ <td class="na">
+ <b>8s</b>: Debugging off, optimized, not reentrant.
+ </td>
+ <td class="na">
+ <b>8S</b>: Debugging off, optimized, not reentrant.
+ </td>
+ <td class="na">
+ <b>8d</b>: Debugging off, optimized, not reentrant.
+ </td>
+ <td class="na">
+ <b>8D</b>: Debugging off, optimized, not reentrant.
+ </td>
+ <td class="na">
+ <b>8a</b>: Debugging off, optimized, not reentrant.
+ </td>
+ <td class="na">
+ <b>8A</b>: Debugging off, optimized, not reentrant.
+ </td>
+ </tr>
+ <tr>
+ <td class="header"><b>11</b><br>(debug)</td>
+ <td class="na">
+ <b>11s</b>: Debug, not optimized, not reentrant.
+ </td>
+ <td class="na">
+ <b>11S</b>: Debug, not optimized, not reentrant.
+ </td>
+ <td class="na">
+ <b>11d</b>: Debug, not optimized, not reentrant.
+ </td>
+ <td class="na">
+ <b>11D</b>: Debug, not optimized, not reentrant.
+ </td>
+ <td class="na">
+ <b>11a</b>: Debug, not optimized, not reentrant.
+ </td>
+ <td class="na">
+ <b>11A</b>: Debug, not optimized, not reentrant.
+ </td>
+ </tr>
+ <tr>
+ <td class="header"><b>12</b><br>(optimized)</td>
+ <td class="na">
+ <b>12s</b>: Debugging off, optimized, reentrant.
+ </td>
+ <td class="na">
+ <b>12S</b>: Debugging off, optimized, reentrant.
+ </td>
+ <td class="na">
+ <b>12d</b>: Debugging off, optimized, reentrant.
+ </td>
+ <td class="na">
+ <b>12D</b>: Debugging off, optimized, reentrant.
+ </td>
+ <td class="na">
+ <b>12a</b>: Debugging off, optimized, reentrant.
+ </td>
+ <td class="na">
+ <b>12A</b>: Debugging off, optimized, reentrant.
+ </td>
+ </tr>
+ <tr>
+ <td class="header"><b>15</b><br>(debug)</td>
+ <td class="na">
+ <b>15s</b>: Debug, not optimized, reentrant.
+ </td>
+ <td class="na">
+ <b>15S</b>: Debug, not optimized, reentrant.
+ </td>
+ <td class="na">
+ <b>15d</b>: Debug, not optimized, reentrant.
+ </td>
+ <td class="na">
+ <b>15D</b>: Debug, not optimized, reentrant.
+ </td>
+ <td class="na">
+ <b>15a</b>: Debug, not optimized, reentrant.
+ </td>
+ <td class="na">
+ <b>15A</b>: Debug, not optimized, reentrant.
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </body>
+</html>
+EOF
+
+######################################################################
+
+if [ -z $no_clean ]; then
+ # clean up
+ rm $awkscript $examples_file $tests_file $locales_file
+
+ for l in $textlogs; do
+ rm $l
+ done
+fi
Propchange: incubator/stdcxx/trunk/bin/xbuildgen
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/stdcxx/trunk/bin/xbuildgen
------------------------------------------------------------------------------
svn:executable = *
Propchange: incubator/stdcxx/trunk/bin/xbuildgen
------------------------------------------------------------------------------
svn:keywords = Id