Silen some warning.
[bertos.git] / test / run_tests.sh
1 #!/bin/bash
2 #
3 # Copyright 2005 Develer S.r.l. (http://www.develer.com/)
4 # Copyright 2008 Bernie Innocenti <bernie@codewiz.org>
5 #
6 # Version: $Id$
7 # Author:  Bernie Innocenti <bernie@codewiz.org>
8 #
9
10 # Testsuite output level:
11 #  0 - quiet
12 #  1 - progress output
13 #  2 - build warnings
14 #  3 - execution output
15 #  4 - build commands
16 VERBOSE=${VERBOSE:-1}
17
18 CC=gcc
19 #FIXME: -Ibertos/emul should not be needed
20 CFLAGS="-W -Wall -Wextra -Wundef -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wsign-compare -Wmissing-noreturn \
21 -O0 -g3 -ggdb -Ibertos -Ibertos/emul -Ibertos/net/lwip/src/include -Ibertos/net/lwip/src/include/ipv4 -std=gnu99 -fno-builtin -D_DEBUG -DARCH=(ARCH_EMUL|ARCH_UNITTEST) \
22 -DCPU_FREQ=(12288000UL) -ffunction-sections -fdata-sections -Wl,--gc-sections"
23
24 CXX=g++
25 CXXFLAGS="$CFLAGS"
26
27 TESTS=${TESTS:-`find . \
28         \( -name .svn -prune -o -name .git -prune -o -name .hg  -prune \) \
29         -o -name "*_test.c" -print` }
30
31 TESTOUT="testout"
32 SRC_LIST="
33         bertos/algo/ramp.c
34         bertos/algo/crc_ccitt.c
35         bertos/algo/crc.c
36         bertos/algo/fletcher32.c
37         bertos/drv/kdebug.c
38         bertos/drv/timer.c
39         bertos/kern/monitor.c
40         bertos/kern/proc.c
41         bertos/kern/signal.c
42         bertos/kern/sem.c
43         bertos/kern/preempt.c
44         bertos/kern/rtask.c
45         bertos/mware/event.c
46         bertos/mware/formatwr.c
47         bertos/mware/hex.c
48         bertos/mware/sprintf.c
49         bertos/os/hptime.c
50         bertos/struct/kfile_fifo.c
51         bertos/struct/heap.c
52         bertos/struct/hashtable.c
53         bertos/struct/bitarray.c
54         bertos/fs/fatfs/ff.c
55         bertos/emul/diskio_emul.c
56         bertos/fs/fat.c
57         bertos/fs/battfs.c
58         bertos/emul/switch_ctx_emul.S
59         bertos/mware/ini_reader.c
60         bertos/emul/kfile_posix.c
61         bertos/struct/kfile_mem.c
62         bertos/net/ax25.c
63         bertos/net/afsk.c
64         bertos/net/nmeap/src/nmeap01.c
65         bertos/net/nmea.c
66         bertos/net/http.c
67         bertos/cfg/kfile_debug.c
68         bertos/io/kblock.c
69         bertos/io/kblock_ram.c
70         bertos/io/kblock_posix.c
71         bertos/io/kfile.c
72         bertos/sec/cipher.c
73         bertos/sec/cipher/blowfish.c
74         bertos/sec/cipher/aes.c
75         bertos/sec/kdf/pbkdf1.c
76         bertos/sec/kdf/pbkdf2.c
77         bertos/sec/hash/sha1.c
78         bertos/sec/hash/md5.c
79         bertos/sec/hash/ripemd.c
80         bertos/sec/mac/hmac.c
81         bertos/sec/mac/omac.c
82 "
83
84 buildout='/dev/null'
85 runout='/dev/null'
86 [ "$VERBOSE" -ge 2 ] && buildout='/dev/stdout'
87 [ "$VERBOSE" -ge 3 ] && runout='/dev/stdout'
88
89 # Needed to get build/exec result code rather than tee's
90 set -o pipefail
91
92 rm -rf "${TESTOUT}.old"
93 if [ -d "${TESTOUT}" ] ; then
94         mv -f "${TESTOUT}" "$TESTOUT.old"
95 fi
96 mkdir -p "$TESTOUT"
97
98 for src in $TESTS; do
99         name="`basename $src | sed -e 's/\.cpp$//' -e 's/\.c$//'`"
100         testdir="./$TESTOUT/$name"
101         cfgdir="$testdir/cfg"
102         mkdir -p "$cfgdir"
103         exe="$testdir/$name"
104
105         PREPARECMD="test/parsetest.py $src"
106         BUILDCMD="$CC -I$testdir $CFLAGS $src $SRC_LIST -o $exe"
107         export testdir name cfgdir
108
109         [ $VERBOSE -gt 0 ] && echo "Preparing $name..."
110         [ $VERBOSE -gt 4 ] && echo " $PREPARECMD"
111         if $PREPARECMD 2>&1 | tee -a >>$buildout $testdir/$name.prep; then
112                 [ $VERBOSE -gt 0 ] && echo "Building $name..."
113                 [ $VERBOSE -gt 4 ] && echo " $BUILDCMD"
114                 if $BUILDCMD 2>&1 | tee -a >>$buildout $testdir/$name.build; then
115                         [ $VERBOSE -gt 0 ] && echo "Running $name..."
116                         if ! $exe 2>&1 | tee -a >>$runout $testdir/$name.out; then
117                                 echo "FAILED [RUN]: $name"
118                                 cat $testdir/$name.out
119                                 exit 2
120                         fi
121                 else
122                         echo "FAILED [BUILD]: $name"
123                         cat $testdir/$name.build
124                         exit 3
125                 fi
126         else
127                 echo "FAILED [PREPARING]: $name"
128                 cat $testdir/$name.prep
129                 exit 4
130         fi
131 done
132