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