depcomp revision c2b339b4
1e9554658Smrg#! /bin/sh
2e9554658Smrg# depcomp - compile a program generating dependencies as side-effects
3e9554658Smrg
4c2b339b4Smrgscriptversion=2009-04-28.21; # UTC
5e9554658Smrg
6c2b339b4Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
7c2b339b4Smrg# Software Foundation, Inc.
8e9554658Smrg
9e9554658Smrg# This program is free software; you can redistribute it and/or modify
10e9554658Smrg# it under the terms of the GNU General Public License as published by
11e9554658Smrg# the Free Software Foundation; either version 2, or (at your option)
12e9554658Smrg# any later version.
13e9554658Smrg
14e9554658Smrg# This program is distributed in the hope that it will be useful,
15e9554658Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
16e9554658Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17e9554658Smrg# GNU General Public License for more details.
18e9554658Smrg
19e9554658Smrg# You should have received a copy of the GNU General Public License
20c2b339b4Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
21e9554658Smrg
22e9554658Smrg# As a special exception to the GNU General Public License, if you
23e9554658Smrg# distribute this file as part of a program that contains a
24e9554658Smrg# configuration script generated by Autoconf, you may include it under
25e9554658Smrg# the same distribution terms that you use for the rest of that program.
26e9554658Smrg
27e9554658Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
28e9554658Smrg
29e9554658Smrgcase $1 in
30e9554658Smrg  '')
31e9554658Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
32e9554658Smrg     exit 1;
33e9554658Smrg     ;;
34e9554658Smrg  -h | --h*)
35e9554658Smrg    cat <<\EOF
36e9554658SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
37e9554658Smrg
38e9554658SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
39e9554658Smrgas side-effects.
40e9554658Smrg
41e9554658SmrgEnvironment variables:
42e9554658Smrg  depmode     Dependency tracking mode.
43e9554658Smrg  source      Source file read by `PROGRAMS ARGS'.
44e9554658Smrg  object      Object file output by `PROGRAMS ARGS'.
45e9554658Smrg  DEPDIR      directory where to store dependencies.
46e9554658Smrg  depfile     Dependency file to output.
47e9554658Smrg  tmpdepfile  Temporary file to use when outputing dependencies.
48e9554658Smrg  libtool     Whether libtool is used (yes/no).
49e9554658Smrg
50e9554658SmrgReport bugs to <bug-automake@gnu.org>.
51e9554658SmrgEOF
52e9554658Smrg    exit $?
53e9554658Smrg    ;;
54e9554658Smrg  -v | --v*)
55e9554658Smrg    echo "depcomp $scriptversion"
56e9554658Smrg    exit $?
57e9554658Smrg    ;;
58e9554658Smrgesac
59e9554658Smrg
60e9554658Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
61e9554658Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
62e9554658Smrg  exit 1
63e9554658Smrgfi
64e9554658Smrg
65e9554658Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
66e9554658Smrgdepfile=${depfile-`echo "$object" |
67e9554658Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
68e9554658Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
69e9554658Smrg
70e9554658Smrgrm -f "$tmpdepfile"
71e9554658Smrg
72e9554658Smrg# Some modes work just like other modes, but use different flags.  We
73e9554658Smrg# parameterize here, but still list the modes in the big case below,
74e9554658Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
75e9554658Smrg# here, because this file can only contain one case statement.
76e9554658Smrgif test "$depmode" = hp; then
77e9554658Smrg  # HP compiler uses -M and no extra arg.
78e9554658Smrg  gccflag=-M
79e9554658Smrg  depmode=gcc
80e9554658Smrgfi
81e9554658Smrg
82e9554658Smrgif test "$depmode" = dashXmstdout; then
83e9554658Smrg   # This is just like dashmstdout with a different argument.
84e9554658Smrg   dashmflag=-xM
85e9554658Smrg   depmode=dashmstdout
86e9554658Smrgfi
87e9554658Smrg
88c2b339b4Smrgcygpath_u="cygpath -u -f -"
89c2b339b4Smrgif test "$depmode" = msvcmsys; then
90c2b339b4Smrg   # This is just like msvisualcpp but w/o cygpath translation.
91c2b339b4Smrg   # Just convert the backslash-escaped backslashes to single forward
92c2b339b4Smrg   # slashes to satisfy depend.m4
93c2b339b4Smrg   cygpath_u="sed s,\\\\\\\\,/,g"
94c2b339b4Smrg   depmode=msvisualcpp
95c2b339b4Smrgfi
96c2b339b4Smrg
97e9554658Smrgcase "$depmode" in
98e9554658Smrggcc3)
99e9554658Smrg## gcc 3 implements dependency tracking that does exactly what
100e9554658Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
101e9554658Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
102e9554658Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
103e9554658Smrg## the command line argument order; so add the flags where they
104e9554658Smrg## appear in depend2.am.  Note that the slowdown incurred here
105e9554658Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
106e9554658Smrg  for arg
107e9554658Smrg  do
108e9554658Smrg    case $arg in
109e9554658Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
110e9554658Smrg    *)  set fnord "$@" "$arg" ;;
111e9554658Smrg    esac
112e9554658Smrg    shift # fnord
113e9554658Smrg    shift # $arg
114e9554658Smrg  done
115e9554658Smrg  "$@"
116e9554658Smrg  stat=$?
117e9554658Smrg  if test $stat -eq 0; then :
118e9554658Smrg  else
119e9554658Smrg    rm -f "$tmpdepfile"
120e9554658Smrg    exit $stat
121e9554658Smrg  fi
122e9554658Smrg  mv "$tmpdepfile" "$depfile"
123e9554658Smrg  ;;
124e9554658Smrg
125e9554658Smrggcc)
126e9554658Smrg## There are various ways to get dependency output from gcc.  Here's
127e9554658Smrg## why we pick this rather obscure method:
128e9554658Smrg## - Don't want to use -MD because we'd like the dependencies to end
129e9554658Smrg##   up in a subdir.  Having to rename by hand is ugly.
130e9554658Smrg##   (We might end up doing this anyway to support other compilers.)
131e9554658Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
132e9554658Smrg##   -MM, not -M (despite what the docs say).
133e9554658Smrg## - Using -M directly means running the compiler twice (even worse
134e9554658Smrg##   than renaming).
135e9554658Smrg  if test -z "$gccflag"; then
136e9554658Smrg    gccflag=-MD,
137e9554658Smrg  fi
138e9554658Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
139e9554658Smrg  stat=$?
140e9554658Smrg  if test $stat -eq 0; then :
141e9554658Smrg  else
142e9554658Smrg    rm -f "$tmpdepfile"
143e9554658Smrg    exit $stat
144e9554658Smrg  fi
145e9554658Smrg  rm -f "$depfile"
146e9554658Smrg  echo "$object : \\" > "$depfile"
147e9554658Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
148e9554658Smrg## The second -e expression handles DOS-style file names with drive letters.
149e9554658Smrg  sed -e 's/^[^:]*: / /' \
150e9554658Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
151e9554658Smrg## This next piece of magic avoids the `deleted header file' problem.
152e9554658Smrg## The problem is that when a header file which appears in a .P file
153e9554658Smrg## is deleted, the dependency causes make to die (because there is
154e9554658Smrg## typically no way to rebuild the header).  We avoid this by adding
155e9554658Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
156e9554658Smrg## this for us directly.
157e9554658Smrg  tr ' ' '
158e9554658Smrg' < "$tmpdepfile" |
159e9554658Smrg## Some versions of gcc put a space before the `:'.  On the theory
160e9554658Smrg## that the space means something, we add a space to the output as
161e9554658Smrg## well.
162e9554658Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
163e9554658Smrg## correctly.  Breaking it into two sed invocations is a workaround.
164e9554658Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
165e9554658Smrg  rm -f "$tmpdepfile"
166e9554658Smrg  ;;
167e9554658Smrg
168e9554658Smrghp)
169e9554658Smrg  # This case exists only to let depend.m4 do its work.  It works by
170e9554658Smrg  # looking at the text of this script.  This case will never be run,
171e9554658Smrg  # since it is checked for above.
172e9554658Smrg  exit 1
173e9554658Smrg  ;;
174e9554658Smrg
175e9554658Smrgsgi)
176e9554658Smrg  if test "$libtool" = yes; then
177e9554658Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
178e9554658Smrg  else
179e9554658Smrg    "$@" -MDupdate "$tmpdepfile"
180e9554658Smrg  fi
181e9554658Smrg  stat=$?
182e9554658Smrg  if test $stat -eq 0; then :
183e9554658Smrg  else
184e9554658Smrg    rm -f "$tmpdepfile"
185e9554658Smrg    exit $stat
186e9554658Smrg  fi
187e9554658Smrg  rm -f "$depfile"
188e9554658Smrg
189e9554658Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
190e9554658Smrg    echo "$object : \\" > "$depfile"
191e9554658Smrg
192e9554658Smrg    # Clip off the initial element (the dependent).  Don't try to be
193e9554658Smrg    # clever and replace this with sed code, as IRIX sed won't handle
194e9554658Smrg    # lines with more than a fixed number of characters (4096 in
195e9554658Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
196e9554658Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
197e9554658Smrg    # dependency line.
198e9554658Smrg    tr ' ' '
199e9554658Smrg' < "$tmpdepfile" \
200e9554658Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
201e9554658Smrg    tr '
202c2b339b4Smrg' ' ' >> "$depfile"
203c2b339b4Smrg    echo >> "$depfile"
204e9554658Smrg
205e9554658Smrg    # The second pass generates a dummy entry for each header file.
206e9554658Smrg    tr ' ' '
207e9554658Smrg' < "$tmpdepfile" \
208e9554658Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
209c2b339b4Smrg   >> "$depfile"
210e9554658Smrg  else
211e9554658Smrg    # The sourcefile does not contain any dependencies, so just
212e9554658Smrg    # store a dummy comment line, to avoid errors with the Makefile
213e9554658Smrg    # "include basename.Plo" scheme.
214e9554658Smrg    echo "#dummy" > "$depfile"
215e9554658Smrg  fi
216e9554658Smrg  rm -f "$tmpdepfile"
217e9554658Smrg  ;;
218e9554658Smrg
219e9554658Smrgaix)
220e9554658Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
221e9554658Smrg  # in a .u file.  In older versions, this file always lives in the
222e9554658Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
223e9554658Smrg  # start of each line; $object doesn't have directory information.
224e9554658Smrg  # Version 6 uses the directory in both cases.
225c2b339b4Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
226c2b339b4Smrg  test "x$dir" = "x$object" && dir=
227c2b339b4Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
228e9554658Smrg  if test "$libtool" = yes; then
229c2b339b4Smrg    tmpdepfile1=$dir$base.u
230c2b339b4Smrg    tmpdepfile2=$base.u
231c2b339b4Smrg    tmpdepfile3=$dir.libs/$base.u
232e9554658Smrg    "$@" -Wc,-M
233e9554658Smrg  else
234c2b339b4Smrg    tmpdepfile1=$dir$base.u
235c2b339b4Smrg    tmpdepfile2=$dir$base.u
236c2b339b4Smrg    tmpdepfile3=$dir$base.u
237e9554658Smrg    "$@" -M
238e9554658Smrg  fi
239e9554658Smrg  stat=$?
240e9554658Smrg
241e9554658Smrg  if test $stat -eq 0; then :
242e9554658Smrg  else
243c2b339b4Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
244e9554658Smrg    exit $stat
245e9554658Smrg  fi
246e9554658Smrg
247c2b339b4Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
248c2b339b4Smrg  do
249c2b339b4Smrg    test -f "$tmpdepfile" && break
250c2b339b4Smrg  done
251e9554658Smrg  if test -f "$tmpdepfile"; then
252e9554658Smrg    # Each line is of the form `foo.o: dependent.h'.
253e9554658Smrg    # Do two passes, one to just change these to
254e9554658Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
255c2b339b4Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
256c2b339b4Smrg    # That's a tab and a space in the [].
257c2b339b4Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
258e9554658Smrg  else
259e9554658Smrg    # The sourcefile does not contain any dependencies, so just
260e9554658Smrg    # store a dummy comment line, to avoid errors with the Makefile
261e9554658Smrg    # "include basename.Plo" scheme.
262e9554658Smrg    echo "#dummy" > "$depfile"
263e9554658Smrg  fi
264e9554658Smrg  rm -f "$tmpdepfile"
265e9554658Smrg  ;;
266e9554658Smrg
267e9554658Smrgicc)
268e9554658Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
269e9554658Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
270e9554658Smrg  # ICC 7.0 will fill foo.d with something like
271e9554658Smrg  #    foo.o: sub/foo.c
272e9554658Smrg  #    foo.o: sub/foo.h
273e9554658Smrg  # which is wrong.  We want:
274e9554658Smrg  #    sub/foo.o: sub/foo.c
275e9554658Smrg  #    sub/foo.o: sub/foo.h
276e9554658Smrg  #    sub/foo.c:
277e9554658Smrg  #    sub/foo.h:
278e9554658Smrg  # ICC 7.1 will output
279e9554658Smrg  #    foo.o: sub/foo.c sub/foo.h
280e9554658Smrg  # and will wrap long lines using \ :
281e9554658Smrg  #    foo.o: sub/foo.c ... \
282e9554658Smrg  #     sub/foo.h ... \
283e9554658Smrg  #     ...
284e9554658Smrg
285e9554658Smrg  "$@" -MD -MF "$tmpdepfile"
286e9554658Smrg  stat=$?
287e9554658Smrg  if test $stat -eq 0; then :
288e9554658Smrg  else
289e9554658Smrg    rm -f "$tmpdepfile"
290e9554658Smrg    exit $stat
291e9554658Smrg  fi
292e9554658Smrg  rm -f "$depfile"
293e9554658Smrg  # Each line is of the form `foo.o: dependent.h',
294e9554658Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
295e9554658Smrg  # Do two passes, one to just change these to
296e9554658Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
297e9554658Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
298e9554658Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
299e9554658Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
300e9554658Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
301e9554658Smrg    sed -e 's/$/ :/' >> "$depfile"
302e9554658Smrg  rm -f "$tmpdepfile"
303e9554658Smrg  ;;
304e9554658Smrg
305e9554658Smrghp2)
306e9554658Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
307e9554658Smrg  # compilers, which have integrated preprocessors.  The correct option
308e9554658Smrg  # to use with these is +Maked; it writes dependencies to a file named
309e9554658Smrg  # 'foo.d', which lands next to the object file, wherever that
310e9554658Smrg  # happens to be.
311e9554658Smrg  # Much of this is similar to the tru64 case; see comments there.
312e9554658Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
313e9554658Smrg  test "x$dir" = "x$object" && dir=
314e9554658Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
315e9554658Smrg  if test "$libtool" = yes; then
316e9554658Smrg    tmpdepfile1=$dir$base.d
317e9554658Smrg    tmpdepfile2=$dir.libs/$base.d
318e9554658Smrg    "$@" -Wc,+Maked
319e9554658Smrg  else
320e9554658Smrg    tmpdepfile1=$dir$base.d
321e9554658Smrg    tmpdepfile2=$dir$base.d
322e9554658Smrg    "$@" +Maked
323e9554658Smrg  fi
324e9554658Smrg  stat=$?
325e9554658Smrg  if test $stat -eq 0; then :
326e9554658Smrg  else
327e9554658Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
328e9554658Smrg     exit $stat
329e9554658Smrg  fi
330e9554658Smrg
331e9554658Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
332e9554658Smrg  do
333e9554658Smrg    test -f "$tmpdepfile" && break
334e9554658Smrg  done
335e9554658Smrg  if test -f "$tmpdepfile"; then
336e9554658Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
337e9554658Smrg    # Add `dependent.h:' lines.
338c2b339b4Smrg    sed -ne '2,${
339c2b339b4Smrg	       s/^ *//
340c2b339b4Smrg	       s/ \\*$//
341c2b339b4Smrg	       s/$/:/
342c2b339b4Smrg	       p
343c2b339b4Smrg	     }' "$tmpdepfile" >> "$depfile"
344e9554658Smrg  else
345e9554658Smrg    echo "#dummy" > "$depfile"
346e9554658Smrg  fi
347e9554658Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
348e9554658Smrg  ;;
349e9554658Smrg
350e9554658Smrgtru64)
351e9554658Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
352e9554658Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
353e9554658Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
354e9554658Smrg   # dependencies in `foo.d' instead, so we check for that too.
355e9554658Smrg   # Subdirectories are respected.
356e9554658Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
357e9554658Smrg   test "x$dir" = "x$object" && dir=
358e9554658Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
359e9554658Smrg
360e9554658Smrg   if test "$libtool" = yes; then
361e9554658Smrg      # With Tru64 cc, shared objects can also be used to make a
362e9554658Smrg      # static library.  This mechanism is used in libtool 1.4 series to
363e9554658Smrg      # handle both shared and static libraries in a single compilation.
364e9554658Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
365e9554658Smrg      #
366e9554658Smrg      # With libtool 1.5 this exception was removed, and libtool now
367e9554658Smrg      # generates 2 separate objects for the 2 libraries.  These two
368e9554658Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
369e9554658Smrg      # in $dir$base.o.d.  We have to check for both files, because
370e9554658Smrg      # one of the two compilations can be disabled.  We should prefer
371e9554658Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
372e9554658Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
373e9554658Smrg      # the former would cause a distcleancheck panic.
374e9554658Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
375e9554658Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
376e9554658Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
377e9554658Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
378e9554658Smrg      "$@" -Wc,-MD
379e9554658Smrg   else
380e9554658Smrg      tmpdepfile1=$dir$base.o.d
381e9554658Smrg      tmpdepfile2=$dir$base.d
382e9554658Smrg      tmpdepfile3=$dir$base.d
383e9554658Smrg      tmpdepfile4=$dir$base.d
384e9554658Smrg      "$@" -MD
385e9554658Smrg   fi
386e9554658Smrg
387e9554658Smrg   stat=$?
388e9554658Smrg   if test $stat -eq 0; then :
389e9554658Smrg   else
390e9554658Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
391e9554658Smrg      exit $stat
392e9554658Smrg   fi
393e9554658Smrg
394e9554658Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
395e9554658Smrg   do
396e9554658Smrg     test -f "$tmpdepfile" && break
397e9554658Smrg   done
398e9554658Smrg   if test -f "$tmpdepfile"; then
399e9554658Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
400e9554658Smrg      # That's a tab and a space in the [].
401e9554658Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
402e9554658Smrg   else
403e9554658Smrg      echo "#dummy" > "$depfile"
404e9554658Smrg   fi
405e9554658Smrg   rm -f "$tmpdepfile"
406e9554658Smrg   ;;
407e9554658Smrg
408e9554658Smrg#nosideeffect)
409e9554658Smrg  # This comment above is used by automake to tell side-effect
410e9554658Smrg  # dependency tracking mechanisms from slower ones.
411e9554658Smrg
412e9554658Smrgdashmstdout)
413e9554658Smrg  # Important note: in order to support this mode, a compiler *must*
414e9554658Smrg  # always write the preprocessed file to stdout, regardless of -o.
415e9554658Smrg  "$@" || exit $?
416e9554658Smrg
417e9554658Smrg  # Remove the call to Libtool.
418e9554658Smrg  if test "$libtool" = yes; then
419c2b339b4Smrg    while test "X$1" != 'X--mode=compile'; do
420e9554658Smrg      shift
421e9554658Smrg    done
422e9554658Smrg    shift
423e9554658Smrg  fi
424e9554658Smrg
425e9554658Smrg  # Remove `-o $object'.
426e9554658Smrg  IFS=" "
427e9554658Smrg  for arg
428e9554658Smrg  do
429e9554658Smrg    case $arg in
430e9554658Smrg    -o)
431e9554658Smrg      shift
432e9554658Smrg      ;;
433e9554658Smrg    $object)
434e9554658Smrg      shift
435e9554658Smrg      ;;
436e9554658Smrg    *)
437e9554658Smrg      set fnord "$@" "$arg"
438e9554658Smrg      shift # fnord
439e9554658Smrg      shift # $arg
440e9554658Smrg      ;;
441e9554658Smrg    esac
442e9554658Smrg  done
443e9554658Smrg
444e9554658Smrg  test -z "$dashmflag" && dashmflag=-M
445e9554658Smrg  # Require at least two characters before searching for `:'
446e9554658Smrg  # in the target name.  This is to cope with DOS-style filenames:
447e9554658Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
448e9554658Smrg  "$@" $dashmflag |
449e9554658Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
450e9554658Smrg  rm -f "$depfile"
451e9554658Smrg  cat < "$tmpdepfile" > "$depfile"
452e9554658Smrg  tr ' ' '
453e9554658Smrg' < "$tmpdepfile" | \
454e9554658Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
455e9554658Smrg## correctly.  Breaking it into two sed invocations is a workaround.
456e9554658Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
457e9554658Smrg  rm -f "$tmpdepfile"
458e9554658Smrg  ;;
459e9554658Smrg
460e9554658SmrgdashXmstdout)
461e9554658Smrg  # This case only exists to satisfy depend.m4.  It is never actually
462e9554658Smrg  # run, as this mode is specially recognized in the preamble.
463e9554658Smrg  exit 1
464e9554658Smrg  ;;
465e9554658Smrg
466e9554658Smrgmakedepend)
467e9554658Smrg  "$@" || exit $?
468e9554658Smrg  # Remove any Libtool call
469e9554658Smrg  if test "$libtool" = yes; then
470c2b339b4Smrg    while test "X$1" != 'X--mode=compile'; do
471e9554658Smrg      shift
472e9554658Smrg    done
473e9554658Smrg    shift
474e9554658Smrg  fi
475e9554658Smrg  # X makedepend
476e9554658Smrg  shift
477c2b339b4Smrg  cleared=no eat=no
478c2b339b4Smrg  for arg
479c2b339b4Smrg  do
480e9554658Smrg    case $cleared in
481e9554658Smrg    no)
482e9554658Smrg      set ""; shift
483e9554658Smrg      cleared=yes ;;
484e9554658Smrg    esac
485c2b339b4Smrg    if test $eat = yes; then
486c2b339b4Smrg      eat=no
487c2b339b4Smrg      continue
488c2b339b4Smrg    fi
489e9554658Smrg    case "$arg" in
490e9554658Smrg    -D*|-I*)
491e9554658Smrg      set fnord "$@" "$arg"; shift ;;
492e9554658Smrg    # Strip any option that makedepend may not understand.  Remove
493e9554658Smrg    # the object too, otherwise makedepend will parse it as a source file.
494c2b339b4Smrg    -arch)
495c2b339b4Smrg      eat=yes ;;
496e9554658Smrg    -*|$object)
497e9554658Smrg      ;;
498e9554658Smrg    *)
499e9554658Smrg      set fnord "$@" "$arg"; shift ;;
500e9554658Smrg    esac
501e9554658Smrg  done
502c2b339b4Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
503e9554658Smrg  touch "$tmpdepfile"
504e9554658Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
505e9554658Smrg  rm -f "$depfile"
506e9554658Smrg  cat < "$tmpdepfile" > "$depfile"
507e9554658Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
508e9554658Smrg' | \
509e9554658Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
510e9554658Smrg## correctly.  Breaking it into two sed invocations is a workaround.
511e9554658Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
512e9554658Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
513e9554658Smrg  ;;
514e9554658Smrg
515e9554658Smrgcpp)
516e9554658Smrg  # Important note: in order to support this mode, a compiler *must*
517e9554658Smrg  # always write the preprocessed file to stdout.
518e9554658Smrg  "$@" || exit $?
519e9554658Smrg
520e9554658Smrg  # Remove the call to Libtool.
521e9554658Smrg  if test "$libtool" = yes; then
522c2b339b4Smrg    while test "X$1" != 'X--mode=compile'; do
523e9554658Smrg      shift
524e9554658Smrg    done
525e9554658Smrg    shift
526e9554658Smrg  fi
527e9554658Smrg
528e9554658Smrg  # Remove `-o $object'.
529e9554658Smrg  IFS=" "
530e9554658Smrg  for arg
531e9554658Smrg  do
532e9554658Smrg    case $arg in
533e9554658Smrg    -o)
534e9554658Smrg      shift
535e9554658Smrg      ;;
536e9554658Smrg    $object)
537e9554658Smrg      shift
538e9554658Smrg      ;;
539e9554658Smrg    *)
540e9554658Smrg      set fnord "$@" "$arg"
541e9554658Smrg      shift # fnord
542e9554658Smrg      shift # $arg
543e9554658Smrg      ;;
544e9554658Smrg    esac
545e9554658Smrg  done
546e9554658Smrg
547e9554658Smrg  "$@" -E |
548e9554658Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
549e9554658Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
550e9554658Smrg    sed '$ s: \\$::' > "$tmpdepfile"
551e9554658Smrg  rm -f "$depfile"
552e9554658Smrg  echo "$object : \\" > "$depfile"
553e9554658Smrg  cat < "$tmpdepfile" >> "$depfile"
554e9554658Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
555e9554658Smrg  rm -f "$tmpdepfile"
556e9554658Smrg  ;;
557e9554658Smrg
558e9554658Smrgmsvisualcpp)
559e9554658Smrg  # Important note: in order to support this mode, a compiler *must*
560c2b339b4Smrg  # always write the preprocessed file to stdout.
561e9554658Smrg  "$@" || exit $?
562c2b339b4Smrg
563c2b339b4Smrg  # Remove the call to Libtool.
564c2b339b4Smrg  if test "$libtool" = yes; then
565c2b339b4Smrg    while test "X$1" != 'X--mode=compile'; do
566c2b339b4Smrg      shift
567c2b339b4Smrg    done
568c2b339b4Smrg    shift
569c2b339b4Smrg  fi
570c2b339b4Smrg
571e9554658Smrg  IFS=" "
572e9554658Smrg  for arg
573e9554658Smrg  do
574e9554658Smrg    case "$arg" in
575c2b339b4Smrg    -o)
576c2b339b4Smrg      shift
577c2b339b4Smrg      ;;
578c2b339b4Smrg    $object)
579c2b339b4Smrg      shift
580c2b339b4Smrg      ;;
581e9554658Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
582e9554658Smrg	set fnord "$@"
583e9554658Smrg	shift
584e9554658Smrg	shift
585e9554658Smrg	;;
586e9554658Smrg    *)
587e9554658Smrg	set fnord "$@" "$arg"
588e9554658Smrg	shift
589e9554658Smrg	shift
590e9554658Smrg	;;
591e9554658Smrg    esac
592e9554658Smrg  done
593c2b339b4Smrg  "$@" -E 2>/dev/null |
594c2b339b4Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
595e9554658Smrg  rm -f "$depfile"
596e9554658Smrg  echo "$object : \\" > "$depfile"
597c2b339b4Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
598e9554658Smrg  echo "	" >> "$depfile"
599c2b339b4Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
600e9554658Smrg  rm -f "$tmpdepfile"
601e9554658Smrg  ;;
602e9554658Smrg
603c2b339b4Smrgmsvcmsys)
604c2b339b4Smrg  # This case exists only to let depend.m4 do its work.  It works by
605c2b339b4Smrg  # looking at the text of this script.  This case will never be run,
606c2b339b4Smrg  # since it is checked for above.
607c2b339b4Smrg  exit 1
608c2b339b4Smrg  ;;
609c2b339b4Smrg
610e9554658Smrgnone)
611e9554658Smrg  exec "$@"
612e9554658Smrg  ;;
613e9554658Smrg
614e9554658Smrg*)
615e9554658Smrg  echo "Unknown depmode $depmode" 1>&2
616e9554658Smrg  exit 1
617e9554658Smrg  ;;
618e9554658Smrgesac
619e9554658Smrg
620e9554658Smrgexit 0
621e9554658Smrg
622e9554658Smrg# Local Variables:
623e9554658Smrg# mode: shell-script
624e9554658Smrg# sh-indentation: 2
625e9554658Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
626e9554658Smrg# time-stamp-start: "scriptversion="
627e9554658Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
628c2b339b4Smrg# time-stamp-time-zone: "UTC"
629c2b339b4Smrg# time-stamp-end: "; # UTC"
630e9554658Smrg# End:
631