#!/bin/sh # Flags: # --no-clean: don't make clean first, just carry on from # a previous interrupted validation run # --testsuite-only: don't build the compiler, just run # the test suite # --hpc: build stage2 with -fhpc, and see how much of the # compiler the test suite covers. # 2008-07-01: 63% slower than the default. # HTML generated here: testsuite/hpc_output/hpc_index.html # --fast: Default. Opposite to --slow. # --slow: Build stage2 with -DDEBUG. # 2008-07-01: 14% slower than the default. set -e no_clean=0 testsuite_only=0 hpc=NO slow=NO while [ $# -gt 0 ] do case "$1" in --no-clean) no_clean=1 ;; --testsuite-only) testsuite_only=1 ;; --hpc) hpc=YES ;; --slow) slow=YES ;; --fast) slow=NO ;; *) echo "Bad argument: $1" >&2 exit 1;; esac shift done if [ "$CPUS" = "" ]; then threads=2 else threads=$(($CPUS + 1)) # `expr $CPUS + 1` fi if [ $testsuite_only -eq 0 ]; then if [ $no_clean -eq 0 ]; then if [ -f mk/config.mk ]; then make maintainer-clean fi INSTDIR=`pwd`/inst if [ "$OSTYPE" = "cygwin" ] then INSTDIR=`cygpath -m "$INSTDIR"` fi case $OSTYPE in cygwin|msys) config_args=--build=i386-unknown-mingw32 if [ -f c:/mingw/bin/gcc.exe ] then config_args="$config_args --with-gcc=c:/mingw/bin/gcc" fi if [ -f c:/mingw/bin/ld.exe ] then config_args="$config_args --with-ld=c:/mingw/bin/ld" fi ;; esac sh boot ./configure --prefix="$INSTDIR" $config_args fi thisdir=`utils/ghc-pwd/ghc-pwd` echo "Validating=YES" > mk/are-validating.mk make -j$threads ValidateHpc=$hpc ValidateSlow=$slow fi # testsuite-only if [ "$hpc" = YES ] then # XXX With threads we'd need to give a different tix file to each thread # and then sum them up at the end threads=1 HPCTIXFILE=$thisdir/testsuite/hpc_output/ghc.tix export HPCTIXFILE rm -f $HPCTIXFILE fi make -C testsuite/tests/ghc-regress fast stage=2 CLEANUP=1 THREADS=$threads 2>&1 | tee testlog if [ "$hpc" = YES ] then utils/hpc/hpc markup --hpcdir=. --srcdir=compiler --srcdir=testsuite/hpc_output --destdir=testsuite/hpc_output testsuite/hpc_output/ghc.tix fi echo "-------------------------------------------------------------------" if grep '\<0 caused framework failures' testlog >/dev/null 2>/dev/null && grep '\<0 unexpected passes' testlog >/dev/null 2>/dev/null && grep '\<0 unexpected failures' testlog >/dev/null 2>/dev/null ; then if [ $testsuite_only -eq 0 ] && [ $no_clean -eq 0 ] then cat <