changeset 912:ce1e96b6f9f0

update from automake-1.1o
author Jim Meyering <jim@meyering.net>
date Tue, 29 Apr 1997 15:48:14 +0000
parents 63b657858492
children 208ed5b05e47
files lib/ylwrap
diffstat 1 files changed, 56 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- 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 @@
    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
+
+cd $dirname
+$prog ${1+"$@"} "$input"
+status=$?
 
-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
+if test $status -eq 0; then
+   set X $pairlist
+   shift
+   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
-   fi
-   shift
-   shift
-   first=no
-done
+      shift
+      shift
+      first=no
+   done
+else
+   status=$?
+fi
+
+# Remove the directory.
+cd ..
+rm -rf $dirname
+
 exit $status