105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#! /bin/sh 205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# Wrapper for compilers which do not understand `-c -o'. 305436638acc7c010349a69c3395f1a57c642dc62Ying Wang 405436638acc7c010349a69c3395f1a57c642dc62Ying Wangscriptversion=2010-11-15.09; # UTC 505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009, 2010 Free Software 705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# Foundation, Inc. 805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# Written by Tom Tromey <tromey@cygnus.com>. 905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# 1005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# This program is free software; you can redistribute it and/or modify 1105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# it under the terms of the GNU General Public License as published by 1205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# the Free Software Foundation; either version 2, or (at your option) 1305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# any later version. 1405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# 1505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# This program is distributed in the hope that it will be useful, 1605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# but WITHOUT ANY WARRANTY; without even the implied warranty of 1705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# GNU General Public License for more details. 1905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# 2005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# You should have received a copy of the GNU General Public License 2105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# along with this program. If not, see <http://www.gnu.org/licenses/>. 2205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 2305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# As a special exception to the GNU General Public License, if you 2405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# distribute this file as part of a program that contains a 2505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# configuration script generated by Autoconf, you may include it under 2605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# the same distribution terms that you use for the rest of that program. 2705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 2805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# This file is maintained in Automake, please report 2905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# bugs to <bug-automake@gnu.org> or send patches to 3005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# <automake-patches@gnu.org>. 3105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 3205436638acc7c010349a69c3395f1a57c642dc62Ying Wangnl=' 3305436638acc7c010349a69c3395f1a57c642dc62Ying Wang' 3405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 3505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# We need space, tab and new line, in precisely that order. Quoting is 3605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# there to prevent tools from complaining about whitespace usage. 3705436638acc7c010349a69c3395f1a57c642dc62Ying WangIFS=" "" $nl" 3805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 3905436638acc7c010349a69c3395f1a57c642dc62Ying Wangfile_conv= 4005436638acc7c010349a69c3395f1a57c642dc62Ying Wang 4105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# func_file_conv build_file lazy 4205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# Convert a $build file to $host form and store it in $file 4305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# Currently only supports Win32 hosts. If the determined conversion 4405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# type is listed in (the comma separated) LAZY, no conversion will 4505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# take place. 4605436638acc7c010349a69c3395f1a57c642dc62Ying Wangfunc_file_conv () 4705436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 4805436638acc7c010349a69c3395f1a57c642dc62Ying Wang file=$1 4905436638acc7c010349a69c3395f1a57c642dc62Ying Wang case $file in 5005436638acc7c010349a69c3395f1a57c642dc62Ying Wang / | /[!/]*) # absolute file, and not a UNC file 5105436638acc7c010349a69c3395f1a57c642dc62Ying Wang if test -z "$file_conv"; then 5205436638acc7c010349a69c3395f1a57c642dc62Ying Wang # lazily determine how to convert abs files 5305436638acc7c010349a69c3395f1a57c642dc62Ying Wang case `uname -s` in 5405436638acc7c010349a69c3395f1a57c642dc62Ying Wang MINGW*) 5505436638acc7c010349a69c3395f1a57c642dc62Ying Wang file_conv=mingw 5605436638acc7c010349a69c3395f1a57c642dc62Ying Wang ;; 5705436638acc7c010349a69c3395f1a57c642dc62Ying Wang CYGWIN*) 5805436638acc7c010349a69c3395f1a57c642dc62Ying Wang file_conv=cygwin 5905436638acc7c010349a69c3395f1a57c642dc62Ying Wang ;; 6005436638acc7c010349a69c3395f1a57c642dc62Ying Wang *) 6105436638acc7c010349a69c3395f1a57c642dc62Ying Wang file_conv=wine 6205436638acc7c010349a69c3395f1a57c642dc62Ying Wang ;; 6305436638acc7c010349a69c3395f1a57c642dc62Ying Wang esac 6405436638acc7c010349a69c3395f1a57c642dc62Ying Wang fi 6505436638acc7c010349a69c3395f1a57c642dc62Ying Wang case $file_conv/,$2, in 6605436638acc7c010349a69c3395f1a57c642dc62Ying Wang *,$file_conv,*) 6705436638acc7c010349a69c3395f1a57c642dc62Ying Wang ;; 6805436638acc7c010349a69c3395f1a57c642dc62Ying Wang mingw/*) 6905436638acc7c010349a69c3395f1a57c642dc62Ying Wang file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` 7005436638acc7c010349a69c3395f1a57c642dc62Ying Wang ;; 7105436638acc7c010349a69c3395f1a57c642dc62Ying Wang cygwin/*) 7205436638acc7c010349a69c3395f1a57c642dc62Ying Wang file=`cygpath -m "$file" || echo "$file"` 7305436638acc7c010349a69c3395f1a57c642dc62Ying Wang ;; 7405436638acc7c010349a69c3395f1a57c642dc62Ying Wang wine/*) 7505436638acc7c010349a69c3395f1a57c642dc62Ying Wang file=`winepath -w "$file" || echo "$file"` 7605436638acc7c010349a69c3395f1a57c642dc62Ying Wang ;; 7705436638acc7c010349a69c3395f1a57c642dc62Ying Wang esac 7805436638acc7c010349a69c3395f1a57c642dc62Ying Wang ;; 7905436638acc7c010349a69c3395f1a57c642dc62Ying Wang esac 8005436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 8105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 8205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# func_cl_wrapper cl arg... 8305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# Adjust compile command to suit cl 8405436638acc7c010349a69c3395f1a57c642dc62Ying Wangfunc_cl_wrapper () 8505436638acc7c010349a69c3395f1a57c642dc62Ying Wang{ 8605436638acc7c010349a69c3395f1a57c642dc62Ying Wang # Assume a capable shell 8705436638acc7c010349a69c3395f1a57c642dc62Ying Wang lib_path= 8805436638acc7c010349a69c3395f1a57c642dc62Ying Wang shared=: 8905436638acc7c010349a69c3395f1a57c642dc62Ying Wang linker_opts= 9005436638acc7c010349a69c3395f1a57c642dc62Ying Wang for arg 9105436638acc7c010349a69c3395f1a57c642dc62Ying Wang do 9205436638acc7c010349a69c3395f1a57c642dc62Ying Wang if test -n "$eat"; then 9305436638acc7c010349a69c3395f1a57c642dc62Ying Wang eat= 9405436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 9505436638acc7c010349a69c3395f1a57c642dc62Ying Wang case $1 in 9605436638acc7c010349a69c3395f1a57c642dc62Ying Wang -o) 9705436638acc7c010349a69c3395f1a57c642dc62Ying Wang # configure might choose to run compile as `compile cc -o foo foo.c'. 9805436638acc7c010349a69c3395f1a57c642dc62Ying Wang eat=1 9905436638acc7c010349a69c3395f1a57c642dc62Ying Wang case $2 in 10005436638acc7c010349a69c3395f1a57c642dc62Ying Wang *.o | *.[oO][bB][jJ]) 10105436638acc7c010349a69c3395f1a57c642dc62Ying Wang func_file_conv "$2" 10205436638acc7c010349a69c3395f1a57c642dc62Ying Wang set x "$@" -Fo"$file" 10305436638acc7c010349a69c3395f1a57c642dc62Ying Wang shift 10405436638acc7c010349a69c3395f1a57c642dc62Ying Wang ;; 10505436638acc7c010349a69c3395f1a57c642dc62Ying Wang *) 10605436638acc7c010349a69c3395f1a57c642dc62Ying Wang func_file_conv "$2" 10705436638acc7c010349a69c3395f1a57c642dc62Ying Wang set x "$@" -Fe"$file" 10805436638acc7c010349a69c3395f1a57c642dc62Ying Wang shift 10905436638acc7c010349a69c3395f1a57c642dc62Ying Wang ;; 11005436638acc7c010349a69c3395f1a57c642dc62Ying Wang esac 11105436638acc7c010349a69c3395f1a57c642dc62Ying Wang ;; 11205436638acc7c010349a69c3395f1a57c642dc62Ying Wang -I*) 11305436638acc7c010349a69c3395f1a57c642dc62Ying Wang func_file_conv "${1#-I}" mingw 11405436638acc7c010349a69c3395f1a57c642dc62Ying Wang set x "$@" -I"$file" 11505436638acc7c010349a69c3395f1a57c642dc62Ying Wang shift 11605436638acc7c010349a69c3395f1a57c642dc62Ying Wang ;; 11705436638acc7c010349a69c3395f1a57c642dc62Ying Wang -l*) 11805436638acc7c010349a69c3395f1a57c642dc62Ying Wang lib=${1#-l} 11905436638acc7c010349a69c3395f1a57c642dc62Ying Wang found=no 12005436638acc7c010349a69c3395f1a57c642dc62Ying Wang save_IFS=$IFS 12105436638acc7c010349a69c3395f1a57c642dc62Ying Wang IFS=';' 12205436638acc7c010349a69c3395f1a57c642dc62Ying Wang for dir in $lib_path $LIB 12305436638acc7c010349a69c3395f1a57c642dc62Ying Wang do 12405436638acc7c010349a69c3395f1a57c642dc62Ying Wang IFS=$save_IFS 12505436638acc7c010349a69c3395f1a57c642dc62Ying Wang if $shared && test -f "$dir/$lib.dll.lib"; then 12605436638acc7c010349a69c3395f1a57c642dc62Ying Wang found=yes 12705436638acc7c010349a69c3395f1a57c642dc62Ying Wang set x "$@" "$dir/$lib.dll.lib" 12805436638acc7c010349a69c3395f1a57c642dc62Ying Wang break 12905436638acc7c010349a69c3395f1a57c642dc62Ying Wang fi 13005436638acc7c010349a69c3395f1a57c642dc62Ying Wang if test -f "$dir/$lib.lib"; then 13105436638acc7c010349a69c3395f1a57c642dc62Ying Wang found=yes 13205436638acc7c010349a69c3395f1a57c642dc62Ying Wang set x "$@" "$dir/$lib.lib" 13305436638acc7c010349a69c3395f1a57c642dc62Ying Wang break 13405436638acc7c010349a69c3395f1a57c642dc62Ying Wang fi 13505436638acc7c010349a69c3395f1a57c642dc62Ying Wang done 13605436638acc7c010349a69c3395f1a57c642dc62Ying Wang IFS=$save_IFS 13705436638acc7c010349a69c3395f1a57c642dc62Ying Wang 13805436638acc7c010349a69c3395f1a57c642dc62Ying Wang test "$found" != yes && set x "$@" "$lib.lib" 13905436638acc7c010349a69c3395f1a57c642dc62Ying Wang shift 14005436638acc7c010349a69c3395f1a57c642dc62Ying Wang ;; 14105436638acc7c010349a69c3395f1a57c642dc62Ying Wang -L*) 14205436638acc7c010349a69c3395f1a57c642dc62Ying Wang func_file_conv "${1#-L}" 14305436638acc7c010349a69c3395f1a57c642dc62Ying Wang if test -z "$lib_path"; then 14405436638acc7c010349a69c3395f1a57c642dc62Ying Wang lib_path=$file 14505436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 14605436638acc7c010349a69c3395f1a57c642dc62Ying Wang lib_path="$lib_path;$file" 14705436638acc7c010349a69c3395f1a57c642dc62Ying Wang fi 14805436638acc7c010349a69c3395f1a57c642dc62Ying Wang linker_opts="$linker_opts -LIBPATH:$file" 14905436638acc7c010349a69c3395f1a57c642dc62Ying Wang ;; 15005436638acc7c010349a69c3395f1a57c642dc62Ying Wang -static) 15105436638acc7c010349a69c3395f1a57c642dc62Ying Wang shared=false 15205436638acc7c010349a69c3395f1a57c642dc62Ying Wang ;; 15305436638acc7c010349a69c3395f1a57c642dc62Ying Wang -Wl,*) 15405436638acc7c010349a69c3395f1a57c642dc62Ying Wang arg=${1#-Wl,} 15505436638acc7c010349a69c3395f1a57c642dc62Ying Wang save_ifs="$IFS"; IFS=',' 15605436638acc7c010349a69c3395f1a57c642dc62Ying Wang for flag in $arg; do 15705436638acc7c010349a69c3395f1a57c642dc62Ying Wang IFS="$save_ifs" 15805436638acc7c010349a69c3395f1a57c642dc62Ying Wang linker_opts="$linker_opts $flag" 15905436638acc7c010349a69c3395f1a57c642dc62Ying Wang done 16005436638acc7c010349a69c3395f1a57c642dc62Ying Wang IFS="$save_ifs" 16105436638acc7c010349a69c3395f1a57c642dc62Ying Wang ;; 16205436638acc7c010349a69c3395f1a57c642dc62Ying Wang -Xlinker) 16305436638acc7c010349a69c3395f1a57c642dc62Ying Wang eat=1 16405436638acc7c010349a69c3395f1a57c642dc62Ying Wang linker_opts="$linker_opts $2" 16505436638acc7c010349a69c3395f1a57c642dc62Ying Wang ;; 16605436638acc7c010349a69c3395f1a57c642dc62Ying Wang -*) 16705436638acc7c010349a69c3395f1a57c642dc62Ying Wang set x "$@" "$1" 16805436638acc7c010349a69c3395f1a57c642dc62Ying Wang shift 16905436638acc7c010349a69c3395f1a57c642dc62Ying Wang ;; 17005436638acc7c010349a69c3395f1a57c642dc62Ying Wang *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) 17105436638acc7c010349a69c3395f1a57c642dc62Ying Wang func_file_conv "$1" 17205436638acc7c010349a69c3395f1a57c642dc62Ying Wang set x "$@" -Tp"$file" 17305436638acc7c010349a69c3395f1a57c642dc62Ying Wang shift 17405436638acc7c010349a69c3395f1a57c642dc62Ying Wang ;; 17505436638acc7c010349a69c3395f1a57c642dc62Ying Wang *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) 17605436638acc7c010349a69c3395f1a57c642dc62Ying Wang func_file_conv "$1" mingw 17705436638acc7c010349a69c3395f1a57c642dc62Ying Wang set x "$@" "$file" 17805436638acc7c010349a69c3395f1a57c642dc62Ying Wang shift 17905436638acc7c010349a69c3395f1a57c642dc62Ying Wang ;; 18005436638acc7c010349a69c3395f1a57c642dc62Ying Wang *) 18105436638acc7c010349a69c3395f1a57c642dc62Ying Wang set x "$@" "$1" 18205436638acc7c010349a69c3395f1a57c642dc62Ying Wang shift 18305436638acc7c010349a69c3395f1a57c642dc62Ying Wang ;; 18405436638acc7c010349a69c3395f1a57c642dc62Ying Wang esac 18505436638acc7c010349a69c3395f1a57c642dc62Ying Wang fi 18605436638acc7c010349a69c3395f1a57c642dc62Ying Wang shift 18705436638acc7c010349a69c3395f1a57c642dc62Ying Wang done 18805436638acc7c010349a69c3395f1a57c642dc62Ying Wang if test -n "$linker_opts"; then 18905436638acc7c010349a69c3395f1a57c642dc62Ying Wang linker_opts="-link$linker_opts" 19005436638acc7c010349a69c3395f1a57c642dc62Ying Wang fi 19105436638acc7c010349a69c3395f1a57c642dc62Ying Wang exec "$@" $linker_opts 19205436638acc7c010349a69c3395f1a57c642dc62Ying Wang exit 1 19305436638acc7c010349a69c3395f1a57c642dc62Ying Wang} 19405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 19505436638acc7c010349a69c3395f1a57c642dc62Ying Wangeat= 19605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 19705436638acc7c010349a69c3395f1a57c642dc62Ying Wangcase $1 in 19805436638acc7c010349a69c3395f1a57c642dc62Ying Wang '') 19905436638acc7c010349a69c3395f1a57c642dc62Ying Wang echo "$0: No command. Try \`$0 --help' for more information." 1>&2 20005436638acc7c010349a69c3395f1a57c642dc62Ying Wang exit 1; 20105436638acc7c010349a69c3395f1a57c642dc62Ying Wang ;; 20205436638acc7c010349a69c3395f1a57c642dc62Ying Wang -h | --h*) 20305436638acc7c010349a69c3395f1a57c642dc62Ying Wang cat <<\EOF 20405436638acc7c010349a69c3395f1a57c642dc62Ying WangUsage: compile [--help] [--version] PROGRAM [ARGS] 20505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 20605436638acc7c010349a69c3395f1a57c642dc62Ying WangWrapper for compilers which do not understand `-c -o'. 20705436638acc7c010349a69c3395f1a57c642dc62Ying WangRemove `-o dest.o' from ARGS, run PROGRAM with the remaining 20805436638acc7c010349a69c3395f1a57c642dc62Ying Wangarguments, and rename the output as expected. 20905436638acc7c010349a69c3395f1a57c642dc62Ying Wang 21005436638acc7c010349a69c3395f1a57c642dc62Ying WangIf you are trying to build a whole package this is not the 21105436638acc7c010349a69c3395f1a57c642dc62Ying Wangright script to run: please start by reading the file `INSTALL'. 21205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 21305436638acc7c010349a69c3395f1a57c642dc62Ying WangReport bugs to <bug-automake@gnu.org>. 21405436638acc7c010349a69c3395f1a57c642dc62Ying WangEOF 21505436638acc7c010349a69c3395f1a57c642dc62Ying Wang exit $? 21605436638acc7c010349a69c3395f1a57c642dc62Ying Wang ;; 21705436638acc7c010349a69c3395f1a57c642dc62Ying Wang -v | --v*) 21805436638acc7c010349a69c3395f1a57c642dc62Ying Wang echo "compile $scriptversion" 21905436638acc7c010349a69c3395f1a57c642dc62Ying Wang exit $? 22005436638acc7c010349a69c3395f1a57c642dc62Ying Wang ;; 22105436638acc7c010349a69c3395f1a57c642dc62Ying Wang cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) 22205436638acc7c010349a69c3395f1a57c642dc62Ying Wang func_cl_wrapper "$@" # Doesn't return... 22305436638acc7c010349a69c3395f1a57c642dc62Ying Wang ;; 22405436638acc7c010349a69c3395f1a57c642dc62Ying Wangesac 22505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 22605436638acc7c010349a69c3395f1a57c642dc62Ying Wangofile= 22705436638acc7c010349a69c3395f1a57c642dc62Ying Wangcfile= 22805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 22905436638acc7c010349a69c3395f1a57c642dc62Ying Wangfor arg 23005436638acc7c010349a69c3395f1a57c642dc62Ying Wangdo 23105436638acc7c010349a69c3395f1a57c642dc62Ying Wang if test -n "$eat"; then 23205436638acc7c010349a69c3395f1a57c642dc62Ying Wang eat= 23305436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 23405436638acc7c010349a69c3395f1a57c642dc62Ying Wang case $1 in 23505436638acc7c010349a69c3395f1a57c642dc62Ying Wang -o) 23605436638acc7c010349a69c3395f1a57c642dc62Ying Wang # configure might choose to run compile as `compile cc -o foo foo.c'. 23705436638acc7c010349a69c3395f1a57c642dc62Ying Wang # So we strip `-o arg' only if arg is an object. 23805436638acc7c010349a69c3395f1a57c642dc62Ying Wang eat=1 23905436638acc7c010349a69c3395f1a57c642dc62Ying Wang case $2 in 24005436638acc7c010349a69c3395f1a57c642dc62Ying Wang *.o | *.obj) 24105436638acc7c010349a69c3395f1a57c642dc62Ying Wang ofile=$2 24205436638acc7c010349a69c3395f1a57c642dc62Ying Wang ;; 24305436638acc7c010349a69c3395f1a57c642dc62Ying Wang *) 24405436638acc7c010349a69c3395f1a57c642dc62Ying Wang set x "$@" -o "$2" 24505436638acc7c010349a69c3395f1a57c642dc62Ying Wang shift 24605436638acc7c010349a69c3395f1a57c642dc62Ying Wang ;; 24705436638acc7c010349a69c3395f1a57c642dc62Ying Wang esac 24805436638acc7c010349a69c3395f1a57c642dc62Ying Wang ;; 24905436638acc7c010349a69c3395f1a57c642dc62Ying Wang *.c) 25005436638acc7c010349a69c3395f1a57c642dc62Ying Wang cfile=$1 25105436638acc7c010349a69c3395f1a57c642dc62Ying Wang set x "$@" "$1" 25205436638acc7c010349a69c3395f1a57c642dc62Ying Wang shift 25305436638acc7c010349a69c3395f1a57c642dc62Ying Wang ;; 25405436638acc7c010349a69c3395f1a57c642dc62Ying Wang *) 25505436638acc7c010349a69c3395f1a57c642dc62Ying Wang set x "$@" "$1" 25605436638acc7c010349a69c3395f1a57c642dc62Ying Wang shift 25705436638acc7c010349a69c3395f1a57c642dc62Ying Wang ;; 25805436638acc7c010349a69c3395f1a57c642dc62Ying Wang esac 25905436638acc7c010349a69c3395f1a57c642dc62Ying Wang fi 26005436638acc7c010349a69c3395f1a57c642dc62Ying Wang shift 26105436638acc7c010349a69c3395f1a57c642dc62Ying Wangdone 26205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 26305436638acc7c010349a69c3395f1a57c642dc62Ying Wangif test -z "$ofile" || test -z "$cfile"; then 26405436638acc7c010349a69c3395f1a57c642dc62Ying Wang # If no `-o' option was seen then we might have been invoked from a 26505436638acc7c010349a69c3395f1a57c642dc62Ying Wang # pattern rule where we don't need one. That is ok -- this is a 26605436638acc7c010349a69c3395f1a57c642dc62Ying Wang # normal compilation that the losing compiler can handle. If no 26705436638acc7c010349a69c3395f1a57c642dc62Ying Wang # `.c' file was seen then we are probably linking. That is also 26805436638acc7c010349a69c3395f1a57c642dc62Ying Wang # ok. 26905436638acc7c010349a69c3395f1a57c642dc62Ying Wang exec "$@" 27005436638acc7c010349a69c3395f1a57c642dc62Ying Wangfi 27105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 27205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# Name of file we expect compiler to create. 27305436638acc7c010349a69c3395f1a57c642dc62Ying Wangcofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` 27405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 27505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# Create the lock directory. 27605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# Note: use `[/\\:.-]' here to ensure that we don't use the same name 27705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# that we are using for the .o file. Also, base the name on the expected 27805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# object file name, since that is what matters with a parallel build. 27905436638acc7c010349a69c3395f1a57c642dc62Ying Wanglockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d 28005436638acc7c010349a69c3395f1a57c642dc62Ying Wangwhile true; do 28105436638acc7c010349a69c3395f1a57c642dc62Ying Wang if mkdir "$lockdir" >/dev/null 2>&1; then 28205436638acc7c010349a69c3395f1a57c642dc62Ying Wang break 28305436638acc7c010349a69c3395f1a57c642dc62Ying Wang fi 28405436638acc7c010349a69c3395f1a57c642dc62Ying Wang sleep 1 28505436638acc7c010349a69c3395f1a57c642dc62Ying Wangdone 28605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# FIXME: race condition here if user kills between mkdir and trap. 28705436638acc7c010349a69c3395f1a57c642dc62Ying Wangtrap "rmdir '$lockdir'; exit 1" 1 2 15 28805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 28905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# Run the compile. 29005436638acc7c010349a69c3395f1a57c642dc62Ying Wang"$@" 29105436638acc7c010349a69c3395f1a57c642dc62Ying Wangret=$? 29205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 29305436638acc7c010349a69c3395f1a57c642dc62Ying Wangif test -f "$cofile"; then 29405436638acc7c010349a69c3395f1a57c642dc62Ying Wang test "$cofile" = "$ofile" || mv "$cofile" "$ofile" 29505436638acc7c010349a69c3395f1a57c642dc62Ying Wangelif test -f "${cofile}bj"; then 29605436638acc7c010349a69c3395f1a57c642dc62Ying Wang test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" 29705436638acc7c010349a69c3395f1a57c642dc62Ying Wangfi 29805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 29905436638acc7c010349a69c3395f1a57c642dc62Ying Wangrmdir "$lockdir" 30005436638acc7c010349a69c3395f1a57c642dc62Ying Wangexit $ret 30105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 30205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# Local Variables: 30305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# mode: shell-script 30405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# sh-indentation: 2 30505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# eval: (add-hook 'write-file-hooks 'time-stamp) 30605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# time-stamp-start: "scriptversion=" 30705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# time-stamp-format: "%:y-%02m-%02d.%02H" 30805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# time-stamp-time-zone: "UTC" 30905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# time-stamp-end: "; # UTC" 31005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# End: 311