validate 3.73 KB
Newer Older
1
2
#!/bin/sh

3
# Flags:
Ian Lynagh's avatar
Ian Lynagh committed
4
5
6
7
#   --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
8
#   --hpc:            build stage2 with -fhpc, and see how much of the
9
10
#                     compiler the test suite covers.
#                     2008-07-01: 63% slower than the default.
11
#                     HTML generated here: testsuite/hpc_output/hpc_index.html
12
13
14
#   --fast:           Default. Opposite to --slow.
#   --slow:           Build stage2 with -DDEBUG.
#                     2008-07-01: 14% slower than the default.
15

16
set -e
17

18
19
no_clean=0
testsuite_only=0
20
21
hpc=NO
slow=NO
22
23
24
25
26
27
28
29
30
31

while [ $# -gt 0 ]
do
    case "$1" in
    --no-clean)
        no_clean=1
        ;;
    --testsuite-only)
        testsuite_only=1
        ;;
32
    --hpc)
33
34
35
36
37
38
39
        hpc=YES
        ;;
    --slow)
        slow=YES
        ;;
    --fast)
        slow=NO
40
        ;;
41
42
43
44
45
46
47
    *)
        echo "Bad argument: $1" >&2
        exit 1;;
    esac
    shift
done

48
49
50
51
52
53
if [ "$THREADS" = "" ]; then
    if [ "$CPUS" = "" ]; then
        threads=2
    else
        threads=$(($CPUS + 1)) # `expr $CPUS + 1`
    fi
54
else
55
    threads="$THREADS"
56
57
fi

58
59
if [ $testsuite_only -eq 0 ]; then

60
if [ $no_clean -eq 0 ]; then
61
    make maintainer-clean NO_CLEAN_GMP=YES
62

Ian Lynagh's avatar
Ian Lynagh committed
63
64
65
66
67
    INSTDIR=`pwd`/inst
    if [ "$OSTYPE" = "cygwin" ]
    then
        INSTDIR=`cygpath -m "$INSTDIR"`
    fi
Simon Marlow's avatar
Simon Marlow committed
68

69
    /usr/bin/perl -w boot
Ian Lynagh's avatar
Ian Lynagh committed
70
    ./configure --prefix="$INSTDIR" $config_args
Simon Marlow's avatar
Simon Marlow committed
71
72
fi

Ian Lynagh's avatar
Ian Lynagh committed
73
thisdir=`utils/ghc-pwd/ghc-pwd`
74

75
76
77
echo "Validating=YES" > mk/are-validating.mk

make -j$threads ValidateHpc=$hpc ValidateSlow=$slow
78
79

make binary-dist-prep
Ian Lynagh's avatar
Ian Lynagh committed
80
make test_bindist TEST_PREP=YES
81

82
fi # testsuite-only
83

84
if [ "$hpc" = YES ]
85
86
87
88
89
90
91
92
93
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

94
make -C testsuite/tests/ghc-regress fast stage=2 CLEANUP=1 BINDIST=YES THREADS=$threads 2>&1 | tee testlog
95

96
if [ "$hpc" = YES ]
97
98
99
100
then
    utils/hpc/hpc markup --hpcdir=. --srcdir=compiler --srcdir=testsuite/hpc_output --destdir=testsuite/hpc_output testsuite/hpc_output/ghc.tix
fi

101
echo "-------------------------------------------------------------------"
102
103
104
105
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
106
107
108
109
110
111
112
113
114
115
116
    if [ $testsuite_only -eq 0 ] && [ $no_clean -eq 0 ]
    then
        cat <<EOF
Congratulations!  This tree has passed minimal testing.

NOTE: If you have made changes that may cause failures not tested for by
the minimal testing procedure, please do further testing as necessary.

When you are satisfied that you haven't broken anything, go ahead and
push/send your patches.
EOF
117
118
119
120
121
122
123
124
        if grep -q "^[^#]" mk/validate.mk
        then
            cat <<EOF

WARNING: You seem to have things set in mk/validate.mk. Please check
that it is OK before pushing.
EOF
        fi
125
126
127
        cat <<EOF
-------------------------------------------------------------------
EOF
128
129
130
131
132
133
134
    else
        cat <<EOF
I didn't find any problems, but this wasn't a complete validate run,
so be careful!

NOTE: If you have made changes that may cause failures not tested for by
the minimal testing procedure, please do further testing as necessary.
135
-------------------------------------------------------------------
136
137
EOF
   fi
138
else
139
140
141
    cat <<EOF
Oops!  Looks like you have some unexpected test results or framework failures.
Please fix them before pushing/sending patches.
142
-------------------------------------------------------------------
143
EOF
144
    exit 1
145
fi
146