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