18e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#! /bin/sh 28e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# Wrapper for compilers which do not understand `-c -o'. 38e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 48e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsscriptversion=2005-05-14.22 58e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 68e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. 78e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# Written by Tom Tromey <tromey@cygnus.com>. 88e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# 98e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# This program is free software; you can redistribute it and/or modify 108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# it under the terms of the GNU General Public License as published by 118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# the Free Software Foundation; either version 2, or (at your option) 128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# any later version. 138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# 148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# This program is distributed in the hope that it will be useful, 158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# but WITHOUT ANY WARRANTY; without even the implied warranty of 168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# GNU General Public License for more details. 188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# 198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# You should have received a copy of the GNU General Public License 208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# along with this program; if not, write to the Free Software 218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# As a special exception to the GNU General Public License, if you 248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# distribute this file as part of a program that contains a 258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# configuration script generated by Autoconf, you may include it under 268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# the same distribution terms that you use for the rest of that program. 278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# This file is maintained in Automake, please report 298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# bugs to <bug-automake@gnu.org> or send patches to 308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# <automake-patches@gnu.org>. 318e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 328e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelscase $1 in 338e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels '') 348e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels echo "$0: No command. Try \`$0 --help' for more information." 1>&2 358e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels exit 1; 368e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ;; 378e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels -h | --h*) 388e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels cat <<\EOF 398e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas EckelsUsage: compile [--help] [--version] PROGRAM [ARGS] 408e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 418e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas EckelsWrapper for compilers which do not understand `-c -o'. 428e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas EckelsRemove `-o dest.o' from ARGS, run PROGRAM with the remaining 438e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsarguments, and rename the output as expected. 448e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 458e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas EckelsIf you are trying to build a whole package this is not the 468e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsright script to run: please start by reading the file `INSTALL'. 478e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 488e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas EckelsReport bugs to <bug-automake@gnu.org>. 498e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas EckelsEOF 508e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels exit $? 518e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ;; 528e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels -v | --v*) 538e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels echo "compile $scriptversion" 548e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels exit $? 558e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ;; 568e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsesac 578e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 588e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsofile= 598e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelscfile= 608e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelseat= 618e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 628e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsfor arg 638e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsdo 648e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if test -n "$eat"; then 658e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels eat= 668e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels else 678e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels case $1 in 688e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels -o) 698e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # configure might choose to run compile as `compile cc -o foo foo.c'. 708e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # So we strip `-o arg' only if arg is an object. 718e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels eat=1 728e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels case $2 in 738e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *.o | *.obj) 748e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ofile=$2 758e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ;; 768e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *) 778e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels set x "$@" -o "$2" 788e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels shift 798e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ;; 808e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels esac 818e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ;; 828e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *.c) 838e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels cfile=$1 848e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels set x "$@" "$1" 858e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels shift 868e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ;; 878e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *) 888e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels set x "$@" "$1" 898e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels shift 908e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ;; 918e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels esac 928e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fi 938e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels shift 948e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsdone 958e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 968e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsif test -z "$ofile" || test -z "$cfile"; then 978e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # If no `-o' option was seen then we might have been invoked from a 988e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # pattern rule where we don't need one. That is ok -- this is a 998e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # normal compilation that the losing compiler can handle. If no 1008e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # `.c' file was seen then we are probably linking. That is also 1018e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels # ok. 1028e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels exec "$@" 1038e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsfi 1048e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1058e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# Name of file we expect compiler to create. 1068e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelscofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'` 1078e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1088e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# Create the lock directory. 1098e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# Note: use `[/.-]' here to ensure that we don't use the same name 1108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# that we are using for the .o file. Also, base the name on the expected 1118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# object file name, since that is what matters with a parallel build. 1128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelslockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d 1138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelswhile true; do 1148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels if mkdir "$lockdir" >/dev/null 2>&1; then 1158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels break 1168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels fi 1178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels sleep 1 1188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsdone 1198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# FIXME: race condition here if user kills between mkdir and trap. 1208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelstrap "rmdir '$lockdir'; exit 1" 1 2 15 1218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# Run the compile. 1238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels"$@" 1248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsret=$? 1258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsif test -f "$cofile"; then 1278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels mv "$cofile" "$ofile" 1288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelselif test -f "${cofile}bj"; then 1298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels mv "${cofile}bj" "$ofile" 1308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsfi 1318e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1328e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsrmdir "$lockdir" 1338e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsexit $ret 1348e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels 1358e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# Local Variables: 1368e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# mode: shell-script 1378e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# sh-indentation: 2 1388e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# eval: (add-hook 'write-file-hooks 'time-stamp) 1398e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# time-stamp-start: "scriptversion=" 1408e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# time-stamp-format: "%:y-%02m-%02d.%02H" 1418e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# time-stamp-end: "$" 1428e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# End: 143