Validate now cleans regardless of whether mk/config.mk exists
[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=$(($CPUS + 1)) # `expr $CPUS + 1`
52 fi
53
54 if [ $testsuite_only -eq 0 ]; then
55
56 if [ $no_clean -eq 0 ]; then
57     make maintainer-clean NO_CLEAN_GMP=YES
58
59     INSTDIR=`pwd`/inst
60     if [ "$OSTYPE" = "cygwin" ]
61     then
62         INSTDIR=`cygpath -m "$INSTDIR"`
63     fi
64     case $OSTYPE in
65         cygwin|msys) config_args=--build=i386-unknown-mingw32
66             if [ -f c:/mingw/bin/gcc.exe ]
67             then
68                 config_args="$config_args --with-gcc=c:/mingw/bin/gcc"
69             fi
70             if [ -f c:/mingw/bin/ld.exe ]
71             then
72                 config_args="$config_args --with-ld=c:/mingw/bin/ld"
73             fi
74             ;;
75     esac
76
77     sh boot
78     ./configure --prefix="$INSTDIR" $config_args
79 fi
80
81 thisdir=`utils/ghc-pwd/ghc-pwd`
82
83 echo "Validating=YES" > mk/are-validating.mk
84
85 make -j$threads ValidateHpc=$hpc ValidateSlow=$slow
86 fi # testsuite-only
87
88 if [ "$hpc" = YES ]
89 then
90     # XXX With threads we'd need to give a different tix file to each thread
91     #     and then sum them up at the end
92     threads=1
93     HPCTIXFILE=$thisdir/testsuite/hpc_output/ghc.tix
94     export HPCTIXFILE
95     rm -f $HPCTIXFILE
96 fi
97
98 make -C testsuite/tests/ghc-regress fast stage=2 CLEANUP=1 THREADS=$threads 2>&1 | tee testlog
99
100 if [ "$hpc" = YES ]
101 then
102     utils/hpc/hpc markup --hpcdir=. --srcdir=compiler --srcdir=testsuite/hpc_output --destdir=testsuite/hpc_output testsuite/hpc_output/ghc.tix
103 fi
104
105 echo "-------------------------------------------------------------------"
106 if
107     grep '\<0 caused framework failures' testlog >/dev/null 2>/dev/null &&
108     grep '\<0 unexpected passes' testlog >/dev/null 2>/dev/null &&
109     grep '\<0 unexpected failures' testlog >/dev/null 2>/dev/null ; then
110     if [ $testsuite_only -eq 0 ] && [ $no_clean -eq 0 ]
111     then
112         cat <<EOF
113 Congratulations!  This tree has passed minimal testing.
114
115 NOTE: If you have made changes that may cause failures not tested for by
116 the minimal testing procedure, please do further testing as necessary.
117
118 When you are satisfied that you haven't broken anything, go ahead and
119 push/send your patches.
120 EOF
121         if grep -q "^[^#]" mk/validate.mk
122         then
123             cat <<EOF
124
125 WARNING: You seem to have things set in mk/validate.mk. Please check
126 that it is OK before pushing.
127 EOF
128         fi
129         cat <<EOF
130 -------------------------------------------------------------------
131 EOF
132     else
133         cat <<EOF
134 I didn't find any problems, but this wasn't a complete validate run,
135 so be careful!
136
137 NOTE: If you have made changes that may cause failures not tested for by
138 the minimal testing procedure, please do further testing as necessary.
139 -------------------------------------------------------------------
140 EOF
141    fi
142 else
143     cat <<EOF
144 Oops!  Looks like you have some unexpected test results or framework failures.
145 Please fix them before pushing/sending patches.
146 -------------------------------------------------------------------
147 EOF
148     exit 1
149 fi
150