| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347 | #! /bin/sh# Wrapper for compilers which do not understand '-c -o'.scriptversion=2012-10-14.11; # UTC# Copyright (C) 1999-2014 Free Software Foundation, Inc.# Written by Tom Tromey <tromey@cygnus.com>.## This program is free software; you can redistribute it and/or modify# it under the terms of the GNU General Public License as published by# the Free Software Foundation; either version 2, or (at your option)# any later version.## This program is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the# GNU General Public License for more details.## You should have received a copy of the GNU General Public License# along with this program.  If not, see <http://www.gnu.org/licenses/>.# As a special exception to the GNU General Public License, if you# distribute this file as part of a program that contains a# configuration script generated by Autoconf, you may include it under# the same distribution terms that you use for the rest of that program.# This file is maintained in Automake, please report# bugs to <bug-automake@gnu.org> or send patches to# <automake-patches@gnu.org>.nl=''# We need space, tab and new line, in precisely that order.  Quoting is# there to prevent tools from complaining about whitespace usage.IFS=" ""	$nl"file_conv=# func_file_conv build_file lazy# Convert a $build file to $host form and store it in $file# Currently only supports Windows hosts. If the determined conversion# type is listed in (the comma separated) LAZY, no conversion will# take place.func_file_conv (){  file=$1  case $file in    / | /[!/]*) # absolute file, and not a UNC file      if test -z "$file_conv"; then	# lazily determine how to convert abs files	case `uname -s` in	  MINGW*)	    file_conv=mingw	    ;;	  CYGWIN*)	    file_conv=cygwin	    ;;	  *)	    file_conv=wine	    ;;	esac      fi      case $file_conv/,$2, in	*,$file_conv,*)	  ;;	mingw/*)	  file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`	  ;;	cygwin/*)	  file=`cygpath -m "$file" || echo "$file"`	  ;;	wine/*)	  file=`winepath -w "$file" || echo "$file"`	  ;;      esac      ;;  esac}# func_cl_dashL linkdir# Make cl look for libraries in LINKDIRfunc_cl_dashL (){  func_file_conv "$1"  if test -z "$lib_path"; then    lib_path=$file  else    lib_path="$lib_path;$file"  fi  linker_opts="$linker_opts -LIBPATH:$file"}# func_cl_dashl library# Do a library search-path lookup for clfunc_cl_dashl (){  lib=$1  found=no  save_IFS=$IFS  IFS=';'  for dir in $lib_path $LIB  do    IFS=$save_IFS    if $shared && test -f "$dir/$lib.dll.lib"; then      found=yes      lib=$dir/$lib.dll.lib      break    fi    if test -f "$dir/$lib.lib"; then      found=yes      lib=$dir/$lib.lib      break    fi    if test -f "$dir/lib$lib.a"; then      found=yes      lib=$dir/lib$lib.a      break    fi  done  IFS=$save_IFS  if test "$found" != yes; then    lib=$lib.lib  fi}# func_cl_wrapper cl arg...# Adjust compile command to suit clfunc_cl_wrapper (){  # Assume a capable shell  lib_path=  shared=:  linker_opts=  for arg  do    if test -n "$eat"; then      eat=    else      case $1 in	-o)	  # configure might choose to run compile as 'compile cc -o foo foo.c'.	  eat=1	  case $2 in	    *.o | *.[oO][bB][jJ])	      func_file_conv "$2"	      set x "$@" -Fo"$file"	      shift	      ;;	    *)	      func_file_conv "$2"	      set x "$@" -Fe"$file"	      shift	      ;;	  esac	  ;;	-I)	  eat=1	  func_file_conv "$2" mingw	  set x "$@" -I"$file"	  shift	  ;;	-I*)	  func_file_conv "${1#-I}" mingw	  set x "$@" -I"$file"	  shift	  ;;	-l)	  eat=1	  func_cl_dashl "$2"	  set x "$@" "$lib"	  shift	  ;;	-l*)	  func_cl_dashl "${1#-l}"	  set x "$@" "$lib"	  shift	  ;;	-L)	  eat=1	  func_cl_dashL "$2"	  ;;	-L*)	  func_cl_dashL "${1#-L}"	  ;;	-static)	  shared=false	  ;;	-Wl,*)	  arg=${1#-Wl,}	  save_ifs="$IFS"; IFS=','	  for flag in $arg; do	    IFS="$save_ifs"	    linker_opts="$linker_opts $flag"	  done	  IFS="$save_ifs"	  ;;	-Xlinker)	  eat=1	  linker_opts="$linker_opts $2"	  ;;	-*)	  set x "$@" "$1"	  shift	  ;;	*.cc | *.CC | *.cxx | *.CXX | *.[cC]++)	  func_file_conv "$1"	  set x "$@" -Tp"$file"	  shift	  ;;	*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])	  func_file_conv "$1" mingw	  set x "$@" "$file"	  shift	  ;;	*)	  set x "$@" "$1"	  shift	  ;;      esac    fi    shift  done  if test -n "$linker_opts"; then    linker_opts="-link$linker_opts"  fi  exec "$@" $linker_opts  exit 1}eat=case $1 in  '')     echo "$0: No command.  Try '$0 --help' for more information." 1>&2     exit 1;     ;;  -h | --h*)    cat <<\EOFUsage: compile [--help] [--version] PROGRAM [ARGS]Wrapper for compilers which do not understand '-c -o'.Remove '-o dest.o' from ARGS, run PROGRAM with the remainingarguments, and rename the output as expected.If you are trying to build a whole package this is not theright script to run: please start by reading the file 'INSTALL'.Report bugs to <bug-automake@gnu.org>.EOF    exit $?    ;;  -v | --v*)    echo "compile $scriptversion"    exit $?    ;;  cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )    func_cl_wrapper "$@"      # Doesn't return...    ;;esacofile=cfile=for argdo  if test -n "$eat"; then    eat=  else    case $1 in      -o)	# configure might choose to run compile as 'compile cc -o foo foo.c'.	# So we strip '-o arg' only if arg is an object.	eat=1	case $2 in	  *.o | *.obj)	    ofile=$2	    ;;	  *)	    set x "$@" -o "$2"	    shift	    ;;	esac	;;      *.c)	cfile=$1	set x "$@" "$1"	shift	;;      *)	set x "$@" "$1"	shift	;;    esac  fi  shiftdoneif test -z "$ofile" || test -z "$cfile"; then  # If no '-o' option was seen then we might have been invoked from a  # pattern rule where we don't need one.  That is ok -- this is a  # normal compilation that the losing compiler can handle.  If no  # '.c' file was seen then we are probably linking.  That is also  # ok.  exec "$@"fi# Name of file we expect compiler to create.cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`# Create the lock directory.# Note: use '[/\\:.-]' here to ensure that we don't use the same name# that we are using for the .o file.  Also, base the name on the expected# object file name, since that is what matters with a parallel build.lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.dwhile true; do  if mkdir "$lockdir" >/dev/null 2>&1; then    break  fi  sleep 1done# FIXME: race condition here if user kills between mkdir and trap.trap "rmdir '$lockdir'; exit 1" 1 2 15# Run the compile."$@"ret=$?if test -f "$cofile"; then  test "$cofile" = "$ofile" || mv "$cofile" "$ofile"elif test -f "${cofile}bj"; then  test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"firmdir "$lockdir"exit $ret# Local Variables:# mode: shell-script# sh-indentation: 2# eval: (add-hook 'write-file-hooks 'time-stamp)# time-stamp-start: "scriptversion="# time-stamp-format: "%:y-%02m-%02d.%02H"# time-stamp-time-zone: "UTC"# time-stamp-end: "; # UTC"# End:
 |