#! /bin/sh

# Wrapper for compilers which do not understand `-c -o'.

# Copyright 1999-2000 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.

# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.

# Usage:
# compile PROGRAM [ARGS]...
# `-o FOO.o' is removed from the args passed to the actual compile.

prog=$1
shift

ofile=
cfile=
args=
while test $# -gt 0; do
   case "$1" in
    -o)
       # configure might choose to run compile as `compile cc -o foo foo.c'.
       # So we do something ugly here.
       ofile=$2
       shift
       case "$ofile" in
	*.o | *.obj)
	   ;;
	*)
	   args="$args -o $ofile"
	   ofile=
	   ;;
       esac
       ;;
    *.c)
       cfile=$1
       args="$args $1"
       ;;
    *)
       args="$args $1"
       ;;
   esac
   shift
done

if test -z "$ofile" || test -z "$cfile"; then
   # If no `-o' option was seen then we might have been invoked from a
   # pattern rule where we don't need one.  That is ok -- this is a
   # normal compilation that the losing compiler can handle.  If no
   # `.c' file was seen then we are probably linking.  That is also
   # ok.
   exec "$prog" $args
fi

# Name of file we expect compiler to create.
cofile=`echo $cfile | sed -e 's|^.*/||' -e 's/\.c$/.o/'`

# Create the lock directory.
# Note: use `[/.-]' here to ensure that we don't use the same name
# that we are using for the .o file.  Also, base the name on the expected
# object file name, since that is what matters with a parallel build.
lockdir=`echo $cofile | sed -e 's|[/.-]|_|g'`.d
while true; do
   if mkdir $lockdir > /dev/null 2>&1; then
      break
   fi
   sleep 1
done
# FIXME: race condition here if user kills between mkdir and trap.
trap "rmdir $lockdir; exit 1" 1 2 15

# Run the compile.
"$prog" $args
status=$?

if test -f "$cofile"; then
   mv "$cofile" "$ofile"
fi

rmdir $lockdir
exit $status
