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