source: rtems/compile @ 39aab06a

4.11
Last change on this file since 39aab06a was 39aab06a, checked in by Ralf Corsépius <ralf.corsepius@…>, on May 18, 2012 at 5:11:47 AM

Update from automake-1.11.5.

  • Property mode set to 100755
File size: 7.1 KB
Line 
1#! /bin/sh
2# Wrapper for compilers which do not understand '-c -o'.
3
4scriptversion=2012-03-05.13; # UTC
5
6# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009, 2010, 2012 Free
7# Software 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
32nl='
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.
37IFS=" ""        $nl"
38
39file_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 Windows hosts. If the determined conversion
44# type is listed in (the comma separated) LAZY, no conversion will
45# take place.
46func_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_dashL linkdir
83# Make cl look for libraries in LINKDIR
84func_cl_dashL ()
85{
86  func_file_conv "$1"
87  if test -z "$lib_path"; then
88    lib_path=$file
89  else
90    lib_path="$lib_path;$file"
91  fi
92  linker_opts="$linker_opts -LIBPATH:$file"
93}
94
95# func_cl_dashl library
96# Do a library search-path lookup for cl
97func_cl_dashl ()
98{
99  lib=$1
100  found=no
101  save_IFS=$IFS
102  IFS=';'
103  for dir in $lib_path $LIB
104  do
105    IFS=$save_IFS
106    if $shared && test -f "$dir/$lib.dll.lib"; then
107      found=yes
108      lib=$dir/$lib.dll.lib
109      break
110    fi
111    if test -f "$dir/$lib.lib"; then
112      found=yes
113      lib=$dir/$lib.lib
114      break
115    fi
116  done
117  IFS=$save_IFS
118
119  if test "$found" != yes; then
120    lib=$lib.lib
121  fi
122}
123
124# func_cl_wrapper cl arg...
125# Adjust compile command to suit cl
126func_cl_wrapper ()
127{
128  # Assume a capable shell
129  lib_path=
130  shared=:
131  linker_opts=
132  for arg
133  do
134    if test -n "$eat"; then
135      eat=
136    else
137      case $1 in
138        -o)
139          # configure might choose to run compile as 'compile cc -o foo foo.c'.
140          eat=1
141          case $2 in
142            *.o | *.[oO][bB][jJ])
143              func_file_conv "$2"
144              set x "$@" -Fo"$file"
145              shift
146              ;;
147            *)
148              func_file_conv "$2"
149              set x "$@" -Fe"$file"
150              shift
151              ;;
152          esac
153          ;;
154        -I)
155          eat=1
156          func_file_conv "$2" mingw
157          set x "$@" -I"$file"
158          shift
159          ;;
160        -I*)
161          func_file_conv "${1#-I}" mingw
162          set x "$@" -I"$file"
163          shift
164          ;;
165        -l)
166          eat=1
167          func_cl_dashl "$2"
168          set x "$@" "$lib"
169          shift
170          ;;
171        -l*)
172          func_cl_dashl "${1#-l}"
173          set x "$@" "$lib"
174          shift
175          ;;
176        -L)
177          eat=1
178          func_cl_dashL "$2"
179          ;;
180        -L*)
181          func_cl_dashL "${1#-L}"
182          ;;
183        -static)
184          shared=false
185          ;;
186        -Wl,*)
187          arg=${1#-Wl,}
188          save_ifs="$IFS"; IFS=','
189          for flag in $arg; do
190            IFS="$save_ifs"
191            linker_opts="$linker_opts $flag"
192          done
193          IFS="$save_ifs"
194          ;;
195        -Xlinker)
196          eat=1
197          linker_opts="$linker_opts $2"
198          ;;
199        -*)
200          set x "$@" "$1"
201          shift
202          ;;
203        *.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
204          func_file_conv "$1"
205          set x "$@" -Tp"$file"
206          shift
207          ;;
208        *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
209          func_file_conv "$1" mingw
210          set x "$@" "$file"
211          shift
212          ;;
213        *)
214          set x "$@" "$1"
215          shift
216          ;;
217      esac
218    fi
219    shift
220  done
221  if test -n "$linker_opts"; then
222    linker_opts="-link$linker_opts"
223  fi
224  exec "$@" $linker_opts
225  exit 1
226}
227
228eat=
229
230case $1 in
231  '')
232     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
233     exit 1;
234     ;;
235  -h | --h*)
236    cat <<\EOF
237Usage: compile [--help] [--version] PROGRAM [ARGS]
238
239Wrapper for compilers which do not understand '-c -o'.
240Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
241arguments, and rename the output as expected.
242
243If you are trying to build a whole package this is not the
244right script to run: please start by reading the file 'INSTALL'.
245
246Report bugs to <bug-automake@gnu.org>.
247EOF
248    exit $?
249    ;;
250  -v | --v*)
251    echo "compile $scriptversion"
252    exit $?
253    ;;
254  cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
255    func_cl_wrapper "$@"      # Doesn't return...
256    ;;
257esac
258
259ofile=
260cfile=
261
262for arg
263do
264  if test -n "$eat"; then
265    eat=
266  else
267    case $1 in
268      -o)
269        # configure might choose to run compile as 'compile cc -o foo foo.c'.
270        # So we strip '-o arg' only if arg is an object.
271        eat=1
272        case $2 in
273          *.o | *.obj)
274            ofile=$2
275            ;;
276          *)
277            set x "$@" -o "$2"
278            shift
279            ;;
280        esac
281        ;;
282      *.c)
283        cfile=$1
284        set x "$@" "$1"
285        shift
286        ;;
287      *)
288        set x "$@" "$1"
289        shift
290        ;;
291    esac
292  fi
293  shift
294done
295
296if test -z "$ofile" || test -z "$cfile"; then
297  # If no '-o' option was seen then we might have been invoked from a
298  # pattern rule where we don't need one.  That is ok -- this is a
299  # normal compilation that the losing compiler can handle.  If no
300  # '.c' file was seen then we are probably linking.  That is also
301  # ok.
302  exec "$@"
303fi
304
305# Name of file we expect compiler to create.
306cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
307
308# Create the lock directory.
309# Note: use '[/\\:.-]' here to ensure that we don't use the same name
310# that we are using for the .o file.  Also, base the name on the expected
311# object file name, since that is what matters with a parallel build.
312lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
313while true; do
314  if mkdir "$lockdir" >/dev/null 2>&1; then
315    break
316  fi
317  sleep 1
318done
319# FIXME: race condition here if user kills between mkdir and trap.
320trap "rmdir '$lockdir'; exit 1" 1 2 15
321
322# Run the compile.
323"$@"
324ret=$?
325
326if test -f "$cofile"; then
327  test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
328elif test -f "${cofile}bj"; then
329  test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
330fi
331
332rmdir "$lockdir"
333exit $ret
334
335# Local Variables:
336# mode: shell-script
337# sh-indentation: 2
338# eval: (add-hook 'write-file-hooks 'time-stamp)
339# time-stamp-start: "scriptversion="
340# time-stamp-format: "%:y-%02m-%02d.%02H"
341# time-stamp-time-zone: "UTC"
342# time-stamp-end: "; # UTC"
343# End:
Note: See TracBrowser for help on using the repository browser.