s4-waf: added a lexyacc.sh script that manually rebuilds the heimdal parsers
authorAndrew Tridgell <tridge@samba.org>
Sat, 30 Oct 2010 04:47:03 +0000 (15:47 +1100)
committerAndrew Tridgell <tridge@samba.org>
Sat, 30 Oct 2010 12:49:02 +0000 (23:49 +1100)
we so rarely need to rebuild these that it is simplest to just run
lexyacc.sh when we import a new heimdal release

source4/heimdal_build/lexyacc.sh [new file with mode: 0755]

diff --git a/source4/heimdal_build/lexyacc.sh b/source4/heimdal_build/lexyacc.sh
new file mode 100755 (executable)
index 0000000..cee2166
--- /dev/null
@@ -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