diff options
Diffstat (limited to 'tools/runlex.sh')
-rwxr-xr-x | tools/runlex.sh | 91 |
1 files changed, 38 insertions, 53 deletions
diff --git a/tools/runlex.sh b/tools/runlex.sh index 0592acb318..e78c8b0ed5 100755 --- a/tools/runlex.sh +++ b/tools/runlex.sh @@ -2,10 +2,9 @@ # # runlex.sh -# Script to run Lex/Flex. +# Script to run Flex. # First argument is the (quoted) name of the command; if it's null, that -# means that neither Flex nor Lex was found, so we report an error and -# quit. +# means that Flex wasn't found, so we report an error and quit. # Second arg is the sed executable # # Wireshark - Network traffic analyzer @@ -30,9 +29,9 @@ # # Get the name of the command to run, and then shift to get the arguments. # -if [ $# -eq 0 ] +if [ $# -lt 2 ] then - echo "Usage: runlex <lex/flex command to run> [ arguments ]" 1>&2 + echo "Usage: runlex <Flex command to run> <path to sed> [ arguments ]" 1>&2 exit 1 fi @@ -51,18 +50,18 @@ esac shift # -# Check whether we have it. +# Check whether we have Flex. # if [ -z "${LEX}" ] then - echo "Neither lex nor flex was found" 1>&2 + echo "Flex was not found" 1>&2 exit 1 fi SED="$1" shift # -# Check whether we have it. +# Check whether we have sed. # if [ -z "${SED}" ] then @@ -72,7 +71,7 @@ fi # # Process the flags. We don't use getopt because we don't want to -# embed complete knowledge of what options are supported by Lex/Flex. +# embed complete knowledge of what options are supported by Flex. # flags="" outfile=lex.yy.c @@ -105,20 +104,27 @@ do done # -# OK, run it. +# Construct the name of the header file to generate; if the .c file is +# .../foo.c, the header file will be .../foo_lex.h. # -#echo "Running ${LEX} -o$outfile $flags $@" -${LEX} -o"$outfile" $flags "$@" +#echo "Getting header file name" +header_file=`dirname "$outfile"`/`basename "$outfile" .c`_lex.h + +# +# OK, run Flex. +# +#echo "Running ${LEX} -o\"$outfile\" --header-file=\"$header_file\" $flags \"$@\"" +${LEX} -o"$outfile" --header-file="$header_file" $flags "$@" # # Did it succeed? # -if [ $? -ne 0 ] +exitstatus=$? +if [ $exitstatus -ne 0 ] then # # No. Exit with the failing exit status. # - exitstatus=$? echo "${LEX} failed: exit status $exitstatus" exit $exitstatus fi @@ -129,6 +135,9 @@ fi # This gets in the way of building in a directory different from the # source directory. Try to work around this. # +# XXX - where is this an issue? +# +# # Is the outfile where we think it is? # outfile_base=`basename "$outfile"` @@ -138,6 +147,7 @@ then # No, it's not, but it is in the current directory. Put it # where it's supposed to be. # +echo "Moving $outfile_base to $outfile" mv "$outfile_base" "$outfile" if [ $? -ne 0 ] then @@ -145,47 +155,22 @@ then fi fi -echo "Wrote `basename $outfile`" - -# -# OK, now let's generate a header file declaring the relevant functions -# defined by the .c file; if the .c file is .../foo.c, the header file -# will be .../foo_lex.h. # -# This works around some other Flex suckage, wherein it doesn't declare -# the lex routine before defining it, causing compiler warnings. -# XXX - newer versions of Flex support --header-file=, to generate the -# appropriate header file. With those versions, we should use that option. -# - +# Is the header file where we think it is? # -# Get the name of the prefix; scan the source files for a %option prefix -# line. We use the last one. -# -#echo "Getting prefix" -prefix=`${SED} -n 's/%option[ ][ ]*prefix="\(.*\)".*/\1/p' "$@" | tail -1` -if [ ! -z "$prefix" ] +header_file_base=`basename "$header_file"` +if [ "$header_file_base" != "$header_file" -a \( ! -r "$header_file" \) -a -r "$header_file_base" ] then - prefixline="#define yylex ${prefix}lex" + # + # No, it's not, but it is in the current directory. Put it + # where it's supposed to be. + # +echo "Moving $header_file_base to $header_file" + mv "$header_file_base" "$header_file" + if [ $? -ne 0 ] + then + echo $? + fi fi -# -# Construct the name of the header file. -# -#echo "Getting header file name" -header_file=`dirname "$outfile"`/`basename "$outfile" .c`_lex.h - -# -# Spew out the declaration. -# -#echo "Writing $header_file" -cat <<EOF >$header_file -/* This is generated by runlex.sh. Do not edit it. */ -$prefixline -#ifndef YY_DECL -#define YY_DECL int yylex(void) -#endif -YY_DECL; -EOF - -echo "Wrote `basename $header_file`" +echo "Wrote $outfile and $header_file" |