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