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