|
|
1.1 ! root 1: #! /bin/sh ! 2: # Wrapper for compilers which do not understand '-c -o'. ! 3: ! 4: scriptversion=2012-10-14.11; # UTC ! 5: ! 6: # Copyright (C) 1999-2013 Free Software Foundation, Inc. ! 7: # Written by Tom Tromey <[email protected]>. ! 8: # ! 9: # This program is free software; you can redistribute it and/or modify ! 10: # it under the terms of the GNU General Public License as published by ! 11: # the Free Software Foundation; either version 2, or (at your option) ! 12: # any later version. ! 13: # ! 14: # This program is distributed in the hope that it will be useful, ! 15: # but WITHOUT ANY WARRANTY; without even the implied warranty of ! 16: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! 17: # GNU General Public License for more details. ! 18: # ! 19: # You should have received a copy of the GNU General Public License ! 20: # along with this program. If not, see <http://www.gnu.org/licenses/>. ! 21: ! 22: # As a special exception to the GNU General Public License, if you ! 23: # distribute this file as part of a program that contains a ! 24: # configuration script generated by Autoconf, you may include it under ! 25: # the same distribution terms that you use for the rest of that program. ! 26: ! 27: # This file is maintained in Automake, please report ! 28: # bugs to <[email protected]> or send patches to ! 29: # <[email protected]>. ! 30: ! 31: nl=' ! 32: ' ! 33: ! 34: # We need space, tab and new line, in precisely that order. Quoting is ! 35: # there to prevent tools from complaining about whitespace usage. ! 36: IFS=" "" $nl" ! 37: ! 38: file_conv= ! 39: ! 40: # func_file_conv build_file lazy ! 41: # Convert a $build file to $host form and store it in $file ! 42: # Currently only supports Windows hosts. If the determined conversion ! 43: # type is listed in (the comma separated) LAZY, no conversion will ! 44: # take place. ! 45: func_file_conv () ! 46: { ! 47: file=$1 ! 48: case $file in ! 49: / | /[!/]*) # absolute file, and not a UNC file ! 50: if test -z "$file_conv"; then ! 51: # lazily determine how to convert abs files ! 52: case `uname -s` in ! 53: MINGW*) ! 54: file_conv=mingw ! 55: ;; ! 56: CYGWIN*) ! 57: file_conv=cygwin ! 58: ;; ! 59: *) ! 60: file_conv=wine ! 61: ;; ! 62: esac ! 63: fi ! 64: case $file_conv/,$2, in ! 65: *,$file_conv,*) ! 66: ;; ! 67: mingw/*) ! 68: file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ! 69: ;; ! 70: cygwin/*) ! 71: file=`cygpath -m "$file" || echo "$file"` ! 72: ;; ! 73: wine/*) ! 74: file=`winepath -w "$file" || echo "$file"` ! 75: ;; ! 76: esac ! 77: ;; ! 78: esac ! 79: } ! 80: ! 81: # func_cl_dashL linkdir ! 82: # Make cl look for libraries in LINKDIR ! 83: func_cl_dashL () ! 84: { ! 85: func_file_conv "$1" ! 86: if test -z "$lib_path"; then ! 87: lib_path=$file ! 88: else ! 89: lib_path="$lib_path;$file" ! 90: fi ! 91: linker_opts="$linker_opts -LIBPATH:$file" ! 92: } ! 93: ! 94: # func_cl_dashl library ! 95: # Do a library search-path lookup for cl ! 96: func_cl_dashl () ! 97: { ! 98: lib=$1 ! 99: found=no ! 100: save_IFS=$IFS ! 101: IFS=';' ! 102: for dir in $lib_path $LIB ! 103: do ! 104: IFS=$save_IFS ! 105: if $shared && test -f "$dir/$lib.dll.lib"; then ! 106: found=yes ! 107: lib=$dir/$lib.dll.lib ! 108: break ! 109: fi ! 110: if test -f "$dir/$lib.lib"; then ! 111: found=yes ! 112: lib=$dir/$lib.lib ! 113: break ! 114: fi ! 115: if test -f "$dir/lib$lib.a"; then ! 116: found=yes ! 117: lib=$dir/lib$lib.a ! 118: break ! 119: fi ! 120: done ! 121: IFS=$save_IFS ! 122: ! 123: if test "$found" != yes; then ! 124: lib=$lib.lib ! 125: fi ! 126: } ! 127: ! 128: # func_cl_wrapper cl arg... ! 129: # Adjust compile command to suit cl ! 130: func_cl_wrapper () ! 131: { ! 132: # Assume a capable shell ! 133: lib_path= ! 134: shared=: ! 135: linker_opts= ! 136: for arg ! 137: do ! 138: if test -n "$eat"; then ! 139: eat= ! 140: else ! 141: case $1 in ! 142: -o) ! 143: # configure might choose to run compile as 'compile cc -o foo foo.c'. ! 144: eat=1 ! 145: case $2 in ! 146: *.o | *.[oO][bB][jJ]) ! 147: func_file_conv "$2" ! 148: set x "$@" -Fo"$file" ! 149: shift ! 150: ;; ! 151: *) ! 152: func_file_conv "$2" ! 153: set x "$@" -Fe"$file" ! 154: shift ! 155: ;; ! 156: esac ! 157: ;; ! 158: -I) ! 159: eat=1 ! 160: func_file_conv "$2" mingw ! 161: set x "$@" -I"$file" ! 162: shift ! 163: ;; ! 164: -I*) ! 165: func_file_conv "${1#-I}" mingw ! 166: set x "$@" -I"$file" ! 167: shift ! 168: ;; ! 169: -l) ! 170: eat=1 ! 171: func_cl_dashl "$2" ! 172: set x "$@" "$lib" ! 173: shift ! 174: ;; ! 175: -l*) ! 176: func_cl_dashl "${1#-l}" ! 177: set x "$@" "$lib" ! 178: shift ! 179: ;; ! 180: -L) ! 181: eat=1 ! 182: func_cl_dashL "$2" ! 183: ;; ! 184: -L*) ! 185: func_cl_dashL "${1#-L}" ! 186: ;; ! 187: -static) ! 188: shared=false ! 189: ;; ! 190: -Wl,*) ! 191: arg=${1#-Wl,} ! 192: save_ifs="$IFS"; IFS=',' ! 193: for flag in $arg; do ! 194: IFS="$save_ifs" ! 195: linker_opts="$linker_opts $flag" ! 196: done ! 197: IFS="$save_ifs" ! 198: ;; ! 199: -Xlinker) ! 200: eat=1 ! 201: linker_opts="$linker_opts $2" ! 202: ;; ! 203: -*) ! 204: set x "$@" "$1" ! 205: shift ! 206: ;; ! 207: *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) ! 208: func_file_conv "$1" ! 209: set x "$@" -Tp"$file" ! 210: shift ! 211: ;; ! 212: *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) ! 213: func_file_conv "$1" mingw ! 214: set x "$@" "$file" ! 215: shift ! 216: ;; ! 217: *) ! 218: set x "$@" "$1" ! 219: shift ! 220: ;; ! 221: esac ! 222: fi ! 223: shift ! 224: done ! 225: if test -n "$linker_opts"; then ! 226: linker_opts="-link$linker_opts" ! 227: fi ! 228: exec "$@" $linker_opts ! 229: exit 1 ! 230: } ! 231: ! 232: eat= ! 233: ! 234: case $1 in ! 235: '') ! 236: echo "$0: No command. Try '$0 --help' for more information." 1>&2 ! 237: exit 1; ! 238: ;; ! 239: -h | --h*) ! 240: cat <<\EOF ! 241: Usage: compile [--help] [--version] PROGRAM [ARGS] ! 242: ! 243: Wrapper for compilers which do not understand '-c -o'. ! 244: Remove '-o dest.o' from ARGS, run PROGRAM with the remaining ! 245: arguments, and rename the output as expected. ! 246: ! 247: If you are trying to build a whole package this is not the ! 248: right script to run: please start by reading the file 'INSTALL'. ! 249: ! 250: Report bugs to <[email protected]>. ! 251: EOF ! 252: exit $? ! 253: ;; ! 254: -v | --v*) ! 255: echo "compile $scriptversion" ! 256: exit $? ! 257: ;; ! 258: cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) ! 259: func_cl_wrapper "$@" # Doesn't return... ! 260: ;; ! 261: esac ! 262: ! 263: ofile= ! 264: cfile= ! 265: ! 266: for arg ! 267: do ! 268: if test -n "$eat"; then ! 269: eat= ! 270: else ! 271: case $1 in ! 272: -o) ! 273: # configure might choose to run compile as 'compile cc -o foo foo.c'. ! 274: # So we strip '-o arg' only if arg is an object. ! 275: eat=1 ! 276: case $2 in ! 277: *.o | *.obj) ! 278: ofile=$2 ! 279: ;; ! 280: *) ! 281: set x "$@" -o "$2" ! 282: shift ! 283: ;; ! 284: esac ! 285: ;; ! 286: *.c) ! 287: cfile=$1 ! 288: set x "$@" "$1" ! 289: shift ! 290: ;; ! 291: *) ! 292: set x "$@" "$1" ! 293: shift ! 294: ;; ! 295: esac ! 296: fi ! 297: shift ! 298: done ! 299: ! 300: if test -z "$ofile" || test -z "$cfile"; then ! 301: # If no '-o' option was seen then we might have been invoked from a ! 302: # pattern rule where we don't need one. That is ok -- this is a ! 303: # normal compilation that the losing compiler can handle. If no ! 304: # '.c' file was seen then we are probably linking. That is also ! 305: # ok. ! 306: exec "$@" ! 307: fi ! 308: ! 309: # Name of file we expect compiler to create. ! 310: cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` ! 311: ! 312: # Create the lock directory. ! 313: # Note: use '[/\\:.-]' here to ensure that we don't use the same name ! 314: # that we are using for the .o file. Also, base the name on the expected ! 315: # object file name, since that is what matters with a parallel build. ! 316: lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d ! 317: while true; do ! 318: if mkdir "$lockdir" >/dev/null 2>&1; then ! 319: break ! 320: fi ! 321: sleep 1 ! 322: done ! 323: # FIXME: race condition here if user kills between mkdir and trap. ! 324: trap "rmdir '$lockdir'; exit 1" 1 2 15 ! 325: ! 326: # Run the compile. ! 327: "$@" ! 328: ret=$? ! 329: ! 330: if test -f "$cofile"; then ! 331: test "$cofile" = "$ofile" || mv "$cofile" "$ofile" ! 332: elif test -f "${cofile}bj"; then ! 333: test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" ! 334: fi ! 335: ! 336: rmdir "$lockdir" ! 337: exit $ret ! 338: ! 339: # Local Variables: ! 340: # mode: shell-script ! 341: # sh-indentation: 2 ! 342: # eval: (add-hook 'write-file-hooks 'time-stamp) ! 343: # time-stamp-start: "scriptversion=" ! 344: # time-stamp-format: "%:y-%02m-%02d.%02H" ! 345: # time-stamp-time-zone: "UTC" ! 346: # time-stamp-end: "; # UTC" ! 347: # End:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.