aboutsummaryrefslogtreecommitdiff
path: root/ylwrap
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2001-06-14 18:09:24 +0000
committerSergey Poznyakoff <gray@gnu.org.ua>2001-06-14 18:09:24 +0000
commit7bd5998574d02fa9d4a67e56e2f4b620da55aed3 (patch)
treef941b109180698b9cac3497f78585eabd1a65bb1 /ylwrap
parent98775194f9a5417fa532e39125ecb48cc6fda48f (diff)
downloadipacct-7bd5998574d02fa9d4a67e56e2f4b620da55aed3.tar.gz
ipacct-7bd5998574d02fa9d4a67e56e2f4b620da55aed3.tar.bz2
update
Diffstat (limited to 'ylwrap')
-rwxr-xr-xylwrap74
1 files changed, 59 insertions, 15 deletions
diff --git a/ylwrap b/ylwrap
index fcf036d..d8f37e6 100755
--- a/ylwrap
+++ b/ylwrap
@@ -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

Return to:

Send suggestions and report system problems to the System administrator.