Refactor gcc.c, pulling out the reusable code
[ghc-hetmet.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 [ "$CPUS" = "" ]; then
49     threads=2
50 else
51     threads=$(($CPUS + 1)) # `expr $CPUS + 1`
52 fi
53
54 if [ $testsuite_only -eq 0 ]; then
55
56 if [ $no_clean -eq 0 ]; then
57     make maintainer-clean NO_CLEAN_GMP=YES
58
59     INSTDIR=`pwd`/inst
60     if [ "$OSTYPE" = "cygwin" ]
61     then
62         INSTDIR=`cygpath -m "$INSTDIR"`
63     fi
64
65     sh boot
66     ./configure --prefix="$INSTDIR" $config_args
67 fi
68
69 thisdir=`utils/ghc-pwd/ghc-pwd`
70
71 echo "Validating=YES" > mk/are-validating.mk
72
73 make -j$threads ValidateHpc=$hpc ValidateSlow=$slow
74
75 make binary-dist-prep
76 make -C bindisttest TEST_PREP=YES
77
78 fi # testsuite-only
79
80 if [ "$hpc" = YES ]
81 then
82     # XXX With threads we'd need to give a different tix file to each thread
83     #     and then sum them up at the end
84     threads=1
85     HPCTIXFILE=$thisdir/testsuite/hpc_output/ghc.tix
86     export HPCTIXFILE
87     rm -f $HPCTIXFILE
88 fi
89
90 make -C testsuite/tests/ghc-regress fast stage=2 CLEANUP=1 BINDIST=YES THREADS=$threads 2>&1 | tee testlog
91
92 if [ "$hpc" = YES ]
93 then
94     utils/hpc/hpc markup --hpcdir=. --srcdir=compiler --srcdir=testsuite/hpc_output --destdir=testsuite/hpc_output testsuite/hpc_output/ghc.tix
95 fi
96
97 echo "-------------------------------------------------------------------"
98 if
99     grep '\<0 caused framework failures' testlog >/dev/null 2>/dev/null &&
100     grep '\<0 unexpected passes' testlog >/dev/null 2>/dev/null &&
101     grep '\<0 unexpected failures' testlog >/dev/null 2>/dev/null ; then
102     if [ $testsuite_only -eq 0 ] && [ $no_clean -eq 0 ]
103     then
104         cat <<EOF
105 Congratulations!  This tree has passed minimal testing.
106
107 NOTE: If you have made changes that may cause failures not tested for by
108 the minimal testing procedure, please do further testing as necessary.
109
110 When you are satisfied that you haven't broken anything, go ahead and
111 push/send your patches.
112 EOF
113         if grep -q "^[^#]" mk/validate.mk
114         then
115             cat <<EOF
116
117 WARNING: You seem to have things set in mk/validate.mk. Please check
118 that it is OK before pushing.
119 EOF
120         fi
121         cat <<EOF
122 -------------------------------------------------------------------
123 EOF
124     else
125         cat <<EOF
126 I didn't find any problems, but this wasn't a complete validate run,
127 so be careful!
128
129 NOTE: If you have made changes that may cause failures not tested for by
130 the minimal testing procedure, please do further testing as necessary.
131 -------------------------------------------------------------------
132 EOF
133    fi
134 else
135     cat <<EOF
136 Oops!  Looks like you have some unexpected test results or framework failures.
137 Please fix them before pushing/sending patches.
138 -------------------------------------------------------------------
139 EOF
140     exit 1
141 fi
142