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