depcomp revision c9e2be55
1c9e2be55Smrg#! /bin/sh
2c9e2be55Smrg
3c9e2be55Smrg# depcomp - compile a program generating dependencies as side-effects
4c9e2be55Smrg# Copyright 1999, 2000, 2003 Free Software Foundation, Inc.
5c9e2be55Smrg
6c9e2be55Smrg# This program is free software; you can redistribute it and/or modify
7c9e2be55Smrg# it under the terms of the GNU General Public License as published by
8c9e2be55Smrg# the Free Software Foundation; either version 2, or (at your option)
9c9e2be55Smrg# any later version.
10c9e2be55Smrg
11c9e2be55Smrg# This program is distributed in the hope that it will be useful,
12c9e2be55Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
13c9e2be55Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14c9e2be55Smrg# GNU General Public License for more details.
15c9e2be55Smrg
16c9e2be55Smrg# You should have received a copy of the GNU General Public License
17c9e2be55Smrg# along with this program; if not, write to the Free Software
18c9e2be55Smrg# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
19c9e2be55Smrg# 02111-1307, USA.
20c9e2be55Smrg
21c9e2be55Smrg# As a special exception to the GNU General Public License, if you
22c9e2be55Smrg# distribute this file as part of a program that contains a
23c9e2be55Smrg# configuration script generated by Autoconf, you may include it under
24c9e2be55Smrg# the same distribution terms that you use for the rest of that program.
25c9e2be55Smrg
26c9e2be55Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
27c9e2be55Smrg
28c9e2be55Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
29c9e2be55Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
30c9e2be55Smrg  exit 1
31c9e2be55Smrgfi
32c9e2be55Smrg# `libtool' can also be set to `yes' or `no'.
33c9e2be55Smrg
34c9e2be55Smrgif test -z "$depfile"; then
35c9e2be55Smrg   base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'`
36c9e2be55Smrg   dir=`echo "$object" | sed 's,/.*$,/,'`
37c9e2be55Smrg   if test "$dir" = "$object"; then
38c9e2be55Smrg      dir=
39c9e2be55Smrg   fi
40c9e2be55Smrg   # FIXME: should be _deps on DOS.
41c9e2be55Smrg   depfile="$dir.deps/$base"
42c9e2be55Smrgfi
43c9e2be55Smrg
44c9e2be55Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
45c9e2be55Smrg
46c9e2be55Smrgrm -f "$tmpdepfile"
47c9e2be55Smrg
48c9e2be55Smrg# Some modes work just like other modes, but use different flags.  We
49c9e2be55Smrg# parameterize here, but still list the modes in the big case below,
50c9e2be55Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
51c9e2be55Smrg# here, because this file can only contain one case statement.
52c9e2be55Smrgif test "$depmode" = hp; then
53c9e2be55Smrg  # HP compiler uses -M and no extra arg.
54c9e2be55Smrg  gccflag=-M
55c9e2be55Smrg  depmode=gcc
56c9e2be55Smrgfi
57c9e2be55Smrg
58c9e2be55Smrgif test "$depmode" = dashXmstdout; then
59c9e2be55Smrg   # This is just like dashmstdout with a different argument.
60c9e2be55Smrg   dashmflag=-xM
61c9e2be55Smrg   depmode=dashmstdout
62c9e2be55Smrgfi
63c9e2be55Smrg
64c9e2be55Smrgcase "$depmode" in
65c9e2be55Smrggcc3)
66c9e2be55Smrg## gcc 3 implements dependency tracking that does exactly what
67c9e2be55Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
68c9e2be55Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
69c9e2be55Smrg  "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
70c9e2be55Smrg  stat=$?
71c9e2be55Smrg  if test $stat -eq 0; then :
72c9e2be55Smrg  else
73c9e2be55Smrg    rm -f "$tmpdepfile"
74c9e2be55Smrg    exit $stat
75c9e2be55Smrg  fi
76c9e2be55Smrg  mv "$tmpdepfile" "$depfile"
77c9e2be55Smrg  ;;
78c9e2be55Smrg
79c9e2be55Smrggcc)
80c9e2be55Smrg## There are various ways to get dependency output from gcc.  Here's
81c9e2be55Smrg## why we pick this rather obscure method:
82c9e2be55Smrg## - Don't want to use -MD because we'd like the dependencies to end
83c9e2be55Smrg##   up in a subdir.  Having to rename by hand is ugly.
84c9e2be55Smrg##   (We might end up doing this anyway to support other compilers.)
85c9e2be55Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
86c9e2be55Smrg##   -MM, not -M (despite what the docs say).
87c9e2be55Smrg## - Using -M directly means running the compiler twice (even worse
88c9e2be55Smrg##   than renaming).
89c9e2be55Smrg  if test -z "$gccflag"; then
90c9e2be55Smrg    gccflag=-MD,
91c9e2be55Smrg  fi
92c9e2be55Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
93c9e2be55Smrg  stat=$?
94c9e2be55Smrg  if test $stat -eq 0; then :
95c9e2be55Smrg  else
96c9e2be55Smrg    rm -f "$tmpdepfile"
97c9e2be55Smrg    exit $stat
98c9e2be55Smrg  fi
99c9e2be55Smrg  rm -f "$depfile"
100c9e2be55Smrg  echo "$object : \\" > "$depfile"
101c9e2be55Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
102c9e2be55Smrg## The second -e expression handles DOS-style file names with drive letters.
103c9e2be55Smrg  sed -e 's/^[^:]*: / /' \
104c9e2be55Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
105c9e2be55Smrg## This next piece of magic avoids the `deleted header file' problem.
106c9e2be55Smrg## The problem is that when a header file which appears in a .P file
107c9e2be55Smrg## is deleted, the dependency causes make to die (because there is
108c9e2be55Smrg## typically no way to rebuild the header).  We avoid this by adding
109c9e2be55Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
110c9e2be55Smrg## this for us directly.
111c9e2be55Smrg  tr ' ' '
112c9e2be55Smrg' < "$tmpdepfile" |
113c9e2be55Smrg## Some versions of gcc put a space before the `:'.  On the theory
114c9e2be55Smrg## that the space means something, we add a space to the output as
115c9e2be55Smrg## well.
116c9e2be55Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
117c9e2be55Smrg## correctly.  Breaking it into two sed invocations is a workaround.
118c9e2be55Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
119c9e2be55Smrg  rm -f "$tmpdepfile"
120c9e2be55Smrg  ;;
121c9e2be55Smrg
122c9e2be55Smrghp)
123c9e2be55Smrg  # This case exists only to let depend.m4 do its work.  It works by
124c9e2be55Smrg  # looking at the text of this script.  This case will never be run,
125c9e2be55Smrg  # since it is checked for above.
126c9e2be55Smrg  exit 1
127c9e2be55Smrg  ;;
128c9e2be55Smrg
129c9e2be55Smrgsgi)
130c9e2be55Smrg  if test "$libtool" = yes; then
131c9e2be55Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
132c9e2be55Smrg  else
133c9e2be55Smrg    "$@" -MDupdate "$tmpdepfile"
134c9e2be55Smrg  fi
135c9e2be55Smrg  stat=$?
136c9e2be55Smrg  if test $stat -eq 0; then :
137c9e2be55Smrg  else
138c9e2be55Smrg    rm -f "$tmpdepfile"
139c9e2be55Smrg    exit $stat
140c9e2be55Smrg  fi
141c9e2be55Smrg  rm -f "$depfile"
142c9e2be55Smrg
143c9e2be55Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
144c9e2be55Smrg    echo "$object : \\" > "$depfile"
145c9e2be55Smrg
146c9e2be55Smrg    # Clip off the initial element (the dependent).  Don't try to be
147c9e2be55Smrg    # clever and replace this with sed code, as IRIX sed won't handle
148c9e2be55Smrg    # lines with more than a fixed number of characters (4096 in
149c9e2be55Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
150c9e2be55Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
151c9e2be55Smrg    # dependency line.
152c9e2be55Smrg    tr ' ' '
153c9e2be55Smrg' < "$tmpdepfile" \
154c9e2be55Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
155c9e2be55Smrg    tr '
156c9e2be55Smrg' ' ' >> $depfile
157c9e2be55Smrg    echo >> $depfile
158c9e2be55Smrg
159c9e2be55Smrg    # The second pass generates a dummy entry for each header file.
160c9e2be55Smrg    tr ' ' '
161c9e2be55Smrg' < "$tmpdepfile" \
162c9e2be55Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
163c9e2be55Smrg   >> $depfile
164c9e2be55Smrg  else
165c9e2be55Smrg    # The sourcefile does not contain any dependencies, so just
166c9e2be55Smrg    # store a dummy comment line, to avoid errors with the Makefile
167c9e2be55Smrg    # "include basename.Plo" scheme.
168c9e2be55Smrg    echo "#dummy" > "$depfile"
169c9e2be55Smrg  fi
170c9e2be55Smrg  rm -f "$tmpdepfile"
171c9e2be55Smrg  ;;
172c9e2be55Smrg
173c9e2be55Smrgaix)
174c9e2be55Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
175c9e2be55Smrg  # in a .u file.  In older versions, this file always lives in the
176c9e2be55Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
177c9e2be55Smrg  # start of each line; $object doesn't have directory information.
178c9e2be55Smrg  # Version 6 uses the directory in both cases.
179c9e2be55Smrg  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
180c9e2be55Smrg  tmpdepfile="$stripped.u"
181c9e2be55Smrg  if test "$libtool" = yes; then
182c9e2be55Smrg    "$@" -Wc,-M
183c9e2be55Smrg  else
184c9e2be55Smrg    "$@" -M
185c9e2be55Smrg  fi
186c9e2be55Smrg  stat=$?
187c9e2be55Smrg
188c9e2be55Smrg  if test -f "$tmpdepfile"; then :
189c9e2be55Smrg  else
190c9e2be55Smrg    stripped=`echo "$stripped" | sed 's,^.*/,,'`
191c9e2be55Smrg    tmpdepfile="$stripped.u"
192c9e2be55Smrg  fi
193c9e2be55Smrg
194c9e2be55Smrg  if test $stat -eq 0; then :
195c9e2be55Smrg  else
196c9e2be55Smrg    rm -f "$tmpdepfile"
197c9e2be55Smrg    exit $stat
198c9e2be55Smrg  fi
199c9e2be55Smrg
200c9e2be55Smrg  if test -f "$tmpdepfile"; then
201c9e2be55Smrg    outname="$stripped.o"
202c9e2be55Smrg    # Each line is of the form `foo.o: dependent.h'.
203c9e2be55Smrg    # Do two passes, one to just change these to
204c9e2be55Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
205c9e2be55Smrg    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
206c9e2be55Smrg    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
207c9e2be55Smrg  else
208c9e2be55Smrg    # The sourcefile does not contain any dependencies, so just
209c9e2be55Smrg    # store a dummy comment line, to avoid errors with the Makefile
210c9e2be55Smrg    # "include basename.Plo" scheme.
211c9e2be55Smrg    echo "#dummy" > "$depfile"
212c9e2be55Smrg  fi
213c9e2be55Smrg  rm -f "$tmpdepfile"
214c9e2be55Smrg  ;;
215c9e2be55Smrg
216c9e2be55Smrgicc)
217c9e2be55Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
218c9e2be55Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
219c9e2be55Smrg  # ICC 7.0 will fill foo.d with something like
220c9e2be55Smrg  #    foo.o: sub/foo.c
221c9e2be55Smrg  #    foo.o: sub/foo.h
222c9e2be55Smrg  # which is wrong.  We want:
223c9e2be55Smrg  #    sub/foo.o: sub/foo.c
224c9e2be55Smrg  #    sub/foo.o: sub/foo.h
225c9e2be55Smrg  #    sub/foo.c:
226c9e2be55Smrg  #    sub/foo.h:
227c9e2be55Smrg  # ICC 7.1 will output
228c9e2be55Smrg  #    foo.o: sub/foo.c sub/foo.h
229c9e2be55Smrg  # and will wrap long lines using \ :
230c9e2be55Smrg  #    foo.o: sub/foo.c ... \
231c9e2be55Smrg  #     sub/foo.h ... \
232c9e2be55Smrg  #     ...
233c9e2be55Smrg
234c9e2be55Smrg  "$@" -MD -MF "$tmpdepfile"
235c9e2be55Smrg  stat=$?
236c9e2be55Smrg  if test $stat -eq 0; then :
237c9e2be55Smrg  else
238c9e2be55Smrg    rm -f "$tmpdepfile"
239c9e2be55Smrg    exit $stat
240c9e2be55Smrg  fi
241c9e2be55Smrg  rm -f "$depfile"
242c9e2be55Smrg  # Each line is of the form `foo.o: dependent.h',
243c9e2be55Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
244c9e2be55Smrg  # Do two passes, one to just change these to
245c9e2be55Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
246c9e2be55Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
247c9e2be55Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
248c9e2be55Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
249c9e2be55Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
250c9e2be55Smrg    sed -e 's/$/ :/' >> "$depfile"
251c9e2be55Smrg  rm -f "$tmpdepfile"
252c9e2be55Smrg  ;;
253c9e2be55Smrg
254c9e2be55Smrgtru64)
255c9e2be55Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
256c9e2be55Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
257c9e2be55Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
258c9e2be55Smrg   # dependencies in `foo.d' instead, so we check for that too.
259c9e2be55Smrg   # Subdirectories are respected.
260c9e2be55Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
261c9e2be55Smrg   test "x$dir" = "x$object" && dir=
262c9e2be55Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
263c9e2be55Smrg
264c9e2be55Smrg   if test "$libtool" = yes; then
265c9e2be55Smrg      tmpdepfile1="$dir.libs/$base.lo.d"
266c9e2be55Smrg      tmpdepfile2="$dir.libs/$base.d"
267c9e2be55Smrg      "$@" -Wc,-MD
268c9e2be55Smrg   else
269c9e2be55Smrg      tmpdepfile1="$dir$base.o.d"
270c9e2be55Smrg      tmpdepfile2="$dir$base.d"
271c9e2be55Smrg      "$@" -MD
272c9e2be55Smrg   fi
273c9e2be55Smrg
274c9e2be55Smrg   stat=$?
275c9e2be55Smrg   if test $stat -eq 0; then :
276c9e2be55Smrg   else
277c9e2be55Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2"
278c9e2be55Smrg      exit $stat
279c9e2be55Smrg   fi
280c9e2be55Smrg
281c9e2be55Smrg   if test -f "$tmpdepfile1"; then
282c9e2be55Smrg      tmpdepfile="$tmpdepfile1"
283c9e2be55Smrg   else
284c9e2be55Smrg      tmpdepfile="$tmpdepfile2"
285c9e2be55Smrg   fi
286c9e2be55Smrg   if test -f "$tmpdepfile"; then
287c9e2be55Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
288c9e2be55Smrg      # That's a tab and a space in the [].
289c9e2be55Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
290c9e2be55Smrg   else
291c9e2be55Smrg      echo "#dummy" > "$depfile"
292c9e2be55Smrg   fi
293c9e2be55Smrg   rm -f "$tmpdepfile"
294c9e2be55Smrg   ;;
295c9e2be55Smrg
296c9e2be55Smrg#nosideeffect)
297c9e2be55Smrg  # This comment above is used by automake to tell side-effect
298c9e2be55Smrg  # dependency tracking mechanisms from slower ones.
299c9e2be55Smrg
300c9e2be55Smrgdashmstdout)
301c9e2be55Smrg  # Important note: in order to support this mode, a compiler *must*
302c9e2be55Smrg  # always write the preprocessed file to stdout, regardless of -o.
303c9e2be55Smrg  "$@" || exit $?
304c9e2be55Smrg
305c9e2be55Smrg  # Remove the call to Libtool.
306c9e2be55Smrg  if test "$libtool" = yes; then
307c9e2be55Smrg    while test $1 != '--mode=compile'; do
308c9e2be55Smrg      shift
309c9e2be55Smrg    done
310c9e2be55Smrg    shift
311c9e2be55Smrg  fi
312c9e2be55Smrg
313c9e2be55Smrg  # Remove `-o $object'.
314c9e2be55Smrg  IFS=" "
315c9e2be55Smrg  for arg
316c9e2be55Smrg  do
317c9e2be55Smrg    case $arg in
318c9e2be55Smrg    -o)
319c9e2be55Smrg      shift
320c9e2be55Smrg      ;;
321c9e2be55Smrg    $object)
322c9e2be55Smrg      shift
323c9e2be55Smrg      ;;
324c9e2be55Smrg    *)
325c9e2be55Smrg      set fnord "$@" "$arg"
326c9e2be55Smrg      shift # fnord
327c9e2be55Smrg      shift # $arg
328c9e2be55Smrg      ;;
329c9e2be55Smrg    esac
330c9e2be55Smrg  done
331c9e2be55Smrg
332c9e2be55Smrg  test -z "$dashmflag" && dashmflag=-M
333c9e2be55Smrg  # Require at least two characters before searching for `:'
334c9e2be55Smrg  # in the target name.  This is to cope with DOS-style filenames:
335c9e2be55Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
336c9e2be55Smrg  "$@" $dashmflag |
337c9e2be55Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
338c9e2be55Smrg  rm -f "$depfile"
339c9e2be55Smrg  cat < "$tmpdepfile" > "$depfile"
340c9e2be55Smrg  tr ' ' '
341c9e2be55Smrg' < "$tmpdepfile" | \
342c9e2be55Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
343c9e2be55Smrg## correctly.  Breaking it into two sed invocations is a workaround.
344c9e2be55Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
345c9e2be55Smrg  rm -f "$tmpdepfile"
346c9e2be55Smrg  ;;
347c9e2be55Smrg
348c9e2be55SmrgdashXmstdout)
349c9e2be55Smrg  # This case only exists to satisfy depend.m4.  It is never actually
350c9e2be55Smrg  # run, as this mode is specially recognized in the preamble.
351c9e2be55Smrg  exit 1
352c9e2be55Smrg  ;;
353c9e2be55Smrg
354c9e2be55Smrgmakedepend)
355c9e2be55Smrg  "$@" || exit $?
356c9e2be55Smrg  # Remove any Libtool call
357c9e2be55Smrg  if test "$libtool" = yes; then
358c9e2be55Smrg    while test $1 != '--mode=compile'; do
359c9e2be55Smrg      shift
360c9e2be55Smrg    done
361c9e2be55Smrg    shift
362c9e2be55Smrg  fi
363c9e2be55Smrg  # X makedepend
364c9e2be55Smrg  shift
365c9e2be55Smrg  cleared=no
366c9e2be55Smrg  for arg in "$@"; do
367c9e2be55Smrg    case $cleared in
368c9e2be55Smrg    no)
369c9e2be55Smrg      set ""; shift
370c9e2be55Smrg      cleared=yes ;;
371c9e2be55Smrg    esac
372c9e2be55Smrg    case "$arg" in
373c9e2be55Smrg    -D*|-I*)
374c9e2be55Smrg      set fnord "$@" "$arg"; shift ;;
375c9e2be55Smrg    # Strip any option that makedepend may not understand.  Remove
376c9e2be55Smrg    # the object too, otherwise makedepend will parse it as a source file.
377c9e2be55Smrg    -*|$object)
378c9e2be55Smrg      ;;
379c9e2be55Smrg    *)
380c9e2be55Smrg      set fnord "$@" "$arg"; shift ;;
381c9e2be55Smrg    esac
382c9e2be55Smrg  done
383c9e2be55Smrg  obj_suffix="`echo $object | sed 's/^.*\././'`"
384c9e2be55Smrg  touch "$tmpdepfile"
385c9e2be55Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
386c9e2be55Smrg  rm -f "$depfile"
387c9e2be55Smrg  cat < "$tmpdepfile" > "$depfile"
388c9e2be55Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
389c9e2be55Smrg' | \
390c9e2be55Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
391c9e2be55Smrg## correctly.  Breaking it into two sed invocations is a workaround.
392c9e2be55Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
393c9e2be55Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
394c9e2be55Smrg  ;;
395c9e2be55Smrg
396c9e2be55Smrgcpp)
397c9e2be55Smrg  # Important note: in order to support this mode, a compiler *must*
398c9e2be55Smrg  # always write the preprocessed file to stdout.
399c9e2be55Smrg  "$@" || exit $?
400c9e2be55Smrg
401c9e2be55Smrg  # Remove the call to Libtool.
402c9e2be55Smrg  if test "$libtool" = yes; then
403c9e2be55Smrg    while test $1 != '--mode=compile'; do
404c9e2be55Smrg      shift
405c9e2be55Smrg    done
406c9e2be55Smrg    shift
407c9e2be55Smrg  fi
408c9e2be55Smrg
409c9e2be55Smrg  # Remove `-o $object'.
410c9e2be55Smrg  IFS=" "
411c9e2be55Smrg  for arg
412c9e2be55Smrg  do
413c9e2be55Smrg    case $arg in
414c9e2be55Smrg    -o)
415c9e2be55Smrg      shift
416c9e2be55Smrg      ;;
417c9e2be55Smrg    $object)
418c9e2be55Smrg      shift
419c9e2be55Smrg      ;;
420c9e2be55Smrg    *)
421c9e2be55Smrg      set fnord "$@" "$arg"
422c9e2be55Smrg      shift # fnord
423c9e2be55Smrg      shift # $arg
424c9e2be55Smrg      ;;
425c9e2be55Smrg    esac
426c9e2be55Smrg  done
427c9e2be55Smrg
428c9e2be55Smrg  "$@" -E |
429c9e2be55Smrg    sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
430c9e2be55Smrg    sed '$ s: \\$::' > "$tmpdepfile"
431c9e2be55Smrg  rm -f "$depfile"
432c9e2be55Smrg  echo "$object : \\" > "$depfile"
433c9e2be55Smrg  cat < "$tmpdepfile" >> "$depfile"
434c9e2be55Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
435c9e2be55Smrg  rm -f "$tmpdepfile"
436c9e2be55Smrg  ;;
437c9e2be55Smrg
438c9e2be55Smrgmsvisualcpp)
439c9e2be55Smrg  # Important note: in order to support this mode, a compiler *must*
440c9e2be55Smrg  # always write the preprocessed file to stdout, regardless of -o,
441c9e2be55Smrg  # because we must use -o when running libtool.
442c9e2be55Smrg  "$@" || exit $?
443c9e2be55Smrg  IFS=" "
444c9e2be55Smrg  for arg
445c9e2be55Smrg  do
446c9e2be55Smrg    case "$arg" in
447c9e2be55Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
448c9e2be55Smrg	set fnord "$@"
449c9e2be55Smrg	shift
450c9e2be55Smrg	shift
451c9e2be55Smrg	;;
452c9e2be55Smrg    *)
453c9e2be55Smrg	set fnord "$@" "$arg"
454c9e2be55Smrg	shift
455c9e2be55Smrg	shift
456c9e2be55Smrg	;;
457c9e2be55Smrg    esac
458c9e2be55Smrg  done
459c9e2be55Smrg  "$@" -E |
460c9e2be55Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
461c9e2be55Smrg  rm -f "$depfile"
462c9e2be55Smrg  echo "$object : \\" > "$depfile"
463c9e2be55Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
464c9e2be55Smrg  echo "	" >> "$depfile"
465c9e2be55Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
466c9e2be55Smrg  rm -f "$tmpdepfile"
467c9e2be55Smrg  ;;
468c9e2be55Smrg
469c9e2be55Smrgnone)
470c9e2be55Smrg  exec "$@"
471c9e2be55Smrg  ;;
472c9e2be55Smrg
473c9e2be55Smrg*)
474c9e2be55Smrg  echo "Unknown depmode $depmode" 1>&2
475c9e2be55Smrg  exit 1
476c9e2be55Smrg  ;;
477c9e2be55Smrgesac
478c9e2be55Smrg
479c9e2be55Smrgexit 0
480