10ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson#! /bin/sh
20ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# Wrapper for compilers which do not understand '-c -o'.
30ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson
40ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonscriptversion=2012-10-14.11; # UTC
50ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson
60ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# Copyright (C) 1999-2013 Free Software Foundation, Inc.
70ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# Written by Tom Tromey <tromey@cygnus.com>.
80ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson#
90ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# This program is free software; you can redistribute it and/or modify
100ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# it under the terms of the GNU General Public License as published by
110ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# the Free Software Foundation; either version 2, or (at your option)
120ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# any later version.
130ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson#
140ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# This program is distributed in the hope that it will be useful,
150ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# but WITHOUT ANY WARRANTY; without even the implied warranty of
160ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
170ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# GNU General Public License for more details.
180ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson#
190ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# You should have received a copy of the GNU General Public License
200ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# along with this program.  If not, see <http://www.gnu.org/licenses/>.
210ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson
220ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# As a special exception to the GNU General Public License, if you
230ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# distribute this file as part of a program that contains a
240ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# configuration script generated by Autoconf, you may include it under
250ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# the same distribution terms that you use for the rest of that program.
260ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson
270ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# This file is maintained in Automake, please report
280ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# bugs to <bug-automake@gnu.org> or send patches to
290ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# <automake-patches@gnu.org>.
300ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson
310ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonnl='
320ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson'
330ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson
340ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# We need space, tab and new line, in precisely that order.  Quoting is
350ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# there to prevent tools from complaining about whitespace usage.
360ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff DavidsonIFS=" ""	$nl"
370ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson
380ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonfile_conv=
390ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson
400ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# func_file_conv build_file lazy
410ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# Convert a $build file to $host form and store it in $file
420ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# Currently only supports Windows hosts. If the determined conversion
430ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# type is listed in (the comma separated) LAZY, no conversion will
440ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# take place.
450ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonfunc_file_conv ()
460ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson{
470ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  file=$1
480ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  case $file in
490ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson    / | /[!/]*) # absolute file, and not a UNC file
500ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson      if test -z "$file_conv"; then
510ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	# lazily determine how to convert abs files
520ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	case `uname -s` in
530ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  MINGW*)
540ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	    file_conv=mingw
550ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	    ;;
560ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  CYGWIN*)
570ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	    file_conv=cygwin
580ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	    ;;
590ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  *)
600ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	    file_conv=wine
610ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	    ;;
620ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	esac
630ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson      fi
640ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson      case $file_conv/,$2, in
650ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	*,$file_conv,*)
660ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  ;;
670ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	mingw/*)
680ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
690ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  ;;
700ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	cygwin/*)
710ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  file=`cygpath -m "$file" || echo "$file"`
720ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  ;;
730ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	wine/*)
740ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  file=`winepath -w "$file" || echo "$file"`
750ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  ;;
760ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson      esac
770ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson      ;;
780ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  esac
790ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson}
800ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson
810ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# func_cl_dashL linkdir
820ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# Make cl look for libraries in LINKDIR
830ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonfunc_cl_dashL ()
840ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson{
850ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  func_file_conv "$1"
860ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  if test -z "$lib_path"; then
870ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson    lib_path=$file
880ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  else
890ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson    lib_path="$lib_path;$file"
900ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  fi
910ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  linker_opts="$linker_opts -LIBPATH:$file"
920ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson}
930ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson
940ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# func_cl_dashl library
950ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# Do a library search-path lookup for cl
960ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonfunc_cl_dashl ()
970ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson{
980ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  lib=$1
990ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  found=no
1000ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  save_IFS=$IFS
1010ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  IFS=';'
1020ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  for dir in $lib_path $LIB
1030ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  do
1040ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson    IFS=$save_IFS
1050ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson    if $shared && test -f "$dir/$lib.dll.lib"; then
1060ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson      found=yes
1070ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson      lib=$dir/$lib.dll.lib
1080ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson      break
1090ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson    fi
1100ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson    if test -f "$dir/$lib.lib"; then
1110ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson      found=yes
1120ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson      lib=$dir/$lib.lib
1130ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson      break
1140ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson    fi
1150ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson    if test -f "$dir/lib$lib.a"; then
1160ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson      found=yes
1170ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson      lib=$dir/lib$lib.a
1180ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson      break
1190ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson    fi
1200ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  done
1210ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  IFS=$save_IFS
1220ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson
1230ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  if test "$found" != yes; then
1240ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson    lib=$lib.lib
1250ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  fi
1260ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson}
1270ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson
1280ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# func_cl_wrapper cl arg...
1290ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# Adjust compile command to suit cl
1300ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonfunc_cl_wrapper ()
1310ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson{
1320ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  # Assume a capable shell
1330ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  lib_path=
1340ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  shared=:
1350ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  linker_opts=
1360ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  for arg
1370ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  do
1380ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson    if test -n "$eat"; then
1390ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson      eat=
1400ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson    else
1410ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson      case $1 in
1420ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	-o)
1430ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  # configure might choose to run compile as 'compile cc -o foo foo.c'.
1440ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  eat=1
1450ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  case $2 in
1460ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	    *.o | *.[oO][bB][jJ])
1470ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	      func_file_conv "$2"
1480ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	      set x "$@" -Fo"$file"
1490ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	      shift
1500ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	      ;;
1510ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	    *)
1520ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	      func_file_conv "$2"
1530ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	      set x "$@" -Fe"$file"
1540ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	      shift
1550ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	      ;;
1560ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  esac
1570ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  ;;
1580ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	-I)
1590ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  eat=1
1600ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  func_file_conv "$2" mingw
1610ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  set x "$@" -I"$file"
1620ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  shift
1630ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  ;;
1640ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	-I*)
1650ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  func_file_conv "${1#-I}" mingw
1660ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  set x "$@" -I"$file"
1670ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  shift
1680ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  ;;
1690ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	-l)
1700ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  eat=1
1710ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  func_cl_dashl "$2"
1720ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  set x "$@" "$lib"
1730ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  shift
1740ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  ;;
1750ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	-l*)
1760ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  func_cl_dashl "${1#-l}"
1770ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  set x "$@" "$lib"
1780ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  shift
1790ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  ;;
1800ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	-L)
1810ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  eat=1
1820ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  func_cl_dashL "$2"
1830ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  ;;
1840ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	-L*)
1850ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  func_cl_dashL "${1#-L}"
1860ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  ;;
1870ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	-static)
1880ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  shared=false
1890ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  ;;
1900ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	-Wl,*)
1910ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  arg=${1#-Wl,}
1920ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  save_ifs="$IFS"; IFS=','
1930ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  for flag in $arg; do
1940ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	    IFS="$save_ifs"
1950ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	    linker_opts="$linker_opts $flag"
1960ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  done
1970ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  IFS="$save_ifs"
1980ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  ;;
1990ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	-Xlinker)
2000ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  eat=1
2010ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  linker_opts="$linker_opts $2"
2020ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  ;;
2030ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	-*)
2040ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  set x "$@" "$1"
2050ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  shift
2060ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  ;;
2070ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	*.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
2080ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  func_file_conv "$1"
2090ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  set x "$@" -Tp"$file"
2100ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  shift
2110ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  ;;
2120ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
2130ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  func_file_conv "$1" mingw
2140ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  set x "$@" "$file"
2150ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  shift
2160ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  ;;
2170ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	*)
2180ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  set x "$@" "$1"
2190ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  shift
2200ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  ;;
2210ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson      esac
2220ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson    fi
2230ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson    shift
2240ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  done
2250ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  if test -n "$linker_opts"; then
2260ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson    linker_opts="-link$linker_opts"
2270ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  fi
2280ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  exec "$@" $linker_opts
2290ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  exit 1
2300ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson}
2310ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson
2320ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsoneat=
2330ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson
2340ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsoncase $1 in
2350ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  '')
2360ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
2370ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson     exit 1;
2380ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson     ;;
2390ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  -h | --h*)
2400ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson    cat <<\EOF
2410ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff DavidsonUsage: compile [--help] [--version] PROGRAM [ARGS]
2420ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson
2430ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff DavidsonWrapper for compilers which do not understand '-c -o'.
2440ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff DavidsonRemove '-o dest.o' from ARGS, run PROGRAM with the remaining
2450ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonarguments, and rename the output as expected.
2460ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson
2470ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff DavidsonIf you are trying to build a whole package this is not the
2480ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonright script to run: please start by reading the file 'INSTALL'.
2490ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson
2500ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff DavidsonReport bugs to <bug-automake@gnu.org>.
2510ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff DavidsonEOF
2520ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson    exit $?
2530ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson    ;;
2540ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  -v | --v*)
2550ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson    echo "compile $scriptversion"
2560ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson    exit $?
2570ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson    ;;
2580ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
2590ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson    func_cl_wrapper "$@"      # Doesn't return...
2600ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson    ;;
2610ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonesac
2620ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson
2630ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonofile=
2640ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsoncfile=
2650ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson
2660ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonfor arg
2670ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsondo
2680ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  if test -n "$eat"; then
2690ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson    eat=
2700ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  else
2710ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson    case $1 in
2720ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson      -o)
2730ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	# configure might choose to run compile as 'compile cc -o foo foo.c'.
2740ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	# So we strip '-o arg' only if arg is an object.
2750ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	eat=1
2760ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	case $2 in
2770ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  *.o | *.obj)
2780ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	    ofile=$2
2790ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	    ;;
2800ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	  *)
2810ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	    set x "$@" -o "$2"
2820ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	    shift
2830ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	    ;;
2840ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	esac
2850ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	;;
2860ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson      *.c)
2870ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	cfile=$1
2880ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	set x "$@" "$1"
2890ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	shift
2900ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	;;
2910ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson      *)
2920ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	set x "$@" "$1"
2930ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	shift
2940ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson	;;
2950ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson    esac
2960ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  fi
2970ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  shift
2980ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsondone
2990ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson
3000ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonif test -z "$ofile" || test -z "$cfile"; then
3010ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  # If no '-o' option was seen then we might have been invoked from a
3020ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  # pattern rule where we don't need one.  That is ok -- this is a
3030ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  # normal compilation that the losing compiler can handle.  If no
3040ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  # '.c' file was seen then we are probably linking.  That is also
3050ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  # ok.
3060ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  exec "$@"
3070ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonfi
3080ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson
3090ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# Name of file we expect compiler to create.
3100ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsoncofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
3110ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson
3120ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# Create the lock directory.
3130ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# Note: use '[/\\:.-]' here to ensure that we don't use the same name
3140ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# that we are using for the .o file.  Also, base the name on the expected
3150ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# object file name, since that is what matters with a parallel build.
3160ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonlockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
3170ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonwhile true; do
3180ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  if mkdir "$lockdir" >/dev/null 2>&1; then
3190ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson    break
3200ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  fi
3210ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  sleep 1
3220ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsondone
3230ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# FIXME: race condition here if user kills between mkdir and trap.
3240ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsontrap "rmdir '$lockdir'; exit 1" 1 2 15
3250ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson
3260ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# Run the compile.
3270ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson"$@"
3280ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonret=$?
3290ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson
3300ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonif test -f "$cofile"; then
3310ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
3320ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonelif test -f "${cofile}bj"; then
3330ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson  test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
3340ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonfi
3350ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson
3360ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonrmdir "$lockdir"
3370ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonexit $ret
3380ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson
3390ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# Local Variables:
3400ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# mode: shell-script
3410ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# sh-indentation: 2
3420ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# eval: (add-hook 'write-file-hooks 'time-stamp)
3430ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# time-stamp-start: "scriptversion="
3440ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# time-stamp-format: "%:y-%02m-%02d.%02H"
3450ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# time-stamp-time-zone: "UTC"
3460ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# time-stamp-end: "; # UTC"
3470ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# End:
348