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