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