nkeynes@1032: #! /bin/sh nkeynes@1032: # Wrapper for compilers which do not understand `-c -o'. nkeynes@1032: nkeynes@1032: scriptversion=2005-05-14.22 nkeynes@1032: nkeynes@1032: # Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. nkeynes@1032: # Written by Tom Tromey . nkeynes@1032: # nkeynes@1032: # This program is free software; you can redistribute it and/or modify nkeynes@1032: # it under the terms of the GNU General Public License as published by nkeynes@1032: # the Free Software Foundation; either version 2, or (at your option) nkeynes@1032: # any later version. nkeynes@1032: # nkeynes@1032: # This program is distributed in the hope that it will be useful, nkeynes@1032: # but WITHOUT ANY WARRANTY; without even the implied warranty of nkeynes@1032: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the nkeynes@1032: # GNU General Public License for more details. nkeynes@1032: # nkeynes@1032: # You should have received a copy of the GNU General Public License nkeynes@1032: # along with this program; if not, write to the Free Software nkeynes@1032: # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. nkeynes@1032: nkeynes@1032: # As a special exception to the GNU General Public License, if you nkeynes@1032: # distribute this file as part of a program that contains a nkeynes@1032: # configuration script generated by Autoconf, you may include it under nkeynes@1032: # the same distribution terms that you use for the rest of that program. nkeynes@1032: nkeynes@1032: # This file is maintained in Automake, please report nkeynes@1032: # bugs to or send patches to nkeynes@1032: # . nkeynes@1032: nkeynes@1032: case $1 in nkeynes@1032: '') nkeynes@1032: echo "$0: No command. Try \`$0 --help' for more information." 1>&2 nkeynes@1032: exit 1; nkeynes@1032: ;; nkeynes@1032: -h | --h*) nkeynes@1032: cat <<\EOF nkeynes@1032: Usage: compile [--help] [--version] PROGRAM [ARGS] nkeynes@1032: nkeynes@1032: Wrapper for compilers which do not understand `-c -o'. nkeynes@1032: Remove `-o dest.o' from ARGS, run PROGRAM with the remaining nkeynes@1032: arguments, and rename the output as expected. nkeynes@1032: nkeynes@1032: If you are trying to build a whole package this is not the nkeynes@1032: right script to run: please start by reading the file `INSTALL'. nkeynes@1032: nkeynes@1032: Report bugs to . nkeynes@1032: EOF nkeynes@1032: exit $? nkeynes@1032: ;; nkeynes@1032: -v | --v*) nkeynes@1032: echo "compile $scriptversion" nkeynes@1032: exit $? nkeynes@1032: ;; nkeynes@1032: esac nkeynes@1032: nkeynes@1032: ofile= nkeynes@1032: cfile= nkeynes@1032: eat= nkeynes@1032: nkeynes@1032: for arg nkeynes@1032: do nkeynes@1032: if test -n "$eat"; then nkeynes@1032: eat= nkeynes@1032: else nkeynes@1032: case $1 in nkeynes@1032: -o) nkeynes@1032: # configure might choose to run compile as `compile cc -o foo foo.c'. nkeynes@1032: # So we strip `-o arg' only if arg is an object. nkeynes@1032: eat=1 nkeynes@1032: case $2 in nkeynes@1032: *.o | *.obj) nkeynes@1032: ofile=$2 nkeynes@1032: ;; nkeynes@1032: *) nkeynes@1032: set x "$@" -o "$2" nkeynes@1032: shift nkeynes@1032: ;; nkeynes@1032: esac nkeynes@1032: ;; nkeynes@1032: *.c) nkeynes@1032: cfile=$1 nkeynes@1032: set x "$@" "$1" nkeynes@1032: shift nkeynes@1032: ;; nkeynes@1032: *) nkeynes@1032: set x "$@" "$1" nkeynes@1032: shift nkeynes@1032: ;; nkeynes@1032: esac nkeynes@1032: fi nkeynes@1032: shift nkeynes@1032: done nkeynes@1032: nkeynes@1032: if test -z "$ofile" || test -z "$cfile"; then nkeynes@1032: # If no `-o' option was seen then we might have been invoked from a nkeynes@1032: # pattern rule where we don't need one. That is ok -- this is a nkeynes@1032: # normal compilation that the losing compiler can handle. If no nkeynes@1032: # `.c' file was seen then we are probably linking. That is also nkeynes@1032: # ok. nkeynes@1032: exec "$@" nkeynes@1032: fi nkeynes@1032: nkeynes@1032: # Name of file we expect compiler to create. nkeynes@1032: cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'` nkeynes@1032: nkeynes@1032: # Create the lock directory. nkeynes@1032: # Note: use `[/.-]' here to ensure that we don't use the same name nkeynes@1032: # that we are using for the .o file. Also, base the name on the expected nkeynes@1032: # object file name, since that is what matters with a parallel build. nkeynes@1032: lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d nkeynes@1032: while true; do nkeynes@1032: if mkdir "$lockdir" >/dev/null 2>&1; then nkeynes@1032: break nkeynes@1032: fi nkeynes@1032: sleep 1 nkeynes@1032: done nkeynes@1032: # FIXME: race condition here if user kills between mkdir and trap. nkeynes@1032: trap "rmdir '$lockdir'; exit 1" 1 2 15 nkeynes@1032: nkeynes@1032: # Run the compile. nkeynes@1032: "$@" nkeynes@1032: ret=$? nkeynes@1032: nkeynes@1032: if test -f "$cofile"; then nkeynes@1032: mv "$cofile" "$ofile" nkeynes@1032: elif test -f "${cofile}bj"; then nkeynes@1032: mv "${cofile}bj" "$ofile" nkeynes@1032: fi nkeynes@1032: nkeynes@1032: rmdir "$lockdir" nkeynes@1032: exit $ret nkeynes@1032: nkeynes@1032: # Local Variables: nkeynes@1032: # mode: shell-script nkeynes@1032: # sh-indentation: 2 nkeynes@1032: # eval: (add-hook 'write-file-hooks 'time-stamp) nkeynes@1032: # time-stamp-start: "scriptversion=" nkeynes@1032: # time-stamp-format: "%:y-%02m-%02d.%02H" nkeynes@1032: # time-stamp-end: "$" nkeynes@1032: # End: