128a8b562SDavid E. O'Brien#! /bin/sh 228a8b562SDavid E. O'Brien# Wrapper for compilers which do not understand `-c -o'. 328a8b562SDavid E. O'Brien 428a8b562SDavid E. O'Brienscriptversion=2005-05-14.22 528a8b562SDavid E. O'Brien 628a8b562SDavid E. O'Brien# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. 728a8b562SDavid E. O'Brien# Written by Tom Tromey <tromey@cygnus.com>. 828a8b562SDavid E. O'Brien# 928a8b562SDavid E. O'Brien# This program is free software; you can redistribute it and/or modify 1028a8b562SDavid E. O'Brien# it under the terms of the GNU General Public License as published by 1128a8b562SDavid E. O'Brien# the Free Software Foundation; either version 2, or (at your option) 1228a8b562SDavid E. O'Brien# any later version. 1328a8b562SDavid E. O'Brien# 1428a8b562SDavid E. O'Brien# This program is distributed in the hope that it will be useful, 1528a8b562SDavid E. O'Brien# but WITHOUT ANY WARRANTY; without even the implied warranty of 1628a8b562SDavid E. O'Brien# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1728a8b562SDavid E. O'Brien# GNU General Public License for more details. 1828a8b562SDavid E. O'Brien# 1928a8b562SDavid E. O'Brien# You should have received a copy of the GNU General Public License 2028a8b562SDavid E. O'Brien# along with this program; if not, write to the Free Software 2128a8b562SDavid E. O'Brien# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 2228a8b562SDavid E. O'Brien 2328a8b562SDavid E. O'Brien# As a special exception to the GNU General Public License, if you 2428a8b562SDavid E. O'Brien# distribute this file as part of a program that contains a 2528a8b562SDavid E. O'Brien# configuration script generated by Autoconf, you may include it under 2628a8b562SDavid E. O'Brien# the same distribution terms that you use for the rest of that program. 2728a8b562SDavid E. O'Brien 2828a8b562SDavid E. O'Brien# This file is maintained in Automake, please report 2928a8b562SDavid E. O'Brien# bugs to <bug-automake@gnu.org> or send patches to 3028a8b562SDavid E. O'Brien# <automake-patches@gnu.org>. 3128a8b562SDavid E. O'Brien 3228a8b562SDavid E. O'Briencase $1 in 3328a8b562SDavid E. O'Brien '') 3428a8b562SDavid E. O'Brien echo "$0: No command. Try \`$0 --help' for more information." 1>&2 3528a8b562SDavid E. O'Brien exit 1; 3628a8b562SDavid E. O'Brien ;; 3728a8b562SDavid E. O'Brien -h | --h*) 3828a8b562SDavid E. O'Brien cat <<\EOF 3928a8b562SDavid E. O'BrienUsage: compile [--help] [--version] PROGRAM [ARGS] 4028a8b562SDavid E. O'Brien 4128a8b562SDavid E. O'BrienWrapper for compilers which do not understand `-c -o'. 4228a8b562SDavid E. O'BrienRemove `-o dest.o' from ARGS, run PROGRAM with the remaining 4328a8b562SDavid E. O'Brienarguments, and rename the output as expected. 4428a8b562SDavid E. O'Brien 4528a8b562SDavid E. O'BrienIf you are trying to build a whole package this is not the 4628a8b562SDavid E. O'Brienright script to run: please start by reading the file `INSTALL'. 4728a8b562SDavid E. O'Brien 4828a8b562SDavid E. O'BrienReport bugs to <bug-automake@gnu.org>. 4928a8b562SDavid E. O'BrienEOF 5028a8b562SDavid E. O'Brien exit $? 5128a8b562SDavid E. O'Brien ;; 5228a8b562SDavid E. O'Brien -v | --v*) 5328a8b562SDavid E. O'Brien echo "compile $scriptversion" 5428a8b562SDavid E. O'Brien exit $? 5528a8b562SDavid E. O'Brien ;; 5628a8b562SDavid E. O'Brienesac 5728a8b562SDavid E. O'Brien 5828a8b562SDavid E. O'Brienofile= 5928a8b562SDavid E. O'Briencfile= 6028a8b562SDavid E. O'Brieneat= 6128a8b562SDavid E. O'Brien 6228a8b562SDavid E. O'Brienfor arg 6328a8b562SDavid E. O'Briendo 6428a8b562SDavid E. O'Brien if test -n "$eat"; then 6528a8b562SDavid E. O'Brien eat= 6628a8b562SDavid E. O'Brien else 6728a8b562SDavid E. O'Brien case $1 in 6828a8b562SDavid E. O'Brien -o) 6928a8b562SDavid E. O'Brien # configure might choose to run compile as `compile cc -o foo foo.c'. 7028a8b562SDavid E. O'Brien # So we strip `-o arg' only if arg is an object. 7128a8b562SDavid E. O'Brien eat=1 7228a8b562SDavid E. O'Brien case $2 in 7328a8b562SDavid E. O'Brien *.o | *.obj) 7428a8b562SDavid E. O'Brien ofile=$2 7528a8b562SDavid E. O'Brien ;; 7628a8b562SDavid E. O'Brien *) 7728a8b562SDavid E. O'Brien set x "$@" -o "$2" 7828a8b562SDavid E. O'Brien shift 7928a8b562SDavid E. O'Brien ;; 8028a8b562SDavid E. O'Brien esac 8128a8b562SDavid E. O'Brien ;; 8228a8b562SDavid E. O'Brien *.c) 8328a8b562SDavid E. O'Brien cfile=$1 8428a8b562SDavid E. O'Brien set x "$@" "$1" 8528a8b562SDavid E. O'Brien shift 8628a8b562SDavid E. O'Brien ;; 8728a8b562SDavid E. O'Brien *) 8828a8b562SDavid E. O'Brien set x "$@" "$1" 8928a8b562SDavid E. O'Brien shift 9028a8b562SDavid E. O'Brien ;; 9128a8b562SDavid E. O'Brien esac 9228a8b562SDavid E. O'Brien fi 9328a8b562SDavid E. O'Brien shift 9428a8b562SDavid E. O'Briendone 9528a8b562SDavid E. O'Brien 9628a8b562SDavid E. O'Brienif test -z "$ofile" || test -z "$cfile"; then 9728a8b562SDavid E. O'Brien # If no `-o' option was seen then we might have been invoked from a 9828a8b562SDavid E. O'Brien # pattern rule where we don't need one. That is ok -- this is a 9928a8b562SDavid E. O'Brien # normal compilation that the losing compiler can handle. If no 10028a8b562SDavid E. O'Brien # `.c' file was seen then we are probably linking. That is also 10128a8b562SDavid E. O'Brien # ok. 10228a8b562SDavid E. O'Brien exec "$@" 10328a8b562SDavid E. O'Brienfi 10428a8b562SDavid E. O'Brien 10528a8b562SDavid E. O'Brien# Name of file we expect compiler to create. 10628a8b562SDavid E. O'Briencofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'` 10728a8b562SDavid E. O'Brien 10828a8b562SDavid E. O'Brien# Create the lock directory. 10928a8b562SDavid E. O'Brien# Note: use `[/.-]' here to ensure that we don't use the same name 11028a8b562SDavid E. O'Brien# that we are using for the .o file. Also, base the name on the expected 11128a8b562SDavid E. O'Brien# object file name, since that is what matters with a parallel build. 11228a8b562SDavid E. O'Brienlockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d 11328a8b562SDavid E. O'Brienwhile true; do 11428a8b562SDavid E. O'Brien if mkdir "$lockdir" >/dev/null 2>&1; then 11528a8b562SDavid E. O'Brien break 11628a8b562SDavid E. O'Brien fi 11728a8b562SDavid E. O'Brien sleep 1 11828a8b562SDavid E. O'Briendone 11928a8b562SDavid E. O'Brien# FIXME: race condition here if user kills between mkdir and trap. 12028a8b562SDavid E. O'Brientrap "rmdir '$lockdir'; exit 1" 1 2 15 12128a8b562SDavid E. O'Brien 12228a8b562SDavid E. O'Brien# Run the compile. 12328a8b562SDavid E. O'Brien"$@" 12428a8b562SDavid E. O'Brienret=$? 12528a8b562SDavid E. O'Brien 12628a8b562SDavid E. O'Brienif test -f "$cofile"; then 12728a8b562SDavid E. O'Brien mv "$cofile" "$ofile" 12828a8b562SDavid E. O'Brienelif test -f "${cofile}bj"; then 12928a8b562SDavid E. O'Brien mv "${cofile}bj" "$ofile" 13028a8b562SDavid E. O'Brienfi 13128a8b562SDavid E. O'Brien 13228a8b562SDavid E. O'Brienrmdir "$lockdir" 13328a8b562SDavid E. O'Brienexit $ret 13428a8b562SDavid E. O'Brien 13528a8b562SDavid E. O'Brien# Local Variables: 13628a8b562SDavid E. O'Brien# mode: shell-script 13728a8b562SDavid E. O'Brien# sh-indentation: 2 13828a8b562SDavid E. O'Brien# eval: (add-hook 'write-file-hooks 'time-stamp) 13928a8b562SDavid E. O'Brien# time-stamp-start: "scriptversion=" 14028a8b562SDavid E. O'Brien# time-stamp-format: "%:y-%02m-%02d.%02H" 14128a8b562SDavid E. O'Brien# time-stamp-end: "$" 14228a8b562SDavid E. O'Brien# End: 143