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