165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#! /bin/sh
265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# Wrapper for compilers which do not understand '-c -o'.
365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichscriptversion=2012-10-14.11; # UTC
565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# Copyright (C) 1999-2013 Free Software Foundation, Inc.
765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# Written by Tom Tromey <tromey@cygnus.com>.
865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#
965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# This program is free software; you can redistribute it and/or modify
1065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# it under the terms of the GNU General Public License as published by
1165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# the Free Software Foundation; either version 2, or (at your option)
1265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# any later version.
1365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#
1465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# This program is distributed in the hope that it will be useful,
1565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# but WITHOUT ANY WARRANTY; without even the implied warranty of
1665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# GNU General Public License for more details.
1865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich#
1965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# You should have received a copy of the GNU General Public License
2065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# along with this program.  If not, see <http://www.gnu.org/licenses/>.
2165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
2265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# As a special exception to the GNU General Public License, if you
2365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# distribute this file as part of a program that contains a
2465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# configuration script generated by Autoconf, you may include it under
2565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# the same distribution terms that you use for the rest of that program.
2665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
2765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# This file is maintained in Automake, please report
2865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# bugs to <bug-automake@gnu.org> or send patches to
2965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# <automake-patches@gnu.org>.
3065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
3165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichnl='
3265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich'
3365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
3465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# We need space, tab and new line, in precisely that order.  Quoting is
3565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# there to prevent tools from complaining about whitespace usage.
3665de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichIFS=" ""	$nl"
3765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
3865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichfile_conv=
3965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
4065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# func_file_conv build_file lazy
4165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# Convert a $build file to $host form and store it in $file
4265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# Currently only supports Windows hosts. If the determined conversion
4365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# type is listed in (the comma separated) LAZY, no conversion will
4465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# take place.
4565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichfunc_file_conv ()
4665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich{
4765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  file=$1
4865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  case $file in
4965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich    / | /[!/]*) # absolute file, and not a UNC file
5065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich      if test -z "$file_conv"; then
5165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	# lazily determine how to convert abs files
5265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	case `uname -s` in
5365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  MINGW*)
5465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	    file_conv=mingw
5565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	    ;;
5665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  CYGWIN*)
5765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	    file_conv=cygwin
5865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	    ;;
5965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  *)
6065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	    file_conv=wine
6165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	    ;;
6265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	esac
6365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich      fi
6465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich      case $file_conv/,$2, in
6565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	*,$file_conv,*)
6665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  ;;
6765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	mingw/*)
6865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
6965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  ;;
7065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	cygwin/*)
7165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  file=`cygpath -m "$file" || echo "$file"`
7265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  ;;
7365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	wine/*)
7465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  file=`winepath -w "$file" || echo "$file"`
7565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  ;;
7665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich      esac
7765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich      ;;
7865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  esac
7965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich}
8065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
8165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# func_cl_dashL linkdir
8265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# Make cl look for libraries in LINKDIR
8365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichfunc_cl_dashL ()
8465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich{
8565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  func_file_conv "$1"
8665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  if test -z "$lib_path"; then
8765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich    lib_path=$file
8865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  else
8965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich    lib_path="$lib_path;$file"
9065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  fi
9165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  linker_opts="$linker_opts -LIBPATH:$file"
9265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich}
9365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
9465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# func_cl_dashl library
9565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# Do a library search-path lookup for cl
9665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichfunc_cl_dashl ()
9765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich{
9865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  lib=$1
9965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  found=no
10065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  save_IFS=$IFS
10165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  IFS=';'
10265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  for dir in $lib_path $LIB
10365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  do
10465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich    IFS=$save_IFS
10565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich    if $shared && test -f "$dir/$lib.dll.lib"; then
10665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich      found=yes
10765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich      lib=$dir/$lib.dll.lib
10865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich      break
10965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich    fi
11065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich    if test -f "$dir/$lib.lib"; then
11165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich      found=yes
11265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich      lib=$dir/$lib.lib
11365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich      break
11465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich    fi
11565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich    if test -f "$dir/lib$lib.a"; then
11665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich      found=yes
11765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich      lib=$dir/lib$lib.a
11865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich      break
11965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich    fi
12065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  done
12165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  IFS=$save_IFS
12265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
12365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  if test "$found" != yes; then
12465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich    lib=$lib.lib
12565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  fi
12665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich}
12765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
12865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# func_cl_wrapper cl arg...
12965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# Adjust compile command to suit cl
13065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichfunc_cl_wrapper ()
13165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich{
13265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  # Assume a capable shell
13365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  lib_path=
13465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  shared=:
13565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  linker_opts=
13665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  for arg
13765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  do
13865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich    if test -n "$eat"; then
13965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich      eat=
14065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich    else
14165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich      case $1 in
14265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	-o)
14365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  # configure might choose to run compile as 'compile cc -o foo foo.c'.
14465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  eat=1
14565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  case $2 in
14665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	    *.o | *.[oO][bB][jJ])
14765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	      func_file_conv "$2"
14865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	      set x "$@" -Fo"$file"
14965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	      shift
15065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	      ;;
15165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	    *)
15265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	      func_file_conv "$2"
15365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	      set x "$@" -Fe"$file"
15465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	      shift
15565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	      ;;
15665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  esac
15765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  ;;
15865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	-I)
15965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  eat=1
16065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  func_file_conv "$2" mingw
16165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  set x "$@" -I"$file"
16265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  shift
16365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  ;;
16465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	-I*)
16565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  func_file_conv "${1#-I}" mingw
16665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  set x "$@" -I"$file"
16765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  shift
16865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  ;;
16965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	-l)
17065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  eat=1
17165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  func_cl_dashl "$2"
17265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  set x "$@" "$lib"
17365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  shift
17465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  ;;
17565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	-l*)
17665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  func_cl_dashl "${1#-l}"
17765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  set x "$@" "$lib"
17865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  shift
17965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  ;;
18065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	-L)
18165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  eat=1
18265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  func_cl_dashL "$2"
18365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  ;;
18465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	-L*)
18565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  func_cl_dashL "${1#-L}"
18665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  ;;
18765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	-static)
18865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  shared=false
18965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  ;;
19065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	-Wl,*)
19165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  arg=${1#-Wl,}
19265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  save_ifs="$IFS"; IFS=','
19365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  for flag in $arg; do
19465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	    IFS="$save_ifs"
19565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	    linker_opts="$linker_opts $flag"
19665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  done
19765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  IFS="$save_ifs"
19865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  ;;
19965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	-Xlinker)
20065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  eat=1
20165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  linker_opts="$linker_opts $2"
20265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  ;;
20365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	-*)
20465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  set x "$@" "$1"
20565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  shift
20665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  ;;
20765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	*.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
20865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  func_file_conv "$1"
20965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  set x "$@" -Tp"$file"
21065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  shift
21165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  ;;
21265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
21365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  func_file_conv "$1" mingw
21465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  set x "$@" "$file"
21565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  shift
21665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  ;;
21765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	*)
21865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  set x "$@" "$1"
21965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  shift
22065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  ;;
22165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich      esac
22265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich    fi
22365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich    shift
22465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  done
22565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  if test -n "$linker_opts"; then
22665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich    linker_opts="-link$linker_opts"
22765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  fi
22865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  exec "$@" $linker_opts
22965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  exit 1
23065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich}
23165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
23265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevicheat=
23365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
23465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichcase $1 in
23565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  '')
23665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
23765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich     exit 1;
23865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich     ;;
23965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  -h | --h*)
24065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich    cat <<\EOF
24165de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichUsage: compile [--help] [--version] PROGRAM [ARGS]
24265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
24365de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichWrapper for compilers which do not understand '-c -o'.
24465de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichRemove '-o dest.o' from ARGS, run PROGRAM with the remaining
24565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevicharguments, and rename the output as expected.
24665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
24765de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichIf you are trying to build a whole package this is not the
24865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichright script to run: please start by reading the file 'INSTALL'.
24965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
25065de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichReport bugs to <bug-automake@gnu.org>.
25165de34233da93a3d65c00b8aad3ff9aad44c57deNick KralevichEOF
25265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich    exit $?
25365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich    ;;
25465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  -v | --v*)
25565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich    echo "compile $scriptversion"
25665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich    exit $?
25765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich    ;;
25865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
25965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich    func_cl_wrapper "$@"      # Doesn't return...
26065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich    ;;
26165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichesac
26265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
26365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichofile=
26465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichcfile=
26565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
26665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichfor arg
26765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichdo
26865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  if test -n "$eat"; then
26965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich    eat=
27065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  else
27165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich    case $1 in
27265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich      -o)
27365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	# configure might choose to run compile as 'compile cc -o foo foo.c'.
27465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	# So we strip '-o arg' only if arg is an object.
27565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	eat=1
27665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	case $2 in
27765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  *.o | *.obj)
27865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	    ofile=$2
27965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	    ;;
28065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	  *)
28165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	    set x "$@" -o "$2"
28265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	    shift
28365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	    ;;
28465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	esac
28565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	;;
28665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich      *.c)
28765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	cfile=$1
28865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	set x "$@" "$1"
28965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	shift
29065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	;;
29165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich      *)
29265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	set x "$@" "$1"
29365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	shift
29465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich	;;
29565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich    esac
29665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  fi
29765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  shift
29865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichdone
29965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
30065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichif test -z "$ofile" || test -z "$cfile"; then
30165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  # If no '-o' option was seen then we might have been invoked from a
30265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  # pattern rule where we don't need one.  That is ok -- this is a
30365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  # normal compilation that the losing compiler can handle.  If no
30465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  # '.c' file was seen then we are probably linking.  That is also
30565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  # ok.
30665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  exec "$@"
30765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichfi
30865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
30965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# Name of file we expect compiler to create.
31065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichcofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
31165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
31265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# Create the lock directory.
31365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# Note: use '[/\\:.-]' here to ensure that we don't use the same name
31465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# that we are using for the .o file.  Also, base the name on the expected
31565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# object file name, since that is what matters with a parallel build.
31665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichlockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
31765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichwhile true; do
31865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  if mkdir "$lockdir" >/dev/null 2>&1; then
31965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich    break
32065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  fi
32165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  sleep 1
32265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichdone
32365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# FIXME: race condition here if user kills between mkdir and trap.
32465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichtrap "rmdir '$lockdir'; exit 1" 1 2 15
32565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
32665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# Run the compile.
32765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich"$@"
32865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichret=$?
32965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
33065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichif test -f "$cofile"; then
33165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
33265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichelif test -f "${cofile}bj"; then
33365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich  test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
33465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichfi
33565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
33665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichrmdir "$lockdir"
33765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevichexit $ret
33865de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich
33965de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# Local Variables:
34065de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# mode: shell-script
34165de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# sh-indentation: 2
34265de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# eval: (add-hook 'write-file-hooks 'time-stamp)
34365de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# time-stamp-start: "scriptversion="
34465de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# time-stamp-format: "%:y-%02m-%02d.%02H"
34565de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# time-stamp-time-zone: "UTC"
34665de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# time-stamp-end: "; # UTC"
34765de34233da93a3d65c00b8aad3ff9aad44c57deNick Kralevich# End:
348