1bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#! /bin/sh 2bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# Wrapper for compilers which do not understand `-c -o'. 3bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 4bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonscriptversion=2005-05-14.22 5bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 6bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. 7bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# Written by Tom Tromey <tromey@cygnus.com>. 8bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# 9bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# This program is free software; you can redistribute it and/or modify 10bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# it under the terms of the GNU General Public License as published by 11bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# the Free Software Foundation; either version 2, or (at your option) 12bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# any later version. 13bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# 14bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# This program is distributed in the hope that it will be useful, 15bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# but WITHOUT ANY WARRANTY; without even the implied warranty of 16bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# GNU General Public License for more details. 18bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# 19bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# You should have received a copy of the GNU General Public License 20bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# along with this program; if not, write to the Free Software 21bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 22bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 23bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# As a special exception to the GNU General Public License, if you 24bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# distribute this file as part of a program that contains a 25bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# configuration script generated by Autoconf, you may include it under 26bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# the same distribution terms that you use for the rest of that program. 27bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 28bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# This file is maintained in Automake, please report 29bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# bugs to <bug-automake@gnu.org> or send patches to 30bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# <automake-patches@gnu.org>. 31bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 32bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsoncase $1 in 33bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson '') 34bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson echo "$0: No command. Try \`$0 --help' for more information." 1>&2 35bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson exit 1; 36bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson ;; 37bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson -h | --h*) 38bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson cat <<\EOF 39bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee WilsonUsage: compile [--help] [--version] PROGRAM [ARGS] 40bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 41bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee WilsonWrapper for compilers which do not understand `-c -o'. 42bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee WilsonRemove `-o dest.o' from ARGS, run PROGRAM with the remaining 43bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonarguments, and rename the output as expected. 44bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 45bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee WilsonIf you are trying to build a whole package this is not the 46bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonright script to run: please start by reading the file `INSTALL'. 47bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 48bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee WilsonReport bugs to <bug-automake@gnu.org>. 49bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee WilsonEOF 50bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson exit $? 51bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson ;; 52bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson -v | --v*) 53bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson echo "compile $scriptversion" 54bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson exit $? 55bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson ;; 56bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonesac 57bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 58bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonofile= 59bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsoncfile= 60bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsoneat= 61bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 62bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonfor arg 63bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsondo 64bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson if test -n "$eat"; then 65bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson eat= 66bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson else 67bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson case $1 in 68bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson -o) 69bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson # configure might choose to run compile as `compile cc -o foo foo.c'. 70bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson # So we strip `-o arg' only if arg is an object. 71bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson eat=1 72bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson case $2 in 73bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson *.o | *.obj) 74bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson ofile=$2 75bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson ;; 76bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson *) 77bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson set x "$@" -o "$2" 78bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson shift 79bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson ;; 80bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson esac 81bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson ;; 82bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson *.c) 83bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson cfile=$1 84bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson set x "$@" "$1" 85bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson shift 86bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson ;; 87bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson *) 88bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson set x "$@" "$1" 89bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson shift 90bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson ;; 91bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson esac 92bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson fi 93bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson shift 94bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsondone 95bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 96bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonif test -z "$ofile" || test -z "$cfile"; then 97bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson # If no `-o' option was seen then we might have been invoked from a 98bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson # pattern rule where we don't need one. That is ok -- this is a 99bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson # normal compilation that the losing compiler can handle. If no 100bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson # `.c' file was seen then we are probably linking. That is also 101bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson # ok. 102bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson exec "$@" 103bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonfi 104bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 105bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# Name of file we expect compiler to create. 106bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsoncofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'` 107bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 108bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# Create the lock directory. 109bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# Note: use `[/.-]' here to ensure that we don't use the same name 110bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# that we are using for the .o file. Also, base the name on the expected 111bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# object file name, since that is what matters with a parallel build. 112bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonlockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d 113bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonwhile true; do 114bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson if mkdir "$lockdir" >/dev/null 2>&1; then 115bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson break 116bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson fi 117bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson sleep 1 118bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsondone 119bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# FIXME: race condition here if user kills between mkdir and trap. 120bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsontrap "rmdir '$lockdir'; exit 1" 1 2 15 121bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 122bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# Run the compile. 123bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson"$@" 124bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonret=$? 125bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 126bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonif test -f "$cofile"; then 127bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson mv "$cofile" "$ofile" 128bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonelif test -f "${cofile}bj"; then 129bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson mv "${cofile}bj" "$ofile" 130bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonfi 131bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 132bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonrmdir "$lockdir" 133bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonexit $ret 134bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 135bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# Local Variables: 136bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# mode: shell-script 137bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# sh-indentation: 2 138bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# eval: (add-hook 'write-file-hooks 'time-stamp) 139bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# time-stamp-start: "scriptversion=" 140bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# time-stamp-format: "%:y-%02m-%02d.%02H" 141bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# time-stamp-end: "$" 142bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson# End: 143