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