hust test: complain if busybox binary can't be found
[oweals/busybox.git] / shell / hush_test / run-all
1 #!/bin/sh
2
3 unset LANG LANGUAGE
4 unset LC_COLLATE
5 unset LC_CTYPE
6 unset LC_MONETARY
7 unset LC_MESSAGES
8 unset LC_NUMERIC
9 unset LC_TIME
10 unset LC_ALL
11
12 if test ! -x hush; then
13         if test ! -x ../../busybox; then
14                 echo "Can't run tests. Put hush binary into this directory (`pwd`)"
15                 exit 1
16         fi
17         echo "No ./hush - creating a link to ../../busybox"
18         ln -s ../../busybox hush
19 fi
20 if test ! -f .config; then
21         if test ! -f ../../.config; then
22                 echo "Missing .config file"
23                 exit 1
24         fi
25         cp ../../.config . || exit 1
26 fi
27
28 eval $(sed -e '/^#/d' -e '/^$/d' -e 's:^:export :' .config)
29
30 PATH="`pwd`:$PATH" # for hush and recho/zecho/printenv
31 export PATH
32
33 THIS_SH="`pwd`/hush"
34 export THIS_SH
35
36 do_test()
37 {
38         test -d "$1" || return 0
39         d=${d%/}
40 #       echo Running tests in directory "$1"
41         (
42         tret=0
43         cd "$1" || { echo "cannot cd $1!"; exit 1; }
44         for x in run-*; do
45                 test -f "$x" || continue
46                 case "$x" in
47                         "$0"|run-minimal|run-gprof) ;;
48                         *.orig|*~) ;;
49                         #*) echo $x ; sh $x ;;
50                         *)
51                         sh "$x" >"../$1-$x.fail" 2>&1 && \
52                         { echo "$1/$x: ok"; rm "../$1-$x.fail"; } || echo "$1/$x: fail";
53                         ;;
54                 esac
55         done
56         # Many bash run-XXX scripts just do this,
57         # no point in duplication it all over the place
58         for x in *.tests; do
59         test -x "$x" || continue
60         name="${x%%.tests}"
61         test -f "$name.right" || continue
62 #       echo Running test: "$x"
63         (
64                 "$THIS_SH" "./$x" >"$name.xx" 2>&1
65                 # filter C library differences
66                 sed -i \
67                         -e "/: invalid option /s:'::g" \
68                         "$name.xx"
69                 test $? -eq 77 && rm -f "../$1-$x.fail" && exit 77
70                 diff -u "$name.xx" "$name.right" >"../$1-$x.fail" && rm -f "$name.xx" "../$1-$x.fail"
71         )
72         case $? in
73                 0)  echo "$1/$x: ok";;
74                 77) echo "$1/$x: skip (feature disabled)";;
75                 *)  echo "$1/$x: fail"; tret=1;;
76         esac
77         done
78         exit ${tret}
79         )
80 }
81
82 # Main part of this script
83 # Usage: run-all [directories]
84
85 ret=0
86
87 if [ $# -lt 1 ]; then
88         # All sub directories
89         modules=`ls -d hush-*`
90
91         for module in $modules; do
92         do_test $module || ret=1
93         done
94 else
95         while [ $# -ge 1 ]; do
96         if [ -d $1 ]; then
97                 do_test $1 || ret=1
98         fi
99         shift
100         done
101 fi
102
103 exit ${ret}