Ooops; lack of mk/confi.mk doesn't mean validate shouldn't run configure!
[ghc.git] / validate
1 #!/bin/sh
2
3 # Flags:
4 #   --no-clean:       don't make clean first, just carry on from
5 #                     a previous interrupted validation run
6 #   --testsuite-only: don't build the compiler, just run
7 #                     the test suite
8 #   --hpc:            build stage2 with -fhpc, and see how much of the
9 #                     compiler the test suite covers.
10 #                     2008-07-01: 63% slower than the default.
11 #                     HTML generated here: testsuite/hpc_output/hpc_index.html
12 #   --fast:           Default. Opposite to --slow.
13 #   --slow:           Build stage2 with -DDEBUG.
14 #                     2008-07-01: 14% slower than the default.
15
16 set -e
17
18 no_clean=0
19 testsuite_only=0
20 hpc=NO
21 slow=NO
22
23 while [ $# -gt 0 ]
24 do
25     case "$1" in
26     --no-clean)
27         no_clean=1
28         ;;
29     --testsuite-only)
30         testsuite_only=1
31         ;;
32     --hpc)
33         hpc=YES
34         ;;
35     --slow)
36         slow=YES
37         ;;
38     --fast)
39         slow=NO
40         ;;
41     *)
42         echo "Bad argument: $1" >&2
43         exit 1;;
44     esac
45     shift
46 done
47
48 if [ "$CPUS" = "" ]; then
49     threads=2
50 else
51     threads=`expr $CPUS + 1`
52 fi
53
54 if [ $testsuite_only -eq 0 ]; then
55
56 if [ $no_clean -eq 0 ]; then
57     if [ -f mk/config.mk ]; then
58         make distclean
59     fi
60
61     case $OSTYPE in
62         cygwin|msys) config_args=--build=i386-unknown-mingw32
63             if [ -f c:/mingw/bin/gcc.exe ]
64             then
65                 config_args="$config_args --with-gcc=c:/mingw/bin/gcc"
66             fi
67             ;;
68     esac
69
70     sh boot
71     ./configure "--prefix=`pwd`/inst" $config_args
72 fi
73
74 thisdir=`utils/pwd/pwd forwardslash`
75
76 make Validating=YES -j$threads ValidateHpc=$hpc ValidateSlow=$slow
77 fi # testsuite-only
78
79 if [ "$hpc" = YES ]
80 then
81     # XXX With threads we'd need to give a different tix file to each thread
82     #     and then sum them up at the end
83     threads=1
84     HPCTIXFILE=$thisdir/testsuite/hpc_output/ghc.tix
85     export HPCTIXFILE
86     rm -f $HPCTIXFILE
87 fi
88
89 make Validating=YES -C testsuite/tests/ghc-regress fast stage=2 CLEANUP=1 THREADS=$threads 2>&1 | tee testlog
90
91 if [ "$hpc" = YES ]
92 then
93     utils/hpc/hpc markup --hpcdir=. --srcdir=compiler --srcdir=testsuite/hpc_output --destdir=testsuite/hpc_output testsuite/hpc_output/ghc.tix
94 fi
95
96 echo "-------------------------------------------------------------------"
97 if
98     grep '\<0 caused framework failures' testlog >/dev/null 2>/dev/null &&
99     grep '\<0 unexpected passes' testlog >/dev/null 2>/dev/null &&
100     grep '\<0 unexpected failures' testlog >/dev/null 2>/dev/null ; then
101     if [ $testsuite_only -eq 0 ] && [ $no_clean -eq 0 ]
102     then
103         cat <<EOF
104 Congratulations!  This tree has passed minimal testing.
105
106 NOTE: If you have made changes that may cause failures not tested for by
107 the minimal testing procedure, please do further testing as necessary.
108
109 When you are satisfied that you haven't broken anything, go ahead and
110 push/send your patches.
111 EOF
112     else
113         cat <<EOF
114 I didn't find any problems, but this wasn't a complete validate run,
115 so be careful!
116
117 NOTE: If you have made changes that may cause failures not tested for by
118 the minimal testing procedure, please do further testing as necessary.
119 EOF
120    fi
121 else
122     cat <<EOF
123 Oops!  Looks like you have some unexpected test results or framework failures.
124 Please fix them before pushing/sending patches.
125 EOF
126 fi
127 echo "-------------------------------------------------------------------"
128