Annotation of OpenXM/src/ox_toolkit/compile, Revision 1.1
1.1 ! ohara 1: #! /bin/sh
! 2:
! 3: # Wrapper for compilers which do not understand `-c -o'.
! 4:
! 5: # Copyright 1999, 2000 Free Software Foundation, Inc.
! 6: # Written by Tom Tromey <tromey@cygnus.com>.
! 7: #
! 8: # This program is free software; you can redistribute it and/or modify
! 9: # it under the terms of the GNU General Public License as published by
! 10: # the Free Software Foundation; either version 2, or (at your option)
! 11: # any later version.
! 12: #
! 13: # This program is distributed in the hope that it will be useful,
! 14: # but WITHOUT ANY WARRANTY; without even the implied warranty of
! 15: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! 16: # GNU General Public License for more details.
! 17: #
! 18: # You should have received a copy of the GNU General Public License
! 19: # along with this program; if not, write to the Free Software
! 20: # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
! 21:
! 22: # As a special exception to the GNU General Public License, if you
! 23: # distribute this file as part of a program that contains a
! 24: # configuration script generated by Autoconf, you may include it under
! 25: # the same distribution terms that you use for the rest of that program.
! 26:
! 27: # Usage:
! 28: # compile PROGRAM [ARGS]...
! 29: # `-o FOO.o' is removed from the args passed to the actual compile.
! 30:
! 31: prog=$1
! 32: shift
! 33:
! 34: ofile=
! 35: cfile=
! 36: args=
! 37: while test $# -gt 0; do
! 38: case "$1" in
! 39: -o)
! 40: # configure might choose to run compile as `compile cc -o foo foo.c'.
! 41: # So we do something ugly here.
! 42: ofile=$2
! 43: shift
! 44: case "$ofile" in
! 45: *.o | *.obj)
! 46: ;;
! 47: *)
! 48: args="$args -o $ofile"
! 49: ofile=
! 50: ;;
! 51: esac
! 52: ;;
! 53: *.c)
! 54: cfile=$1
! 55: args="$args $1"
! 56: ;;
! 57: *)
! 58: args="$args $1"
! 59: ;;
! 60: esac
! 61: shift
! 62: done
! 63:
! 64: if test -z "$ofile" || test -z "$cfile"; then
! 65: # If no `-o' option was seen then we might have been invoked from a
! 66: # pattern rule where we don't need one. That is ok -- this is a
! 67: # normal compilation that the losing compiler can handle. If no
! 68: # `.c' file was seen then we are probably linking. That is also
! 69: # ok.
! 70: exec "$prog" $args
! 71: fi
! 72:
! 73: # Name of file we expect compiler to create.
! 74: cofile=`echo $cfile | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
! 75:
! 76: # Create the lock directory.
! 77: # Note: use `[/.-]' here to ensure that we don't use the same name
! 78: # that we are using for the .o file. Also, base the name on the expected
! 79: # object file name, since that is what matters with a parallel build.
! 80: lockdir=`echo $cofile | sed -e 's|[/.-]|_|g'`.d
! 81: while true; do
! 82: if mkdir $lockdir > /dev/null 2>&1; then
! 83: break
! 84: fi
! 85: sleep 1
! 86: done
! 87: # FIXME: race condition here if user kills between mkdir and trap.
! 88: trap "rmdir $lockdir; exit 1" 1 2 15
! 89:
! 90: # Run the compile.
! 91: "$prog" $args
! 92: status=$?
! 93:
! 94: if test -f "$cofile"; then
! 95: mv "$cofile" "$ofile"
! 96: fi
! 97:
! 98: rmdir $lockdir
! 99: exit $status
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>