Sync toplevel with upstream GCC.
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
		
							
								
								
									
										236
									
								
								compile
									
									
									
									
									
								
							
							
						
						
									
										236
									
								
								compile
									
									
									
									
									
								
							| @@ -1,10 +1,9 @@ | ||||
| #! /bin/sh | ||||
| # Wrapper for compilers which do not understand `-c -o'. | ||||
| # Wrapper for compilers which do not understand '-c -o'. | ||||
|  | ||||
| scriptversion=2009-04-28.21; # UTC | ||||
| scriptversion=2012-10-14.11; # UTC | ||||
|  | ||||
| # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009  Free Software | ||||
| # Foundation, Inc. | ||||
| # 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 | ||||
| @@ -29,21 +28,224 @@ scriptversion=2009-04-28.21; # UTC | ||||
| # 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 LINKDIR | ||||
| func_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 cl | ||||
| func_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 cl | ||||
| func_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 | ||||
|      echo "$0: No command.  Try '$0 --help' for more information." 1>&2 | ||||
|      exit 1; | ||||
|      ;; | ||||
|   -h | --h*) | ||||
|     cat <<\EOF | ||||
| Usage: compile [--help] [--version] PROGRAM [ARGS] | ||||
|  | ||||
| Wrapper for compilers which do not understand `-c -o'. | ||||
| Remove `-o dest.o' from ARGS, run PROGRAM with the remaining | ||||
| Wrapper for compilers which do not understand '-c -o'. | ||||
| Remove '-o dest.o' from ARGS, run PROGRAM with the remaining | ||||
| arguments, and rename the output as expected. | ||||
|  | ||||
| If you are trying to build a whole package this is not the | ||||
| right script to run: please start by reading the file `INSTALL'. | ||||
| right script to run: please start by reading the file 'INSTALL'. | ||||
|  | ||||
| Report bugs to <bug-automake@gnu.org>. | ||||
| EOF | ||||
| @@ -53,11 +255,13 @@ EOF | ||||
|     echo "compile $scriptversion" | ||||
|     exit $? | ||||
|     ;; | ||||
|   cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) | ||||
|     func_cl_wrapper "$@"      # Doesn't return... | ||||
|     ;; | ||||
| esac | ||||
|  | ||||
| ofile= | ||||
| cfile= | ||||
| eat= | ||||
|  | ||||
| for arg | ||||
| do | ||||
| @@ -66,8 +270,8 @@ do | ||||
|   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. | ||||
| 	# 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) | ||||
| @@ -94,10 +298,10 @@ do | ||||
| done | ||||
|  | ||||
| if test -z "$ofile" || test -z "$cfile"; then | ||||
|   # If no `-o' option was seen then we might have been invoked from a | ||||
|   # 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 | ||||
|   # '.c' file was seen then we are probably linking.  That is also | ||||
|   # ok. | ||||
|   exec "$@" | ||||
| fi | ||||
| @@ -106,7 +310,7 @@ fi | ||||
| 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 | ||||
| # 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'`.d | ||||
| @@ -124,9 +328,9 @@ trap "rmdir '$lockdir'; exit 1" 1 2 15 | ||||
| ret=$? | ||||
|  | ||||
| if test -f "$cofile"; then | ||||
|   mv "$cofile" "$ofile" | ||||
|   test "$cofile" = "$ofile" || mv "$cofile" "$ofile" | ||||
| elif test -f "${cofile}bj"; then | ||||
|   mv "${cofile}bj" "$ofile" | ||||
|   test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" | ||||
| fi | ||||
|  | ||||
| rmdir "$lockdir" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user