diff options
Diffstat (limited to 'compile')
| -rwxr-xr-x | compile | 99 | 
1 files changed, 99 insertions, 0 deletions
diff --git a/compile b/compile new file mode 100755 index 00000000..9bb997a6 --- /dev/null +++ b/compile @@ -0,0 +1,99 @@ +#! /bin/sh + +# Wrapper for compilers which do not understand `-c -o'. + +# Copyright 1999, 2000 Free Software Foundation, Inc. +# Written by Tom Tromey <[email protected]>. +# +# 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  | 
