1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-25 23:21:54 +03:00
samba-mirror/source4/heimdal_build/lexyacc.sh
Andrew Bartlett 11c5301491 heimdal_build: omit #line statments
This restores and finishes my original commit
80e23c68d8, reverted in
68c61a829b

    heimdal_build omit #line statments to allow valgrind to work again

This time however, the reason to omit line statements is that it
causes more trouble with the lcov code coverage system than the (nil)
value that these statements bring.  Otherwise, we have to have a
special case to remove the .gcno and .gcda files for these generated
files.

Andrew Bartlett
2012-02-10 15:20:33 +11:00

85 lines
1.8 KiB
Bash
Executable File

#!/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
# --noline specified because line directives cause more bother than they solve (issues with lcov finding the source files)
$LEX --noline $lfile || exit 1
if [ -r lex.yy.c ]; then
echo "#include \"config.h\"" > $base.c
grep -v "^#line" lex.yy.c >> $base.c
rm -f $base.yy.c
elif [ -r $base.yy.c ]; then
echo "#include \"config.h\"" > $base.c
grep -v "^#line" $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
grep -v "^#line" $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
# -l specified because line directives cause more bother than they solve (issues with lcov finding the source files)
$YACC -l -d $yfile || exit 1
if [ -r y.tab.h -a -r y.tab.c ];then
cat y.tab.h > $base.h
cat 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