diff options
Diffstat (limited to 'source4/heimdal_build')
-rwxr-xr-x | source4/heimdal_build/lexyacc.sh | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/source4/heimdal_build/lexyacc.sh b/source4/heimdal_build/lexyacc.sh new file mode 100755 index 0000000000..cee21668e5 --- /dev/null +++ b/source4/heimdal_build/lexyacc.sh @@ -0,0 +1,82 @@ +#!/bin/bash + +# rebuild our heimdal lex/yacc files. Run this manually if you update heimdal + +lexfiles="heimdal/lib/asn1/lex.l heimdal/lib/hx509/sel-lex.l heimdal/lib/com_err/lex.l" +yaccfiles="heimdal/lib/asn1/asn1parse.y heimdal/lib/hx509/sel-gram.y heimdal/lib/com_err/parse.y" + +set -e + +LEX="lex" +YACC="yacc" + +top=$PWD + +call_lex() { + lfile="$1" + + echo "Calling $LEX on $lfile" + + dir=$(dirname $lfile) + base=$(basename $lfile .l) + cfile=$base".c" + lfile=$base".l" + + cd $dir + + $LEX $lfile || exit 1 + + if [ -r lex.yy.c ]; then + echo "#include \"config.h\"" > $base.c + sed -e "s|lex\.yy\.c|$DEST|" lex.yy.c >> $base.c + rm -f $base.yy.c + elif [ -r $base.yy.c ]; then + echo "#include \"config.h\"" > $base.c + sed -e "s|$base\.yy\.c|$DEST|" $base.yy.c >> $base.c + rm -f $base.yy.c + elif [ -r $base.c ]; then + mv $base.c $base.c.tmp + echo "#include \"config.h\"" > $base.c + sed -e "s|$base\.yy\.c|$DEST|" $base.c.tmp >> $base.c + rm -f $base.c.tmp + elif [ ! -r base.c ]; then + echo "$base.c nor $base.yy.c nor lex.yy.c generated." + exit 1 + fi + cd $top +} + + +call_yacc() { + yfile="$1" + + echo "Calling $YACC on $yfile" + + dir=$(dirname $yfile) + base=$(basename $yfile .y) + cfile=$base".c" + yfile=$base".y" + + cd $dir + + $YACC -d $yfile || exit 1 + if [ -r y.tab.h -a -r y.tab.c ];then + sed -e "/^#/!b" -e "s|y\.tab\.h|$SRC|" -e "s|\"$base.y|\"$SRC|" y.tab.h > $base.h + sed -e "s|y\.tab\.c|$SRC|" -e "s|\"$base.y|\"$SRC|" y.tab.c > $base.c + rm -f y.tab.c y.tab.h + elif [ ! -r $base.h -a ! -r $base.c]; then + echo "$base.h nor $base.c generated." + exit 1 + fi + cd $top +} + + + +for lfile in $lexfiles; do + call_lex $lfile +done + +for yfile in $yaccfiles; do + call_yacc $yfile +done |