summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsource4/heimdal_build/lexyacc.sh82
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