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