Don't build or test dph by default
[ghc.git] / validate
1 #!/bin/sh
2
3 set -e
4
5 show_help () {
6     cat <<EOF
7 Usage: $0 [FLAGS]...
8
9 Validate GHC source tree against testsuite; see
10 http://ghc.haskell.org/trac/ghc/wiki/TestingPatches for more
11 information.
12
13 Flags:
14   --no-clean        don't make clean first, just carry on from
15                     a previous interrupted validation run
16   --testsuite-only  don't build the compiler, just run the test suite
17   --hpc             build stage2 with -fhpc, and see how much of the
18                     compiler the test suite covers.
19                     2008-07-01: 63% slower than the default.
20                     HTML generated here: testsuite/hpc_output/hpc_index.html
21   --normal          Default settings
22   --fast            Omit dyn way, omit binary distribution
23   --slow            Build stage2 with -DDEBUG.
24                     2008-07-01: 14% slower than the default.
25   --dph:            Also build libraries/dph and run associated tests.
26   --help            shows this usage help.
27
28   Set environment variable 'CPUS' to number of cores, to exploit
29   multiple cpu cores, e.g.
30
31     CPUS=8 ./validate
32
33 EOF
34 }
35
36 no_clean=0
37 testsuite_only=0
38 hpc=NO
39 speed=NORMAL
40 use_dph=0
41
42 while [ $# -gt 0 ]
43 do
44     case "$1" in
45     --no-clean)
46         no_clean=1
47         ;;
48     --testsuite-only)
49         testsuite_only=1
50         ;;
51     --hpc)
52         hpc=YES
53         ;;
54     --slow)
55         speed=SLOW
56         ;;
57     --fast)
58         speed=FAST
59         ;;
60     --normal)
61         speed=NORMAL
62         ;;
63     --dph)
64         use_dph=1
65         ;;
66     --help)
67         show_help
68         exit 0;;
69     *)
70         echo "$0: unrecognized argument '$1'" >&2
71         echo "Try '$0 --help' for more information." >&2
72         exit 1;;
73     esac
74     shift
75 done
76
77 check_packages () {
78     echo "== Start $1 package check"
79     if [ "$bindistdir" = "" ]
80     then
81         inplace/bin/ghc-pkg check -v
82     else
83         "$bindistdir"/bin/ghc-pkg check -v
84     fi
85     echo "== End $1 package check"
86 }
87
88 if ! [ -d testsuite ]
89 then
90     echo 'Could not find the testsuite for validation' >&2
91     exit 1
92 fi
93
94 if [ "$THREADS" = "" ]; then
95     if [ "$CPUS" = "" ]; then
96         threads=2
97     else
98         threads=$(($CPUS + 1)) # `expr $CPUS + 1`
99     fi
100 else
101     threads="$THREADS"
102 fi
103
104 if type gmake > /dev/null 2> /dev/null
105 then
106     make="gmake"
107 else
108     make="make"
109 fi
110
111 if [ $testsuite_only -eq 0 ]; then
112
113 if [ $no_clean -eq 0 ]; then
114     $make maintainer-clean NO_CLEAN_GMP=YES
115
116     INSTDIR=`pwd`/inst
117     if [ "$OSTYPE" = "cygwin" ]
118     then
119         INSTDIR=`cygpath -m "$INSTDIR"`
120     fi
121
122     if [ $use_dph -eq 1 ]; then
123         /usr/bin/perl -w boot --validate --required-tag=dph
124     else
125         /usr/bin/perl -w boot --validate
126     fi
127     ./configure --prefix="$INSTDIR" $config_args
128 fi
129
130 thisdir=`utils/ghc-pwd/dist-boot/ghc-pwd`
131
132 echo "Validating=YES"       >  mk/are-validating.mk
133 echo "ValidateSpeed=$speed" >> mk/are-validating.mk
134 echo "ValidateHpc=$hpc"     >> mk/are-validating.mk
135
136 if [ $use_dph -eq 1 ]; then
137     echo "BUILD_DPH=YES"    >> mk/are-validating.mk
138 else
139     echo "BUILD_DPH=NO"     >> mk/are-validating.mk
140 fi
141
142 $make -j$threads
143 # For a "debug make", add "--debug=b --debug=m"
144
145 check_packages post-build
146
147 # -----------------------------------------------------------------------------
148 # Build and test a binary distribution (not --fast)
149
150 if [ $speed != "FAST" ]; then
151
152     $make binary-dist-prep
153     $make test_bindist TEST_PREP=YES
154
155     #
156     # Install the xhtml package into the bindist.
157     # This verifies that we can install a package into the
158     # bindist with Cabal.
159     #
160     bindistdir="bindisttest/install   dir"
161
162     check_packages post-install
163
164     $make validate_build_xhtml BINDIST_PREFIX="$thisdir/$bindistdir"
165
166     check_packages post-xhtml
167 fi
168
169 fi # testsuite-only
170
171 # -----------------------------------------------------------------------------
172 # Run the testsuite
173
174 if [ "$hpc" = YES ]
175 then
176     # XXX With threads we'd need to give a different tix file to each thread
177     #     and then sum them up at the end
178     threads=1
179     HPCTIXFILE=$thisdir/testsuite/hpc_output/ghc.tix
180     export HPCTIXFILE
181     rm -f $HPCTIXFILE
182 fi
183
184 case "$speed" in
185 SLOW)
186         MAKE_TEST_TARGET=fulltest
187         BINDIST="BINDIST=YES"
188         ;;
189 NORMAL)
190         MAKE_TEST_TARGET=test
191         BINDIST="BINDIST=YES"
192         ;;
193 FAST)
194         MAKE_TEST_TARGET=test
195         BINDIST="BINDIST=NO"
196         ;;
197 esac
198
199 $make $MAKE_TEST_TARGET stage=2 $BINDIST THREADS=$threads 2>&1 | tee testlog
200
201 check_packages post-testsuite
202
203 if [ "$hpc" = YES ]
204 then
205     utils/hpc/hpc markup --hpcdir=. --srcdir=compiler --srcdir=testsuite/hpc_output --destdir=testsuite/hpc_output testsuite/hpc_output/ghc.tix
206 fi
207
208 echo "-------------------------------------------------------------------"
209 if
210     grep '\<0 caused framework failures' testlog >/dev/null 2>/dev/null &&
211     grep '\<0 unexpected passes' testlog >/dev/null 2>/dev/null &&
212     grep '\<0 unexpected failures' testlog >/dev/null 2>/dev/null &&
213     ! grep 'Some files are written by multiple tests' testlog >/dev/null 2>/dev/null ; then
214     if [ $testsuite_only -eq 0 ] && [ $no_clean -eq 0 ]
215     then
216         cat <<EOF
217 Congratulations!  This tree has passed minimal testing.
218
219 NOTE: If you have made changes that may cause failures not tested for by
220 the minimal testing procedure, please do further testing as necessary.
221
222 When you are satisfied that you haven't broken anything, go ahead and
223 push/send your patches.
224 EOF
225         if [ -f mk/validate.mk ] && grep -q "^[^#]" mk/validate.mk
226         then
227             cat <<EOF
228
229 WARNING: You seem to have things set in mk/validate.mk. Please check
230 that it is OK before pushing.
231 EOF
232         fi
233         cat <<EOF
234 -------------------------------------------------------------------
235 EOF
236     else
237         cat <<EOF
238 I didn't find any problems, but this wasn't a complete validate run,
239 so be careful!
240
241 NOTE: If you have made changes that may cause failures not tested for by
242 the minimal testing procedure, please do further testing as necessary.
243 -------------------------------------------------------------------
244 EOF
245    fi
246 else
247     cat <<EOF
248 Oops!  Looks like you have some unexpected test results or framework failures.
249 Please fix them before pushing/sending patches.
250 -------------------------------------------------------------------
251 EOF
252     exit 1
253 fi
254