fix value of this_mod passed to tcRnImports (#5545)
[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 ! [ -d testsuite ]
49 then
50     echo 'You need the testsuite to validate' >&2
51     echo 'Run "./sync-all --testsuite get" to get it' >&2
52     exit 1
53 fi
54
55 if [ "$THREADS" = "" ]; then
56     if [ "$CPUS" = "" ]; then
57         threads=2
58     else
59         threads=$(($CPUS + 1)) # `expr $CPUS + 1`
60     fi
61 else
62     threads="$THREADS"
63 fi
64
65 if type gmake > /dev/null 2> /dev/null
66 then
67     make="gmake"
68 else
69     make="make"
70 fi
71
72 if [ $testsuite_only -eq 0 ]; then
73
74 if [ $no_clean -eq 0 ]; then
75     $make maintainer-clean NO_CLEAN_GMP=YES
76
77     INSTDIR=`pwd`/inst
78     if [ "$OSTYPE" = "cygwin" ]
79     then
80         INSTDIR=`cygpath -m "$INSTDIR"`
81     fi
82
83     /usr/bin/perl -w boot --validate --required-tag=dph
84     ./configure --prefix="$INSTDIR" $config_args
85 fi
86
87 thisdir=`utils/ghc-pwd/dist-boot/ghc-pwd`
88
89 echo "Validating=YES" > mk/are-validating.mk
90
91 $make -j$threads ValidateHpc=$hpc ValidateSlow=$slow
92 # For a "debug make", add "--debug=b --debug=m"
93
94 $make binary-dist-prep
95 $make test_bindist TEST_PREP=YES
96
97 #
98 # Install the mtl package into the bindist, because it is used by some
99 # tests.  It isn't essential that we do this (the failing tests will
100 # be treated as expected failures), but we get a bit more test
101 # coverage, and also verify that we can install a package into the
102 # bindist with Cabal.
103 #
104 bindistdir="bindisttest/install dir"
105 cd libraries/mtl
106 "$thisdir/$bindistdir/bin/ghc" --make Setup
107 ./Setup configure --with-ghc="$thisdir/$bindistdir/bin/ghc" --with-haddock="$thisdir/$bindistdir/bin/haddock" --global --builddir=dist-bindist --prefix="$thisdir/$bindistdir"
108 ./Setup build   --builddir=dist-bindist
109 ./Setup haddock --builddir=dist-bindist
110 ./Setup install --builddir=dist-bindist
111 ./Setup clean   --builddir=dist-bindist
112 rm -f Setup Setup.exe Setup.hi Setup.o
113 cd $thisdir
114
115 fi # testsuite-only
116
117 if [ "$hpc" = YES ]
118 then
119     # XXX With threads we'd need to give a different tix file to each thread
120     #     and then sum them up at the end
121     threads=1
122     HPCTIXFILE=$thisdir/testsuite/hpc_output/ghc.tix
123     export HPCTIXFILE
124     rm -f $HPCTIXFILE
125 fi
126
127 if [ "$slow" = YES ]
128 then
129 MAKE_TEST_TARGET=fulltest
130 else
131 MAKE_TEST_TARGET=test
132 fi
133
134 $make $MAKE_TEST_TARGET stage=2 BINDIST=YES THREADS=$threads 2>&1 | tee testlog
135
136 if [ "$hpc" = YES ]
137 then
138     utils/hpc/hpc markup --hpcdir=. --srcdir=compiler --srcdir=testsuite/hpc_output --destdir=testsuite/hpc_output testsuite/hpc_output/ghc.tix
139 fi
140
141 echo "-------------------------------------------------------------------"
142 if
143     grep '\<0 caused framework failures' testlog >/dev/null 2>/dev/null &&
144     grep '\<0 unexpected passes' testlog >/dev/null 2>/dev/null &&
145     grep '\<0 unexpected failures' testlog >/dev/null 2>/dev/null &&
146     ! grep 'Some files are written by multiple tests' testlog >/dev/null 2>/dev/null ; then
147     if [ $testsuite_only -eq 0 ] && [ $no_clean -eq 0 ]
148     then
149         cat <<EOF
150 Congratulations!  This tree has passed minimal testing.
151
152 NOTE: If you have made changes that may cause failures not tested for by
153 the minimal testing procedure, please do further testing as necessary.
154
155 When you are satisfied that you haven't broken anything, go ahead and
156 push/send your patches.
157 EOF
158         if [ -f mk/validate.mk ] && grep -q "^[^#]" mk/validate.mk
159         then
160             cat <<EOF
161
162 WARNING: You seem to have things set in mk/validate.mk. Please check
163 that it is OK before pushing.
164 EOF
165         fi
166         cat <<EOF
167 -------------------------------------------------------------------
168 EOF
169     else
170         cat <<EOF
171 I didn't find any problems, but this wasn't a complete validate run,
172 so be careful!
173
174 NOTE: If you have made changes that may cause failures not tested for by
175 the minimal testing procedure, please do further testing as necessary.
176 -------------------------------------------------------------------
177 EOF
178    fi
179 else
180     cat <<EOF
181 Oops!  Looks like you have some unexpected test results or framework failures.
182 Please fix them before pushing/sending patches.
183 -------------------------------------------------------------------
184 EOF
185     exit 1
186 fi
187