15b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#! /bin/sh
25b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# Wrapper for compilers which do not understand `-c -o'.
35b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
45b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectscriptversion=2004-10-12.08
55b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
65b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# Copyright (C) 1999, 2000, 2003, 2004 Free Software Foundation, Inc.
75b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# Written by Tom Tromey <tromey@cygnus.com>.
85b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#
95b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# This program is free software; you can redistribute it and/or modify
105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# it under the terms of the GNU General Public License as published by
115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# the Free Software Foundation; either version 2, or (at your option)
125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# any later version.
135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#
145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# This program is distributed in the hope that it will be useful,
155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# but WITHOUT ANY WARRANTY; without even the implied warranty of
165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# GNU General Public License for more details.
185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#
195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# You should have received a copy of the GNU General Public License
205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# along with this program; if not, write to the Free Software
215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# As a special exception to the GNU General Public License, if you
245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# distribute this file as part of a program that contains a
255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# configuration script generated by Autoconf, you may include it under
265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# the same distribution terms that you use for the rest of that program.
275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# This file is maintained in Automake, please report
295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# bugs to <bug-automake@gnu.org> or send patches to
305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# <automake-patches@gnu.org>.
315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectcase $1 in
335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  '')
345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project     exit 1;
365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project     ;;
375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  -h | --h*)
385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    cat <<\EOF
395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source ProjectUsage: compile [--help] [--version] PROGRAM [ARGS]
405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source ProjectWrapper for compilers which do not understand `-c -o'.
425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source ProjectRemove `-o dest.o' from ARGS, run PROGRAM with the remaining
435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectarguments, and rename the output as expected.
445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source ProjectIf you are trying to build a whole package this is not the
465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectright script to run: please start by reading the file `INSTALL'.
475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source ProjectReport bugs to <bug-automake@gnu.org>.
495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source ProjectEOF
505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    exit 0
515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    ;;
525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  -v | --v*)
535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    echo "compile $scriptversion"
545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    exit 0
555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    ;;
565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectesac
575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectofile=
595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectcfile=
605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecteat=
615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectfor arg
635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectdo
645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  if test -n "$eat"; then
655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    eat=
665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  else
675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    case $1 in
685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      -o)
695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	# configure might choose to run compile as `compile cc -o foo foo.c'.
705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	# So we strip `-o arg' only if arg is an object.
715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	eat=1
725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	case $2 in
735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	  *.o | *.obj)
745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	    ofile=$2
755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	    ;;
765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	  *)
775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	    set x "$@" -o "$2"
785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	    shift
795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	    ;;
805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	esac
815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	;;
825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      *.c)
835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	cfile=$1
845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	set x "$@" "$1"
855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	shift
865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	;;
875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project      *)
885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	set x "$@" "$1"
895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	shift
905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project	;;
915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    esac
925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  fi
935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  shift
945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectdone
955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectif test -z "$ofile" || test -z "$cfile"; then
975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  # If no `-o' option was seen then we might have been invoked from a
985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  # pattern rule where we don't need one.  That is ok -- this is a
995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  # normal compilation that the losing compiler can handle.  If no
1005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  # `.c' file was seen then we are probably linking.  That is also
1015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  # ok.
1025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  exec "$@"
1035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectfi
1045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# Name of file we expect compiler to create.
1065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectcofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
1075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# Create the lock directory.
1095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# Note: use `[/.-]' here to ensure that we don't use the same name
1105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# that we are using for the .o file.  Also, base the name on the expected
1115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# object file name, since that is what matters with a parallel build.
1125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectlockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d
1135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectwhile true; do
1145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  if mkdir "$lockdir" >/dev/null 2>&1; then
1155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    break
1165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  fi
1175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  sleep 1
1185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectdone
1195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# FIXME: race condition here if user kills between mkdir and trap.
1205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttrap "rmdir '$lockdir'; exit 1" 1 2 15
1215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# Run the compile.
1235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project"$@"
1245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectret=$?
1255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectif test -f "$cofile"; then
1275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  mv "$cofile" "$ofile"
1285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectelif test -f "${cofile}bj"; then
1295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  mv "${cofile}bj" "$ofile"
1305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectfi
1315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectrmdir "$lockdir"
1335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectexit $ret
1345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# Local Variables:
1365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# mode: shell-script
1375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# sh-indentation: 2
1385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# eval: (add-hook 'write-file-hooks 'time-stamp)
1395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# time-stamp-start: "scriptversion="
1405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# time-stamp-format: "%:y-%02m-%02d.%02H"
1415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# time-stamp-end: "$"
1425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# End:
143