make test and fulltest targets in the main Makefile; fixes #4297
[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
77     ./configure --prefix="$INSTDIR" $config_args
78 fi
79
80 thisdir=`utils/ghc-pwd/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 fi # testsuite-only
90
91 if [ "$hpc" = YES ]
92 then
93     # XXX With threads we'd need to give a different tix file to each thread
94     #     and then sum them up at the end
95     threads=1
96     HPCTIXFILE=$thisdir/testsuite/hpc_output/ghc.tix
97     export HPCTIXFILE
98     rm -f $HPCTIXFILE
99 fi
100
101 $make test stage=2 BINDIST=YES THREADS=$threads 2>&1 | tee testlog
102
103 if [ "$hpc" = YES ]
104 then
105     utils/hpc/hpc markup --hpcdir=. --srcdir=compiler --srcdir=testsuite/hpc_output --destdir=testsuite/hpc_output testsuite/hpc_output/ghc.tix
106 fi
107
108 echo "-------------------------------------------------------------------"
109 if
110     grep '\<0 caused framework failures' testlog >/dev/null 2>/dev/null &&
111     grep '\<0 unexpected passes' testlog >/dev/null 2>/dev/null &&
112     grep '\<0 unexpected failures' testlog >/dev/null 2>/dev/null ; then
113     if [ $testsuite_only -eq 0 ] && [ $no_clean -eq 0 ]
114     then
115         cat <<EOF
116 Congratulations!  This tree has passed minimal testing.
117
118 NOTE: If you have made changes that may cause failures not tested for by
119 the minimal testing procedure, please do further testing as necessary.
120
121 When you are satisfied that you haven't broken anything, go ahead and
122 push/send your patches.
123 EOF
124         if grep -q "^[^#]" mk/validate.mk
125         then
126             cat <<EOF
127
128 WARNING: You seem to have things set in mk/validate.mk. Please check
129 that it is OK before pushing.
130 EOF
131         fi
132         cat <<EOF
133 -------------------------------------------------------------------
134 EOF
135     else
136         cat <<EOF
137 I didn't find any problems, but this wasn't a complete validate run,
138 so be careful!
139
140 NOTE: If you have made changes that may cause failures not tested for by
141 the minimal testing procedure, please do further testing as necessary.
142 -------------------------------------------------------------------
143 EOF
144    fi
145 else
146     cat <<EOF
147 Oops!  Looks like you have some unexpected test results or framework failures.
148 Please fix them before pushing/sending patches.
149 -------------------------------------------------------------------
150 EOF
151     exit 1
152 fi
153