stdcxx-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From se...@apache.org
Subject svn commit: r596034 - /incubator/stdcxx/trunk/bin/buildntest
Date Sun, 18 Nov 2007 01:37:37 GMT
Author: sebor
Date: Sat Nov 17 17:37:36 2007
New Revision: 596034

URL: http://svn.apache.org/viewvc?rev=596034&view=rev
Log:
2007-11-17  Martin Sebor  <sebor@roguewave.com>

	* buildntest: New shell script to build stdcxx and test it.

Added:
    incubator/stdcxx/trunk/bin/buildntest   (with props)

Added: incubator/stdcxx/trunk/bin/buildntest
URL: http://svn.apache.org/viewvc/incubator/stdcxx/trunk/bin/buildntest?rev=596034&view=auto
==============================================================================
--- incubator/stdcxx/trunk/bin/buildntest (added)
+++ incubator/stdcxx/trunk/bin/buildntest Sat Nov 17 17:37:36 2007
@@ -0,0 +1,686 @@
+#!/bin/bash
+########################################################################
+#
+# $Id$
+#
+# script to build and test the Apache C++ Standard Library
+#
+########################################################################
+#
+# 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, Inc.
+#
+########################################################################
+#
+# USAGE:
+#
+#     buildntest [ -e <examples-to-build> ]
+#                [ -l <locales-to-build> ]
+#                [ -o <output-file> ]
+#                [ -t <tests-to-build> ]
+#                [ -u <utilities-to-build> ]
+#                [ -C <config> ]
+#                [ -B <buildtype> ]
+#                [ -E <examples-to-run> ]
+#                [ -L <locales-to-run> ]
+#                [ -M <buildmode> ]
+#                [ -P <prefix> ]
+#                [ -T <tests-to-run> ]
+#
+# OPTIONS:
+#
+#     -e <examples-to-build>
+#         Specifies the list of example programs to build. When omitted,
+#         defaults to all.
+#                            
+#     -l <locales-to-build>
+#         Specifies the list of locales to build. When omitted, defaults
+#         to all.
+#                            
+#     -o <output-file>
+#         Specifies the name of the ouptut file to create. When omitted,
+#         defaults to STDOUT and STDERR.
+#
+#     -t <tests-to-build>
+#         Specifies the list of tests to build. When omitted, defaults
+#         to all.
+#
+#     -B <buildtype>
+#         Specifies the value of the BUILDTYPE variable to pass to
+#         make.
+#
+#     -C <config>
+#         Specifies the value of the CONFIG variable to pass to make.
+#
+#     -M <buildmode>
+#         Specifies the value of the BUILDMODE variable to pass to
+#         make.
+#
+#     -E <examples-to-run>
+#         Specifies the list of example programs to run. When omitted,
+#         defaults to <examples-to-build>.
+#                            
+#     -L <locales-to-run>
+#         Specifies the list of locales to exhaustively test. When
+#         omittedm, defaults to <locales-to-build>.
+#                            
+#     -P <prefix>
+#         Specifies the value for the PREFIX variable to pass to make.
+#         When omitted, the test makefile target is not exercised.
+#
+#     -T <tests-to-run>
+#         Specifies the list of tests to run. When omitted, defaults
+#         to <tests-to-build>.
+#
+# EXAMPLES:
+#
+#     Example 1:
+#
+#     buildntest -Cgcc.config -B15s \
+#                -e"accumulate money_put time_get" \
+#                -l"en_US.ISO-8859-1 de_DE.ISO-8859-15" \
+#                -t"21.string.append 21.string.replace" \
+#                -E"time_get" -L"de_DE.ISO-8859-15" \
+#                -Pinstall
+#
+#     The command above will build the stdcxx library with gcc in the
+#     15s build type, then build the accumulate, money_put, and time_get
+#     example programs, the en_US.ISO-8859-1 and de_DE.ISO-8859-15
+#     locales, and the tests 21.string.append and 21.string.replace.
+#     Then it will run the time_get example, followed by running tests
+#     for the de_DE.ISO-8859-15 locale, then run the two tests it built
+#     and, finally, execute the install target with 'install' as the
+#     installation directory.
+#     
+#
+########################################################################
+
+##########
+# global constants
+
+# date format used to compute real time elapsed between stages
+DATEFMT="((((((%Y*366)+(1%j-100)*24)+(1%H-100)*60)+(1%M-100))*60)+(1%S-100))"
+
+# the name of the top-level source directory (TOPDIR)
+TOPDIR=`pwd | sed -e "s/\//\\\\\\\\\\\//g"` #Mangle path for sed usage
+
+# script to replace the name of the top-level source and builr directories
+# with the respective symbols for brevity
+TRANS="s/${TOPDIR}\/build/\\\$(BUILDDIR)/g;s/${TOPDIR}/\\\$(TOPDIR)/g"
+
+
+# set the TMPDIR variable if not set
+[ -z $TMPDIR ] && TMPDIR=$TMP
+[ -z $TMPDIR ] && TMPDIR=/tmp
+
+##########
+# global variables
+
+# by default (unless otherwise specified on the command line) build
+# and run all examples, locales, tests, and utilities
+build_examples="*"
+build_locales="*"
+build_rwtest="*"
+build_tests="*"
+build_utils="*"
+
+run_examples="*"
+run_locales="*"
+run_rwtest="*"
+run_tests="*"
+
+# script's own temporary directory
+tmpdir=$TMPDIR/stdcxx-tmp.$$
+
+
+##########
+# write_times(): writes the amount of real, user, and system time since
+# the last call, or the date and time if this is the first call
+write_times()
+{
+    if [ -z $startsec ]; then
+        echo; echo "### date:"
+        date
+    else
+        elapsed="`date +$DATEFMT`-$startsec"
+
+        # compute the minutes and seconds elapsed of real time since
+        # the last call to the function
+        real_min=$((elapsed))
+        real_min=$((real_min / 60))
+
+        real_sec=$((elapsed))
+        real_sec=$((real_sec % 60))
+
+        # display the real, user, and system times since the last call
+        echo; echo "### real, user, system time ($1):"
+        echo "${real_min}m${real_sec}s"
+        times
+    fi
+
+    # set the new start timestamp
+    startsec=`date +$DATEFMT`
+}
+
+
+##########
+# make_stage(): executes a stage of the build process, reports real,
+# user, and system times, and processes errors
+make_stage()
+{
+    stagedir=$1
+    failstate=$2
+    stageargs=$3
+
+    # remove the longest prefix matching the pattern "*/"
+    stagename="${stagedir##*/}"
+
+    if [ "$failstate" = "" ]; then
+        keep_going="-k"
+    else
+        keep_going=""
+    fi
+
+    if [ "$stagename" = "runall" ]; then
+        runlog="$TMPDIR/run.$$.log"
+        log=$runlog
+    else
+        buildlog="$TMPDIR/build.$$.log"
+        log=$buildlog
+    fi
+
+    echo "### $MAKE $keep_going $stagedir $stageargs $MAKEVARS 2>&1 | sed -e "${TRANS}"
| tee $buildlog:"
+
+    (   # start a subshell to measure user and system times
+        # of the subshell commands only
+        export TMPDIR=$tmpdir
+
+          $MAKE $keep_going $stagedir $stageargs $MAKEVARS 2>&1 \
+        | sed -e "${TRANS}" | tee $buildlog
+
+        # save the status of the first command in the pipeline
+        # and pass it to the parent shell after writing the real,
+        # user, and system times for the subshell and its children
+        status=${PIPESTATUS[0]}
+
+        write_times $stagename
+
+        exit $status
+    )
+
+    status=$?
+
+    if [ -r "$runlog" ]; then
+        # Parse runall results
+        $AWK -f parse_runlog.awk $runlog >>${OUTFILE}
+
+        rm $runlog
+    elif [ -r "$buildlog" ]; then
+        # count warnings and errors in the stage
+        warnings=`grep -i "warning" $buildlog | wc -l`
+        errors=`grep -i "error" $buildlog | wc -l`
+
+        diags=": $warnings warnings and $errors errors,"
+
+        rm $buildlog
+    fi
+
+    if [ $status -ne 0 ]; then
+        if [ "$failstate" = "F" ]; then
+          echo "### stage $stagename${diags} exiting with status $status"
+
+          cat <<EOF >> ${OUTFILE}
+state=F
+warnings=0
+examples.run=0
+examples.good=0
+tests.run=0
+tests.good=0
+locales.run=0
+locales.good=0
+utils.run=0
+utils.good=0
+EOF
+          exit $status
+      elif [ "$failstate" != "" ]; then
+          # if failstate is specified and the exit status is non-zero
+          # write out the failstate and exit immediately with an error
+          echo "state=$failstate" >> ${OUTFILE}
+
+          echo "### stage $stagename${diags} exiting with status 1"
+          exit 1
+      fi
+    fi
+
+    echo "### stage $stagename${diags} continuing with status $status"
+    echo
+
+    return $status
+}
+
+##########
+# main body of script
+
+echo "### running $0 $* [$#]"
+
+# process command line options
+while getopts ":nv:e:l:o:t:B:C:E:L:M:P:T:" opt_name; do
+
+    echo "$opt_name:$OPTARG"
+
+    case $opt_name in
+        # options with no arguments 
+
+        n)  # avoid cleaning up temporary files
+            no_clean=1
+            ;;
+
+        v)  # output all components (including passing ones)
+            verbose=1
+            ;;
+
+        # options with arguments 
+
+        e)  # argument is a list of examples to build
+            build_examples="$OPTARG"
+            ;;
+
+        l)  # argument is a list of locales to build
+            build_locales="$OPTARG"
+            ;;
+
+        o)  # argument is the name of output file (stdout by default)
+            outfile=$OPTARG
+            ;;
+
+        t)  # argument is a list of tests to build
+            build_tests="$OPTARG"
+            ;;
+
+        u)  # argument is a list of utilities to process
+            build_utils="$OPTARG"
+            ;;
+
+        B)  # argument is the value of the BUILDTYPE variable
+            MAKEVARS="$MAKEVARS BUILDTYPE=$OPTARG"
+            ;;
+
+        C)  # argument is the value of the CONFIG file name
+            MAKEVARS="$MAKEVARS CONFIG=$OPTARG"
+            ;;
+
+        E)  # argument is a list of examples to run
+            run_examples="$OPTARG"
+            ;;
+
+        L)  # argument is a space-separated list of locales
+            MAKEVARS="$MAKEVARS LOCALES=\"$OPTARG\""
+            run_locales="$OPTARG"
+            ;;
+
+        M)  # argument is the value of the BUILDMODE variable
+            MAKEVARS="$MAKEVARS BUILDMODE=$OPTARG"
+            ;;
+
+        P)  # argument is the value of the PREFIX variable
+            MAKEVARS="$MAKEVARS PREFIX=$OPTARG"
+            prefix=$OPTARG
+            ;;
+
+        T)  # argument is a list of tests to build
+            run_tests="$OPTARG"
+            ;;
+
+        *) echo "$myname: unknown option : -$opt_name" >&2;
+           exit 1;;
+    esac;
+done
+
+# default to running the same set of components (examples, locales,
+# and tests) as those specified to be built
+if [ "$run_examples" = "*" ]; then
+    run_examples="$build_examples"
+fi
+
+if [ "$run_locales" = "*" ]; then
+    run_locales="$build_locales"
+fi
+
+if [ "$run_tests" = "*" ]; then
+    run_tests="$build_tests"
+fi
+
+
+# remove command line options and their arguments from the command line
+shift $(($OPTIND - 1))
+
+
+# Try to make certain we clean up the temp directory
+# This is an ugly workaround for an HPUX 11.23 glitch we haven't managed
+# to reproduce in manual testing.
+trap 'rm -rf $tmpdir' EXIT INT QUIT TERM
+
+mkdir $tmpdir
+
+
+# echo command line arguments
+echo "### running $0 $* [$#]"
+
+# start by writing out information about the host to stdout
+echo; echo "### uname -a:"
+uname -a
+
+osname=`uname -s`
+
+if [ $# -gt 1 ]; then
+    ### BEGIN HACK for eccp-3.9 and acc-3.76 compilers
+
+    case `awk -F= '"hpp.compiler"==$1 {print $2}' $2` in
+    ("eccp-3.9")
+        osdir="<UNKNOWN-OS>"
+        case "$osname" in
+	(Linux)
+            osdir=eccp-3.9-linux-x86
+            ;;
+
+            (SunOS)
+            export PATH=/usr/ccs/bin:$PATH
+            osdir=eccp-3.9-solaris-sparcv9
+            ;;
+        esac
+
+        echo "### Injecting EDG 3.9 environment"
+        export EDG_BASE=/nfs/devco/ablack/compilers/$osdir
+        export PATH=$EDG_BASE/bin:$PATH
+        ;;
+
+    ("acc-3.76")
+        echo "### Injecting aCC 3.76 environment"
+        export ACCROOT=/nfs/devco/ablack/compilers/acc-3.76-hpux-parisc2
+        export PATH=$ACCROOT:$PATH
+        export _CXXOPTS="+W2193 +W2261 +W2340 +W2401 +W2487 +W4263 +W4264 +W4297"
+    ;;
+    esac
+
+    ### END HACK
+fi
+
+AWK=awk
+case "$osname" in
+    (AIX)
+    # 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
+    ;;
+
+    (HP-UX)
+    # grep the system log for the amount of physical memory
+    echo; echo "### grep Physical /var/adm/syslog/syslog.log:"
+    grep Physical /var/adm/syslog/syslog.log
+    ;;
+
+    (Linux)
+    # output the contents of the /etc/<distro>-release file
+    # to identify the Linux distribution
+    echo; echo "### cat " /etc/*-release ":"
+    cat /etc/*-release
+
+    # output the amount of installed physical memory and swap space
+    echo; echo "### free -o:"
+    free -o
+
+    # output information about installed processors
+    echo; echo "### cat /proc/cpuinfo:"
+    cat /proc/cpuinfo
+    ;;
+
+    (SunOS)
+    # use POSIX awk (nawk) rather than Solaris awk
+    # using nawk rather than /usr/xpg4/bin/awk as the later has a bad bug
+    AWK=nawk
+
+    # output the amount of installed physical memory
+    echo; echo "### prtconf | grep Memory:"
+    /usr/sbin/prtconf | grep Memory
+
+    # output information about installed processors
+    echo; echo "### /usr/sbin/psrinfo -v:"
+    /usr/sbin/psrinfo -v
+    ;;
+
+esac
+
+# output the amount of installed, available, and used disk space
+# in all mounted filesystems
+echo; echo "### df -k:"
+df -k
+
+# echo today's date
+write_times
+
+
+# echo environment to stdout for refernce
+echo; echo "### env:"
+env
+
+echo
+
+#Set up constants (BSFNAME, OUTFILE)
+BSFNAME=$2
+OUTFILE=results.xml
+
+MAKE=gmake
+if [ "CYGWIN_NT-5.1" == "$osname" ]; then
+    # The cygwin .bashrc changes the working directory to ~, so we need to 
+    # manually reset our working directory to the buildspace.
+    cd `cygpath -u \`$AWK -F= '"batman.workingdir"==$1 {print $2}' ${BSFNAME}\``
+    MAKE=make
+fi
+
+#Start our output file
+echo "result.file.type=stdcxx-short" > ${OUTFILE}
+
+# Hack due to jar eating x bits, so we set them ourself.
+chmod 0744 etc/config/*.sh etc/config/src/*.sh
+
+if [ -r "$BSFNAME" ]; then
+    # parse BSF file
+    echo; echo "### Parsing" $BSFNAME
+
+    MAKEVARS=`$AWK -f build_stdcxx.awk ${BSFNAME}`
+    RET=$?
+    if [ 0 != ${RET} ]; then
+        echo "state=C" >> ${OUTFILE}
+        exit 1
+    fi
+fi
+
+##########
+# Create build directory, set state to 'C' on failure
+make_stage "builddir" "C"
+
+# Configure build directory, set state to 'C' on failure
+make_stage "config" "C"
+
+# Build library, set state to 'F' on failure
+make_stage "-Cbuild/lib" "F"
+
+# show the library and its size
+echo; echo "### ls -l build/lib/lib*"
+ls -l build/lib/lib*
+
+echo
+
+
+# State is now 'L' or better
+
+
+# Build examples, ignore errors
+if [ "$build_examples" != "" ]; then
+    if [ "$build_examples" = "*" ]; then
+        unset list
+    else
+        list="$build_examples"
+    fi
+    make_stage "-Cbuild/examples" "" "$list"
+fi
+
+
+# Build utilities, save return code for later
+if [ "$build_utils" != "" ]; then
+    if [ "$build_utils" = "*" ]; then
+        unset list
+    else
+        list="$build_utils"
+    fi
+   
+    make_stage "-Cbuild/bin" "" "$list"
+    utils_status=$?
+else
+    utils_status=1
+fi
+
+
+# Build rwtest library, save return code for later
+if [ "$build_rwtest" != "" ]; then
+    if [ "$build_rwtest" = "*" ]; then
+        unset list
+    else
+        list="$build_rwtest"
+    fi
+    make_stage "-Cbuild/rwtest" "" "$list"
+    rwtest_status=$?
+else
+    rwtest_status=1
+fi
+
+
+##########
+# Create a counter so we can keep track of the number of 'good' utilities.
+# While not the most accurate, we're calling a utility good if it exists and
+# is executable.  The utilities we check are the exec, locale and localedef, 
+# all of which reside in the build/bin subdirectory and were built above.
+# The reason this definition isn't accurate is because it doesn't tell us if
+# the utility is behaving correctly.  However, to make such checks would be
+# more difficult.
+UTILS=0
+
+# We want to check that the exec utility is good prior to using it via
+# the $MAKE runall target
+if [ -x "build/bin/exec" ]; then
+    if [ 0 == ${rwtest_status} ]; then
+        echo "state=T" >> ${OUTFILE}
+
+        # Build tests only if rwtest built, ignore errors
+
+        if [ "$build_tests" = "*" ]; then
+            unset list
+        else
+            list="$build_tests"
+        fi
+
+        make_stage "-Cbuild/tests" "" "$list"
+    else
+        echo "state=E" >> ${OUTFILE}
+
+        if [ 0 == ${utils_status} ]; then
+            utils_status=${rwtest_status}
+        fi
+    fi
+    #Record it as good
+    UTILS=`expr ${UTILS} + 1`
+
+    # Run successfully built executables, ignore errors
+    if [    "$run_examples" = "*" \
+         -a "$run_locales" = "*" \
+         -a "$run_tests" = "*" ]; then
+        make_stage "runall"
+    else
+        if [ "$run_examples" != "" ]; then
+            if [ "$run_examples" = "*" ]; then
+                unset list
+            else
+                list="$run_examples"
+            fi
+
+            make_stage "-Cbuild/examples" "" "runall $list"
+        fi
+
+        if [ "$run_locales" != "" ]; then
+            if [ "$run_locales" = "*" ]; then
+                unset list
+            else
+                list="$run_locales"
+            fi
+
+            make_stage "-Cbuild/bin" "" "runall $list"
+        fi
+
+        if [ "$run_tests" != "" ]; then
+            if [ "$run_tests" = "*" ]; then
+                unset list
+            else
+                list="$run_tests"
+            fi
+
+            make_stage "-Cbuild/tests" "" "runall $list"
+        fi
+    fi    
+else
+    echo "state=L" >> ${OUTFILE}
+fi
+
+if [ -x "build/bin/locale" ]; then
+    UTILS=`expr ${UTILS} + 1`
+fi
+
+if [ -x "build/bin/localedef" ]; then
+    UTILS=`expr ${UTILS} + 1`
+fi
+
+echo "utils.run=3" >> ${OUTFILE}
+echo "utils.good="${UTILS} >> ${OUTFILE}
+
+
+if [ "$prefix" != "" ]; then
+    make_stage "-Cbuild" "" "install"
+fi
+
+
+# write out the size of the buildspace and (when specified)
+# the installation directory BEFORE cleaning it up for reference
+echo; echo "### du -sk build build/* $prefix"
+du -sk build build/* $prefix
+
+
+# Clean up most of what we built.  We don't want to clean/realclean include, 
+# as clean deletes the config.log, and realclean deletes the config.h.
+# The top level realclean target affects the lib, rwtest, bin, test, 
+# plumbhall, and example directories (via the .DEFAULT rule).
+echo; echo "### $MAKE realclean"
+$MAKE realclean
+
+# write out the size of the buildspace AFTER cleaning it up for reference
+echo; echo "### du -sk ./build/ ./build/*"
+du -sk ./build/ ./build/*
+
+# write the amount of real, user, and system time
+write_times "runall"
+
+# Pass the captured return code from make util/make rwtest back out
+exit ${utils_status}

Propchange: incubator/stdcxx/trunk/bin/buildntest
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/stdcxx/trunk/bin/buildntest
------------------------------------------------------------------------------
    svn:executable = *

Propchange: incubator/stdcxx/trunk/bin/buildntest
------------------------------------------------------------------------------
    svn:keywords = Id



Mime
View raw message