]> rtime.felk.cvut.cz Git - omk.git/blob - tests/wvtest.sh
Document AM_ variables instead of user variables
[omk.git] / tests / wvtest.sh
1 #
2 # Include this file in your shell script by using:
3 #         #!/bin/bash
4 #         . ./wvtest.sh
5 #
6
7 # we don't quote $TEXT in case it contains newlines; newlines
8 # aren't allowed in test output.  However, we set -f so that
9 # at least shell glob characters aren't processed.
10 _wvtextclean()
11 {
12         ( set -f; echo $* )
13 }
14
15
16 if [ -n "$BASH_VERSION" ]; then
17         trap 'echo "! ${BASH_SOURCE[0]}:${LINENO} ${BASH_COMMAND} FAILED"' ERR
18
19         _wvfind_caller()
20         {
21                 LVL=$1
22                 WVCALLER_FILE=${BASH_SOURCE[2]}
23                 WVCALLER_LINE=${BASH_LINENO[1]}
24         }
25 else
26         _wvfind_caller()
27         {
28                 LVL=$1
29                 WVCALLER_FILE="unknown"
30                 WVCALLER_LINE=0
31         }
32 fi
33
34
35 _wvcheck()
36 {
37         CODE="$1"
38         TEXT=$(_wvtextclean "$2")
39         OK=ok
40         if [ "$CODE" -ne 0 ]; then
41                 OK=FAILED
42         fi
43         echo "! $WVCALLER_FILE:$WVCALLER_LINE  $TEXT  $OK" >&2
44         if [ "$CODE" -ne 0 ]; then
45                 exit $CODE
46         else
47                 return 0
48         fi
49 }
50
51
52 WVPASS()
53 {
54         TEXT="$*"
55
56         _wvfind_caller
57         if "$@"; then
58                 _wvcheck 0 "$TEXT"
59                 return 0
60         else
61                 _wvcheck 1 "$TEXT"
62                 # NOTREACHED
63                 return 1
64         fi
65 }
66
67
68 WVFAIL()
69 {
70         TEXT="$*"
71
72         _wvfind_caller
73         if "$@"; then
74                 _wvcheck 1 "NOT($TEXT)"
75                 # NOTREACHED
76                 return 1
77         else
78                 _wvcheck 0 "NOT($TEXT)"
79                 return 0
80         fi
81 }
82
83
84 _wvgetrv()
85 {
86         ( "$@" >&2 )
87         echo -n $?
88 }
89
90
91 WVPASSEQ()
92 {
93         _wvfind_caller
94         _wvcheck $(_wvgetrv [ "$#" -eq 2 ]) "exactly 2 arguments"
95         echo "Comparing:" >&2
96         echo "$1" >&2
97         echo "--" >&2
98         echo "$2" >&2
99         _wvcheck $(_wvgetrv [ "$1" = "$2" ]) "'$1' = '$2'"
100 }
101
102
103 WVPASSNE()
104 {
105         _wvfind_caller
106         _wvcheck $(_wvgetrv [ "$#" -eq 2 ]) "exactly 2 arguments"
107         echo "Comparing:" >&2
108         echo "$1" >&2
109         echo "--" >&2
110         echo "$2" >&2
111         _wvcheck $(_wvgetrv [ "$1" != "$2" ]) "'$1' != '$2'"
112 }
113
114
115 WVPASSRC()
116 {
117         RC=$?
118         _wvfind_caller
119         _wvcheck $(_wvgetrv [ $RC -eq 0 ]) "return code($RC) == 0"
120 }
121
122
123 WVFAILRC()
124 {
125         RC=$?
126         _wvfind_caller
127         _wvcheck $(_wvgetrv [ $RC -ne 0 ]) "return code($RC) != 0"
128 }
129
130
131 WVSTART()
132 {
133         echo >&2
134         _wvfind_caller
135         echo "Testing \"$* ($OMK_RULES)\" in $WVCALLER_FILE:" >&2
136         cd "$WV_BASE_DIR"
137         local dir=test.$(echo $* | tr -s '[[:blank:]]' _ | tr "A-Z" "a-z")
138         rm -rf "$dir"
139         mkdir -p "$dir"
140         WVPASS cd "$WV_BASE_DIR/$dir"
141         WVPASS cp "$OMK_TESTSROOT"/../rules/$OMK_RULES/* .
142         WVPASS cp "$OMK_TESTSROOT/../leaf-makefile/Makefile" .
143 }
144
145 omkize()
146 {
147     WVPASS cp "$OMK_TESTSROOT/../leaf-makefile/Makefile" .
148     for i in `find -L . -mindepth 2 -name Makefile.omk`; do
149         d=`dirname ${i}`
150         WVPASS cp Makefile "${d}/Makefile"
151     done
152 }
153
154 needs_valid_CC()
155 {
156     CC=$(make omk-get-var VAR=CC|sed -ne '/^CC=/ s///p')
157     if ! which ${CC%% *} > /dev/null; then
158         echo "Warning: '$CC' not found - skipping the test"
159         exit 0
160     fi
161
162     if [[ $OMK_RULES = sysless-keil16x ]] && ! which cygpath; then
163         echo "Warning: cygpath command not found - skipping the test"
164         exit 0
165     fi
166
167     if [[ $OMK_RULES = sysless-keil51 ]] && ! which l51; then
168         echo "Warning: l51 command not found - skipping the test"
169         exit 0
170     fi
171 }
172
173 OMK_TESTSROOT=${OMK_TESTSROOT:-$(readlink --canonicalize $(dirname $0))}
174 OMK_RULES=${OMK_RULES:-linux}   # When run manually, we use linux rules
175
176 if [[ -f "${OMK_TESTSROOT}/${OMK_RULES}.env" ]]; then
177     WVPASS . "${OMK_TESTSROOT}/${OMK_RULES}.env"
178 fi
179
180 case $OMK_RULES in
181     rtems)
182         [[ -z "$RTEMS_MAKEFILE_PATH" ]] && exit 0
183         ;;
184     vxworks)
185         [[ -z "$WRENV" ]] && exit 0
186         ;;
187 esac
188
189 echo "Testing \"$OMK_RULES rules\" in $(basename $0):" >&2
190 testdir="tmp/$(basename $0 .sh).$OMK_RULES"
191 [[ -d "$testdir" ]] && WVPASS rm -rf "$testdir"
192 WVPASS mkdir -p "$testdir"
193 WVPASS cd "$testdir"
194 WVPASS cp "$OMK_TESTSROOT"/../rules/$OMK_RULES/* .
195 WVPASS cp "$OMK_TESTSROOT/../leaf-makefile/Makefile" .
196
197 WV_BASE_DIR="$PWD"