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