#! /bin/sh
# ylwrap - wrapper for lex/yacc invocations.
# 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
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

# Usage:
#     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
# Any number of OUTPUT,DESIRED pairs may be used.

# The program to run.
prog="$1"
shift
# Make any relative path in $prog absolute.
case "$prog" in
 /*) ;;
 */*) prog="`pwd`/$prog" ;;
esac

# 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
      shift
      break
   fi
   pairlist="$pairlist $1"
   shift
done

# 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=$?

if test $status -eq 0; then
   set X $pairlist
   shift
   first=yes
   while test "$#" -ne 0; do
      if test -f "$1"; then
         # If $2 is an absolute path name, then just use that,
         # otherwise prepend `../'.
         case "$2" in
	   /*) target="$2";;
	   *) target="../$2";;
	 esac
	 mv "$1" "$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
	 # 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
