]> git.saurik.com Git - wxWidgets.git/blob - build/buildbot/tools/check.sh
Fix for systems with old non-POSIX awk.
[wxWidgets.git] / build / buildbot / tools / check.sh
1 #!/bin/sh
2 #############################################################################
3 # Name: check.sh
4 # Purpose: Check embedded xslt
5 # Author: Mike Wetherell
6 # RCS-ID: $Id$
7 # Copyright: (c) 2007 Mike Wetherell
8 # Licence: wxWidgets licence
9 #############################################################################
10
11 usage() {
12 echo "Usage: $0 [options] FILE..."
13 echo "Check embedded xslt"
14 echo
15 echo "Options:"
16 echo " -g generate xslt"
17 echo " -h show help"
18 echo " -l N output only line N"
19 echo " -p preprocess"
20 echo " -v validate"
21 exit 0
22 }
23
24 badopt() {
25 echo "try '$0 -h' for more information" >&2
26 exit 1
27 }
28
29 GENERATE=1
30 PREPROCESS=2
31 VALIDATE=3
32
33 MODE=$VALIDATE
34 FILTER=cat
35
36 while getopts ghl:pv opt; do
37 case "$opt" in
38 \?) badopt ;;
39 g) MODE=$GENERATE ;;
40 h) usage ;;
41 l) FILTER="sed -ne ${OPTARG}p" ;;
42 p) MODE=$PREPROCESS ;;
43 v) MODE=$VALIDATE ;;
44 esac
45 done
46
47 if [ $OPTIND -gt 1 ]; then
48 shift `expr $OPTIND - 1`
49 fi
50
51 if [ $# -eq 0 ]; then
52 usage
53 fi
54
55 DIR="`dirname $0`"
56 WORKDIR="${TMPDIR:-/tmp}/wx.$$"
57 mkdir "$WORKDIR" || exit
58 trap 'rm -rf "$WORKDIR"' EXIT
59 WORKPAT=`echo "$WORKDIR" | sed 's|[^A-Za-z0-9]/|.|g'`
60 XSLT="$WORKDIR/XSLT"
61 PREP="$WORKDIR/PREP"
62 STDERR="$WORKDIR/STDERR"
63 ERR=0
64
65 # Filter to show lines of genertated XSLT when they are mentioned.
66 showxslt() {
67 awk '{
68 print;
69 if (sub(/.*generated XSLT line */, "") && sub(/[^0-9].*/, ""))
70 {
71 system("sed -ne "$0"p '$XSLT'");
72 }
73 }'
74 }
75
76 # Test it works as old version of awk don't have sub or system functions.
77 if showxslt </dev/null 2>/dev/null; then
78 SHOWXSLT=showxslt
79 else
80 SHOWXSLT=cat
81 fi
82
83 # Change the names of the temporary files in an error message to something
84 # to something more informative
85 errout()
86 {
87 NAME="$1"
88
89 if [ -s "$STDERR" ]; then
90 sed "s|file ${WORKPAT}|${WORKPAT}|g;\
91 s|${WORKPAT}/XSLT|generated XSLT|g;\
92 s|${WORKPAT}/PREP|$NAME (preprocessed)|g" "$STDERR" | $SHOWXSLT
93 fi
94 }
95
96 output()
97 {
98 $FILTER "$1"
99 }
100
101 generate()
102 {
103 INPUT="$1"
104
105 if xsltproc --xinclude -o "$XSLT" $DIR/embedded.xsl "$INPUT" 2>"$STDERR" &&
106 test \! -s "$STDERR"
107 then
108 if [ $MODE -eq $GENERATE ]; then
109 output "$XSLT"
110 fi
111 else
112 return 1
113 fi
114 }
115
116 preprocess()
117 {
118 INPUT="$1"
119
120 if [ $MODE -lt $PREPROCESS ]; then
121 return 0
122 fi
123
124 if xsltproc --xinclude -o "$PREP" "$XSLT" "$INPUT" 2>"$STDERR" &&
125 test \! -s "$STDERR"
126 then
127 if [ $MODE -eq $PREPROCESS ]; then
128 output "$PREP"
129 fi
130 else
131 return 1
132 fi
133 }
134
135 validate()
136 {
137 NAME="$1"
138
139 if [ $MODE -lt $VALIDATE ]; then
140 return 0
141 fi
142
143 if xmllint --noout --schema $DIR/bot.xsd "$PREP" 2>"$STDERR"
144 then
145 errout "$NAME"
146 else
147 return 1
148 fi
149 }
150
151 while [ $# -gt 0 ]; do
152 INPUT="$1"
153 NAME="`echo \"$INPUT\" | sed 's/[|\]/\\\&/g'`"
154
155 {
156 generate "$INPUT" &&
157 preprocess "$INPUT" &&
158 validate "$NAME"
159 } || {
160 errout "$NAME" >&2
161 ERR=1
162 }
163
164 rm -f "$XSLT" "$PREP" "$STDERR"
165
166 shift
167 done
168
169 exit $ERR