Fix closeOverKinds to use unclosed sets internally
[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   --build-only      don't test the compiler, just build it
18   --hpc             build stage2 with -fhpc, and see how much of the
19                     compiler the test suite covers.
20                     2008-07-01: 63% slower than the default.
21                     HTML generated here: testsuite/hpc_output/hpc_index.html
22   --fast            Omit binary distribution. Omit certain tests.
23   --slow            Build stage2 with -DDEBUG. Run tests for all WAYS,
24                     but skip those that call compiler_stats_num_field.
25                     2008-07-01: 14% slower than the default.
26   --dph             Also build libraries/dph and run associated tests.
27   --quiet           More pretty build log.
28                     See Note [Default build system verbosity].
29   --help            shows this usage help.
30
31   validate runs 'make -j\$THREADS', where by default THREADS is the number of
32   cpus your computer has +1. You can set the environment variable THREADS to
33   override this. For a sequential build you would for example use
34
35     THREADS=1 ./validate
36
37   You can set the 'config_args' environment variable to pass flags to
38   'configure'.
39
40   You can also use environment variables to pass extra options to the
41   testsuite. For example:
42
43     TEST='read001 read002' ./validate --testsuite-only --fast
44
45 EOF
46 }
47
48 no_clean=0
49 testsuite_only=0
50 build_only=0
51 hpc=NO
52 speed=NORMAL
53 use_dph=0
54 be_quiet=0
55 # Validate uses gzip compression for the binary distribution to avoid the rather
56 # heavy cost of xz, which is the typical default. The options are defined in
57 # mk/config.mk.in
58 tar_comp=gzip
59
60 while [ $# -gt 0 ]
61 do
62     case "$1" in
63     --no-clean)
64         no_clean=1
65         ;;
66     --testsuite-only)
67         testsuite_only=1
68         ;;
69     --build-only)
70         build_only=1
71         ;;
72     --hpc)
73         hpc=YES
74         ;;
75     --slow)
76         speed=SLOW
77         ;;
78     --fast)
79         speed=FAST
80         ;;
81     --normal) # for backward compat
82         speed=NORMAL
83         ;;
84     --no-dph) # for backward compat
85         use_dph=0
86         ;;
87     --dph)
88         use_dph=1
89         ;;
90     --quiet)
91         be_quiet=1
92         ;;
93     --help)
94         show_help
95         exit 0;;
96     *)
97         echo "$0: unrecognized argument '$1'" >&2
98         echo "Try '$0 --help' for more information." >&2
99         exit 1;;
100     esac
101     shift
102 done
103
104 check_packages () {
105     if [ "$bindistdir" = "" ]
106     then
107         ghc_pkg=inplace/bin/ghc-pkg
108     else
109         ghc_pkg="$bindistdir"/bin/ghc-pkg
110     fi
111
112     if [ $be_quiet -eq 1 ]
113     then
114         "$ghc_pkg" check
115     else
116         echo "== Start $1 package check"
117         "$ghc_pkg" check -v
118         echo "== End $1 package check"
119     fi
120 }
121
122 CPUS=`mk/detect-cpu-count.sh`
123
124 if ! [ -d testsuite ]
125 then
126     echo 'Could not find the testsuite for validation' >&2
127     exit 1
128 fi
129
130 if [ "$THREADS" = "" ]; then
131     threads=$(($CPUS + 1)) # `expr $CPUS + 1`
132 else
133     threads="$THREADS"
134 fi
135
136 echo "using THREADS=${threads}" >&2
137
138 if type gmake > /dev/null 2> /dev/null
139 then
140     make="gmake"
141 else
142     make="make"
143 fi
144
145 if [ $be_quiet -eq 1 ]; then
146     # See Note [Default build system verbosity].
147     make="$make -s"
148 fi
149
150 $make -C utils/checkUniques
151
152 if [ $testsuite_only -eq 0 ]; then
153
154 thisdir=`pwd`
155
156 if [ $no_clean -eq 0 ]; then
157     $make maintainer-clean
158
159     INSTDIR="$thisdir/inst"
160
161     if [ $use_dph -eq 1 ]; then
162         python3 ./boot --validate --required-tag=dph
163     else
164         python3 ./boot --validate
165     fi
166     ./configure --prefix="$INSTDIR" $config_args
167 fi
168
169 echo "Validating=YES"       >  mk/are-validating.mk
170 echo "ValidateSpeed=$speed" >> mk/are-validating.mk
171 echo "ValidateHpc=$hpc"     >> mk/are-validating.mk
172
173 # Note [Default build system verbosity].
174 #
175 # From https://ghc.haskell.org/trac/ghc/wiki/Design/BuildSystem:
176 #
177 #   "The build system should clearly report what it's doing (and sometimes
178 #   why), without being too verbose. It should emit actual command lines as
179 #   much as possible, so that they can be inspected and cut & pasted."
180 #
181 # That should be the default. Only suppress commands, by setting V=0 and using
182 # `make -s`, when user explicitly asks for it with `./validate --quiet`.
183 if [ $be_quiet -eq 1 ]; then
184     # See Note [Default build system verbosity].
185     echo "V=0"                  >> mk/are-validating.mk # Less gunk
186 fi
187
188 $make -j$threads
189 # For a "debug make", add "--debug=b --debug=m"
190
191 check_packages post-build
192
193 # -----------------------------------------------------------------------------
194 # Build and test a binary distribution (not --fast)
195
196 if [ $speed != "FAST" ]; then
197
198     $make binary-dist-prep TAR_COMP=$tar_comp
199     $make test_bindist TEST_PREP=YES TAR_COMP=$tar_comp
200
201     #
202     # Install the xhtml package into the bindist.
203     # This verifies that we can install a package into the
204     # bindist with Cabal.
205     #
206     bindistdir="bindisttest/install   dir"
207
208     check_packages post-install
209
210     $make validate_build_xhtml BINDIST_PREFIX="$thisdir/$bindistdir"
211
212     check_packages post-xhtml
213 fi
214
215 fi # testsuite-only
216
217 # -----------------------------------------------------------------------------
218 # Run the testsuite
219
220 if [ "$build_only" -eq 1 ]; then
221     cat <<EOF
222 -------------------------------------------------------------------
223 Congratulations!  This tree has compiled successfully.
224
225 You can now test your new compiler using ./validate --testsuite-only.
226 EOF
227     exit 0
228 fi
229
230 if [ "$hpc" = YES ]
231 then
232     # XXX With threads we'd need to give a different tix file to each thread
233     #     and then sum them up at the end
234     threads=1
235     HPCTIXFILE=$thisdir/testsuite/hpc_output/ghc.tix
236     export HPCTIXFILE
237     rm -f $HPCTIXFILE
238 fi
239
240 case "$speed" in
241 SLOW)
242         MAKE_TEST_TARGET=slowtest
243         BINDIST="BINDIST=YES"
244         ;;
245 NORMAL)
246         MAKE_TEST_TARGET=test
247         BINDIST="BINDIST=YES"
248         ;;
249 FAST)
250         MAKE_TEST_TARGET=fasttest
251         BINDIST="BINDIST=NO"
252         ;;
253 esac
254
255 if [ $be_quiet -eq 1 ] && [ -z $VERBOSE ]; then
256     TEST_VERBOSITY="VERBOSE=1"
257 fi
258
259 # We need to be quite picky on Windows about which Python interpreter we use
260 # (#12554, #12661). Allow the user to override it.
261 if [ "z$PYTHON" != "z" ]; then
262     PYTHON_ARG="PYTHON=$PYTHON"
263 fi
264
265 rm -f testsuite_summary.txt testsuite_summary_stage1.txt
266
267 # Use LOCAL=0, see Note [Running tests in /tmp].
268 $make -C testsuite/tests $BINDIST $PYTHON_ARG \
269       $MAKE_TEST_TARGET stage=2 LOCAL=0 $TEST_VERBOSITY THREADS=$threads \
270       NO_PRINT_SUMMARY=YES SUMMARY_FILE=../../testsuite_summary.txt \
271       JUNIT_FILE=../../testsuite.xml \
272       2>&1 | tee testlog
273
274 # Run a few tests using the stage1 compiler.
275 # See Note [Why is there no stage1 setup function?].
276 # Don't use BINDIST=YES, as stage1 is not available in a bindist.
277 $make -C testsuite/tests/stage1 $PYTHON_ARG \
278       $MAKE_TEST_TARGET stage=1 LOCAL=0 $TEST_VERBOSITY THREADS=$threads \
279       NO_PRINT_SUMMARY=YES SUMMARY_FILE=../../../testsuite_summary_stage1.txt \
280       JUNIT_FILE=../../../testsuite_stage1.xml \
281       2>&1 | tee testlog-stage1
282
283 echo
284 echo '==== STAGE 1 TESTS ==== '
285 cat testsuite_summary_stage1.txt
286
287 echo '==== STAGE 2 TESTS ==== '
288 cat testsuite_summary.txt
289
290 check_packages post-testsuite
291
292 if [ "$hpc" = YES ]
293 then
294     utils/hpc/hpc markup --hpcdir=. --srcdir=compiler --srcdir=testsuite/hpc_output --destdir=testsuite/hpc_output testsuite/hpc_output/ghc.tix
295 fi
296
297 if
298     grep '\<0 caused framework failures' testsuite_summary.txt >/dev/null 2>/dev/null &&
299     grep '\<0 unexpected passes' testsuite_summary.txt >/dev/null 2>/dev/null &&
300     grep '\<0 unexpected failures' testsuite_summary.txt >/dev/null 2>/dev/null &&
301     grep '\<0 unexpected stat failures' testsuite_summary.txt >/dev/null 2>/dev/null &&
302
303     grep '\<0 caused framework failures' testsuite_summary_stage1.txt >/dev/null 2>/dev/null &&
304     grep '\<0 unexpected passes' testsuite_summary_stage1.txt >/dev/null 2>/dev/null &&
305     grep '\<0 unexpected failures' testsuite_summary_stage1.txt >/dev/null 2>/dev/null &&
306     grep '\<0 unexpected stat failures' testsuite_summary_stage1.txt >/dev/null 2>/dev/null ; then
307
308     if [ $testsuite_only -eq 0 ] && [ $no_clean -eq 0 ]
309     then
310         cat <<EOF
311 -------------------------------------------------------------------
312 Congratulations!  This tree has passed minimal testing.
313
314 NOTE: If you have made changes that may cause failures not tested for by
315 the minimal testing procedure, please do further testing as necessary.
316
317 When you are satisfied that you haven't broken anything, go ahead and
318 push/send your patches.
319 EOF
320         if [ -f mk/validate.mk ] && grep -q "^[^#]" mk/validate.mk
321         then
322             cat <<EOF
323
324 WARNING: You seem to have things set in mk/validate.mk. Please check
325 that it is OK before pushing.
326 EOF
327         fi
328         cat <<EOF
329 -------------------------------------------------------------------
330 EOF
331     else
332         cat <<EOF
333 -------------------------------------------------------------------
334 I didn't find any problems, but this wasn't a complete validate run,
335 so be careful!
336
337 NOTE: If you have made changes that may cause failures not tested for by
338 the minimal testing procedure, please do further testing as necessary.
339 -------------------------------------------------------------------
340 EOF
341    fi
342 else
343     if [ $be_quiet -eq 0 ]
344     then
345        cat <<EOF
346 -------------------------------------------------------------------
347 Oops!  Looks like you have some unexpected test results or framework failures.
348 Please fix them before pushing/sending patches.
349 -------------------------------------------------------------------
350 EOF
351     fi
352     exit 1
353 fi