Support setting CC and/or CXX to the compiler to test
[blocksruntime.git] / checktests
blob64c0deb915e8f31077d090cea7842a3acfcdf491
1 #!/bin/sh
2 : ${CC:=clang}
3 : ${CXX:=$CC}
4 CFLAGS='-Wno-unused -include testprefix.h -IBlocksRuntime'
5 CCFLAGS='-std=c99'
6 LIB=libBlocksRuntime.a
7 TESTDIR=testbin
8 rm -rf $TESTDIR
9 mkdir $TESTDIR
10 if ! "$CC" --version >/dev/null 2>&1; then
11 echo "$CC" not installed
12 exit 1
13 else
14 if ("$CC" -fblocks -c -o /dev/null -x c - < /dev/null 2>&1 || echo '-fblocks') 2>&1 | grep -q -- -fblocks; then
15 echo "$CC" does not support the -fblocks option
16 exit 1
19 if "$CXX" --version >/dev/null 2>&1; then
20 dopp=1
21 if ("$CXX" -fblocks -c -o /dev/null -x c - < /dev/null 2>&1 || echo '-fblocks') | grep -q -- -fblocks; then
22 echo "$CXX" does not support the -fblocks option
23 exit 1
25 else
26 echo "$CXX" not installed -- skipping C++ tests
28 failcount=0
29 testsfailed=
30 for test in BlocksRuntime/tests/*.[cC]; do
31 skip=
32 skipdoze=
33 extra=
34 stub=
35 println=
36 xfail=
37 pmsg='should PASS'
38 fmsg='should FAIL'
39 case $test in
40 */rdar6405500.c | \
41 */rdar6414583.c | \
42 */objectRRGC.c | \
43 */dispatch_async.c) skip=1;;
44 */fail.c) skipdoze=1;;
45 */macro.c) stub='void foo(); int main(){foo(); printf("success");}'; println=1;;
46 */cast.c | \
47 */voidarg.c) println=1;;
48 */varargs-bad-assign.c | \
49 */rettypepromotion.c | \
50 */shorthandexpression.c | \
51 */k-and-r.c | \
52 */sizeof.c | \
53 */orbars.c | \
54 */constassign.c) xfail=1;;
55 esac
56 ext=.c
57 cpp=
58 USECC="$CC"
59 USEFLAGS="$CCFLAGS $CFLAGS"
60 USELIB="$LIB"
61 case $test in
62 *.C) cpp=1; ext=.C;;
63 *.cpp) cpp=1; ext=.cpp;;
64 *.cp) cpp=1; ext=.cp;;
65 *.c++) cpp=1; ext=.c++;;
66 esac
67 if [ -n "$cpp" ]; then
68 USECC="$CXX"
69 USEFLAGS="$CFLAGS"
70 USELIB="$LIB -lstdc++"
72 if [ -n "$COMSPEC" -a -n "$skipdoze" ]; then
73 skip=1
75 if [ -z "$skip" -a -n "$cpp" -a -z "$dopp" ]; then
76 echo "skipping $test ("$CXX" not installed)"
77 else
78 if [ -n "$skip" ]; then
79 echo skipping $test
80 else
81 if [ -n "$xfail" ]; then
82 echo "--- $(basename $test) ($fmsg) ---"
83 else
84 echo "--- $(basename $test) ($pmsg) ---"
86 if [ -n "$stub" ]; then
87 "$USECC" -c $USEFLAGS $extra -o $TESTDIR/$(basename $test $ext).o -fblocks $test && \
88 echo "$stub" | "$USECC" $USEFLAGS $extra -o $TESTDIR/$(basename $test $ext) -fblocks \
89 $TESTDIR/$(basename $test $ext).o $USELIB -x c - && \
90 $TESTDIR/$(basename $test $ext)
91 else
92 "$USECC" -c $USEFLAGS $extra -o $TESTDIR/$(basename $test $ext).o -fblocks $test && \
93 "$USECC" -o $TESTDIR/$(basename $test $ext) -fblocks $TESTDIR/$(basename $test $ext).o $USELIB && \
94 $TESTDIR/$(basename $test $ext)
96 result=$?
97 if [ -n "$println" ]; then
98 echo ''
100 if [ $result = 0 -a -n "$xfail" ]; then
101 echo ''
102 echo "*"
103 echo "**"
104 echo "*** ^FAILURE: expect FAIL test PASSED! ***"
105 echo "**"
106 echo "*"
107 echo ''
108 testsfailed=1
109 failcount=$(($failcount + 1))
111 if [ $result != 0 -a -z "$xfail" ]; then
112 echo ''
113 echo "*"
114 echo "**"
115 echo "*** ^FAILURE: expect PASS test FAILED! ***"
116 echo "**"
117 echo "*"
118 echo ''
119 testsfailed=1
120 failcount=$(($failcount + 1))
124 done
125 if [ -n "$testsfailed" ]; then
126 echo ''
127 echo "*"
128 echo "**"
129 echo "*** WARNING: Some failures($failcount) occurred, look for '*** ^FAILURE:' lines above"
130 echo "**"
131 echo "*"
132 echo ''
133 exit 1
135 echo "*** All tests passed ***"
136 exit 0