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