| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 | 
							- #!/bin/sh
 
- #############################################################################
 
- # Name:        check.sh
 
- # Purpose:     Offline checker for the buildbot configuration files
 
- # Author:      Mike Wetherell
 
- # Copyright:   (c) 2007 Mike Wetherell
 
- # Licence:     wxWindows licence
 
- #############################################################################
 
- usage() {
 
-     echo "Usage: $0 [options] FILE..."
 
-     echo "Offline checker for the buildbot configuration files"
 
-     echo
 
-     echo "Options:"
 
-     echo "  -g      generate xslt"
 
-     echo "  -h      show help"
 
-     echo "  -l N    output only line N"
 
-     echo "  -p      preprocess"
 
-     echo "  -v      validate"
 
-     exit 0
 
- }
 
- badopt() {
 
-     echo "try '$0 -h' for more information" >&2
 
-     exit 1
 
- }
 
- progcheck() {
 
-     prog="$1"
 
-     $prog --version >/dev/null 2>&1 || {
 
-         echo "$0: requires $prog, not found" >&2
 
-         exit 1
 
-     }
 
- }
 
- GENERATE=1
 
- PREPROCESS=2
 
- VALIDATE=3
 
- MODE=$VALIDATE
 
- FILTER=cat
 
- while getopts ghl:pv opt; do
 
-     case "$opt" in
 
-         \?) badopt ;;
 
-         g)  MODE=$GENERATE ;;
 
-         h)  usage ;;
 
-         l)  FILTER="sed -ne ${OPTARG}p" ;;
 
-         p)  MODE=$PREPROCESS ;;
 
-         v)  MODE=$VALIDATE ;;
 
-     esac
 
- done
 
- if [ $OPTIND -gt 1 ]; then
 
-     shift `expr $OPTIND - 1`
 
- fi
 
- if [ $# -eq 0 ]; then
 
-     usage
 
- fi
 
- XSLTPROC=xsltproc
 
- XMLLINT=xmllint
 
- progcheck $XSLTPROC
 
- progcheck $XMLLINT
 
- DIR="`dirname $0`"
 
- WORKDIR="${TMPDIR:-/tmp}/wx.$$"
 
- mkdir "$WORKDIR" || exit
 
- trap 'rm -rf "$WORKDIR"' EXIT
 
- WORKPAT=`echo "$WORKDIR" | sed 's|[^A-Za-z0-9]/|.|g'`
 
- XSLT="$WORKDIR/XSLT"
 
- PREP="$WORKDIR/PREP"
 
- STDERR="$WORKDIR/STDERR"
 
- ERR=0
 
- # Filter to show lines of genertated XSLT when they are mentioned.
 
- showxslt() {
 
-     awk '{
 
-             print;
 
-             if (sub(/.*generated XSLT line */, "") && sub(/[^0-9].*/, ""))
 
-             {
 
-                 system("sed -ne "$0"p '$XSLT'");
 
-             }
 
-          }'
 
- }
 
- # Test it works as old version of awk don't have sub or system functions.
 
- if showxslt </dev/null 2>/dev/null; then
 
-     SHOWXSLT=showxslt
 
- else
 
-     SHOWXSLT=cat
 
- fi
 
- # Change the names of the temporary files in an error message to something
 
- # to something more informative
 
- errout()
 
- {
 
-     NAME="$1"
 
-     if [ -s "$STDERR" ]; then
 
-         sed "s|file ${WORKPAT}|${WORKPAT}|g;\
 
-              s|${WORKPAT}/XSLT|generated XSLT|g;\
 
-              s|${WORKPAT}/PREP|$NAME (preprocessed)|g" "$STDERR" | $SHOWXSLT
 
-     fi
 
- }
 
- output()
 
- {
 
-     $FILTER "$1"
 
- }
 
- generate()
 
- {
 
-     INPUT="$1"
 
-     if $XSLTPROC --xinclude -o "$XSLT" $DIR/embedded.xsl "$INPUT" 2>"$STDERR" &&
 
-        test \! -s "$STDERR"
 
-     then
 
-         if [ $MODE -eq $GENERATE ]; then
 
-             output "$XSLT"
 
-         fi
 
-     else
 
-         return 1
 
-     fi
 
- }
 
- preprocess()
 
- {
 
-     INPUT="$1"
 
-     if [ $MODE -lt $PREPROCESS ]; then
 
-         return 0
 
-     fi
 
-     if $XSLTPROC --xinclude -o "$PREP" "$XSLT" "$INPUT" 2>"$STDERR" &&
 
-        test \! -s "$STDERR"
 
-     then
 
-         if [ $MODE -eq $PREPROCESS ]; then
 
-             output "$PREP"
 
-         fi
 
-     else
 
-         return 1
 
-     fi
 
- }
 
- validate()
 
- {
 
-     NAME="$1"
 
-     if [ $MODE -lt $VALIDATE ]; then
 
-         return 0
 
-     fi
 
-     if $XMLLINT --noout --schema $DIR/bot.xsd "$PREP" 2>"$STDERR"
 
-     then
 
-         errout "$NAME"
 
-     else
 
-         return 1
 
-     fi
 
- }
 
- while [ $# -gt 0 ]; do
 
-     INPUT="$1"
 
-     NAME="`echo \"$INPUT\" | sed 's/[|\]/\\\&/g'`"
 
-     {
 
-         generate "$INPUT" &&
 
-         preprocess "$INPUT" &&
 
-         validate "$NAME"
 
-     } || {
 
-         errout "$NAME" >&2
 
-         ERR=1
 
-     }
 
-     rm -f "$XSLT" "$PREP" "$STDERR"
 
-     shift
 
- done
 
- exit $ERR
 
 
  |