diff options
author | Jim Meyering <jim@meyering.net> | 1997-04-29 15:48:14 +0000 |
---|---|---|
committer | Jim Meyering <jim@meyering.net> | 1997-04-29 15:48:14 +0000 |
commit | 44848c0887c0329a56a3b9120aa868d7aa0a4e7c (patch) | |
tree | bf4fb52c4786fd9d5a35c05f4dcc16822ee73980 | |
parent | f6a1207cf9149f9e0d5c70f5ac294341fbb276db (diff) | |
download | coreutils-44848c0887c0329a56a3b9120aa868d7aa0a4e7c.tar.xz |
update from automake-1.1o
-rwxr-xr-x | lib/ylwrap | 79 |
1 files changed, 56 insertions, 23 deletions
diff --git a/lib/ylwrap b/lib/ylwrap index 5b47e0551..8aaff0f6f 100755 --- a/lib/ylwrap +++ b/lib/ylwrap @@ -1,6 +1,7 @@ #! /bin/sh # ylwrap - wrapper for lex/yacc invocations. -# Written by Tom Tromey <tromey@cygnus.com>, Aug 11 1996 +# Copyright (C) 1996, 1997 Free Software Foundation, Inc. +# Written by Tom Tromey <tromey@cygnus.com>. # # 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 @@ -17,8 +18,9 @@ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # Usage: -# ylwrap PROG [OUTPUT DESIRED]... -- [ARGS]... -# * PROG is program to run. +# ylwrap PROGRAM INPUT [OUTPUT DESIRED]... -- [ARGS]... +# * PROGRAM is program to run. +# * INPUT is the input file # * OUTPUT is file PROG generates # * DESIRED is file we actually want # * ARGS are passed to PROG @@ -28,6 +30,21 @@ prog="$1" shift +# The input. +input="$1" +shift +case "$input" in + /*) + # 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. + input="`pwd`/$input" + ;; +esac + pairlist= while test "$#" -ne 0; do if test "$1" = "--"; then @@ -37,26 +54,42 @@ while test "$#" -ne 0; do shift done -$prog ${1+"$@"} || exit $? +# FIXME: add hostname here for parallel makes that run commands on +# other machines. But that might take us over the 14-char limit. +dirname=ylwrap$$ +trap "cd `pwd`; rm -rf $dirname > /dev/null 2>&1" 1 2 3 15 +mkdir $dirname || exit 1 -set X $pairlist -shift -status=0 -first=yes -while test "$#" -ne 0; do - if test -f "$1"; then - mv "$1" "$2" || 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 is not - # specified, we don't want an error when the header file is - # "missing". - if test $first = yes; then - status=1 - fi - fi - shift +cd $dirname +$prog ${1+"$@"} "$input" +status=$? + +if test $status -eq 0; then + set X $pairlist shift - first=no -done + first=yes + while test "$#" -ne 0; do + if test -f "$1"; then + mv "$1" "../$2" || 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 + # is not specified, we don't want an error when the header + # file is "missing". + if test $first = yes; then + status=1 + fi + fi + shift + shift + first=no + done +else + status=$? +fi + +# Remove the directory. +cd .. +rm -rf $dirname + exit $status |