diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2001-06-14 18:09:24 +0000 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2001-06-14 18:09:24 +0000 |
commit | 7bd5998574d02fa9d4a67e56e2f4b620da55aed3 (patch) | |
tree | f941b109180698b9cac3497f78585eabd1a65bb1 /ylwrap | |
parent | 98775194f9a5417fa532e39125ecb48cc6fda48f (diff) | |
download | ipacct-7bd5998574d02fa9d4a67e56e2f4b620da55aed3.tar.gz ipacct-7bd5998574d02fa9d4a67e56e2f4b620da55aed3.tar.bz2 |
update
Diffstat (limited to 'ylwrap')
-rwxr-xr-x | ylwrap | 74 |
1 files changed, 59 insertions, 15 deletions
@@ -1,8 +1,7 @@ #! /bin/sh # ylwrap - wrapper for lex/yacc invocations. -# Copyright (C) 1996, 1997 Free Software Foundation, Inc. +# Copyright 1996, 1997, 1998, 1999 Free Software Foundation, Inc. # Written by Tom Tromey <tromey@cygnus.com>. -# Modified by Sergey Poznyakoff <gray@farlep.net>. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -19,12 +18,13 @@ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # Usage: -# ylwrap PROGRAM INPUT [OUTPUT DESIRED]... -- [-yy repl] [ARGS]... -# * PROGRAM is program to run. +# ylwrap PROGRAM [ARGS] INPUT [OUTPUT DESIRED]... -- [-yy repl] [ARGS]... +# * PROGRAM is program to run; options can follow but must start with `-'. # * INPUT is the input file # * OUTPUT is file PROG generates # * DESIRED is file we actually want # * ARGS are passed to PROG +# * Optional -yy introduces the sequence to replace yy prefixes with. # Any number of OUTPUT,DESIRED pairs may be used. # The program to run. @@ -32,25 +32,46 @@ prog="$1" shift # Make any relative path in $prog absolute. case "$prog" in - /*) ;; + /* | [A-Za-z]:*) ;; */*) prog="`pwd`/$prog" ;; esac +# We also have to accept options here and append them to the program. +# Why? Suppose YACC is set to `bison -y'. Clearly nobody uses +# ylwrap, or this would have been discovered earlier! +while :; do + case "$1" in + -*) + prog="$prog $1" + shift + ;; + *) + break + ;; + esac +done + # The input. input="$1" shift case "$input" in - /*) + /* | [A-Za-z]:*) # Absolute path; do nothing. ;; *) - # Relative path. Make it absolute. Why? Because otherwise any - # debugging info in the generated file will point to the wrong - # place. This is really gross. + # Relative path. Make it absolute. input="`pwd`/$input" ;; esac +# The directory holding the input. +input_dir="`echo $input | sed -e 's,/[^/]*$,,'`" +# Quote $INPUT_DIR so we can use it in a regexp. +# FIXME: really we should care about more than `.'. +input_rx="`echo $input_dir | sed -e 's,\.,\\\.,g'`" + +echo "got $input_rx" + pairlist= while test "$#" -ne 0; do if test "$1" = "--"; then @@ -80,6 +101,7 @@ trap "cd `pwd`; rm -rf $dirname > /dev/null 2>&1" 1 2 3 15 mkdir $dirname || exit 1 cd $dirname + $prog ${1+"$@"} "$input" status=$? @@ -87,21 +109,43 @@ if test $status -eq 0; then set X $pairlist shift first=yes + # Since DOS filename conventions don't allow two dots, + # the DOS version of Bison writes out y_tab.c instead of y.tab.c + # and y_tab.h instead of y.tab.h. Test to see if this is the case. + y_tab_nodot="no" + if test -f y_tab.c || test -f y_tab.h; then + y_tab_nodot="yes" + fi + while test "$#" -ne 0; do - if test -f "$1"; then + from="$1" + # Handle y_tab.c and y_tab.h output by DOS + if test $y_tab_nodot = "yes"; then + if test $from = "y.tab.c"; then + from="y_tab.c" + else + if test $from = "y.tab.h"; then + from="y_tab.h" + fi + fi + fi + if test -f "$from"; then # If $2 is an absolute path name, then just use that, # otherwise prepend `../'. case "$2" in - /*) target="$2";; + /* | [A-Za-z]:*) target="$2";; *) target="../$2";; esac - S=`basename $1 | sed 's/\./\\\./g'` - D=`basename $2 | sed 's/\./\\\./g'` - EXPR="s/$S/$D/" + + # Edit out `#line' or `#' directives. We don't want the + # resulting debug information to point at an absolute srcdir; + # it is better for it to just mention the .y file with no + # path. + EXPR="/^#/ s,$input_rx/,," if [ ! -z "$YYREPL" ]; then EXPR="$EXPR;s/yy/$YYREPL/g" fi - sed "$EXPR" "$1" > "$target" || status=$? + sed -e "$EXPR" "$from" > "$target" || status=$? else # A missing file is only an error for the first file. This # is a blatant hack to let us support using "yacc -d". If -d |