depcomp revision 8fff3f40
1e6232409Smrg#! /bin/sh
2e6232409Smrg# depcomp - compile a program generating dependencies as side-effects
3e6232409Smrg
48fff3f40Smrgscriptversion=2009-04-28.21; # UTC
5e6232409Smrg
68fff3f40Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
78fff3f40Smrg# Software Foundation, Inc.
8e6232409Smrg
9e6232409Smrg# This program is free software; you can redistribute it and/or modify
10e6232409Smrg# it under the terms of the GNU General Public License as published by
11e6232409Smrg# the Free Software Foundation; either version 2, or (at your option)
12e6232409Smrg# any later version.
13e6232409Smrg
14e6232409Smrg# This program is distributed in the hope that it will be useful,
15e6232409Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
16e6232409Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17e6232409Smrg# GNU General Public License for more details.
18e6232409Smrg
19e6232409Smrg# You should have received a copy of the GNU General Public License
208fff3f40Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
21e6232409Smrg
22e6232409Smrg# As a special exception to the GNU General Public License, if you
23e6232409Smrg# distribute this file as part of a program that contains a
24e6232409Smrg# configuration script generated by Autoconf, you may include it under
25e6232409Smrg# the same distribution terms that you use for the rest of that program.
26e6232409Smrg
27e6232409Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
28e6232409Smrg
29e6232409Smrgcase $1 in
30e6232409Smrg  '')
31e6232409Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
32e6232409Smrg     exit 1;
33e6232409Smrg     ;;
34e6232409Smrg  -h | --h*)
35e6232409Smrg    cat <<\EOF
36e6232409SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
37e6232409Smrg
38e6232409SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
39e6232409Smrgas side-effects.
40e6232409Smrg
41e6232409SmrgEnvironment variables:
42e6232409Smrg  depmode     Dependency tracking mode.
43e6232409Smrg  source      Source file read by `PROGRAMS ARGS'.
44e6232409Smrg  object      Object file output by `PROGRAMS ARGS'.
45e6232409Smrg  DEPDIR      directory where to store dependencies.
46e6232409Smrg  depfile     Dependency file to output.
47e6232409Smrg  tmpdepfile  Temporary file to use when outputing dependencies.
48e6232409Smrg  libtool     Whether libtool is used (yes/no).
49e6232409Smrg
50e6232409SmrgReport bugs to <bug-automake@gnu.org>.
51e6232409SmrgEOF
52e6232409Smrg    exit $?
53e6232409Smrg    ;;
54e6232409Smrg  -v | --v*)
55e6232409Smrg    echo "depcomp $scriptversion"
56e6232409Smrg    exit $?
57e6232409Smrg    ;;
58e6232409Smrgesac
59e6232409Smrg
60e6232409Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
61e6232409Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
62e6232409Smrg  exit 1
63e6232409Smrgfi
64e6232409Smrg
65e6232409Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
66e6232409Smrgdepfile=${depfile-`echo "$object" |
67e6232409Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
68e6232409Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
69e6232409Smrg
70e6232409Smrgrm -f "$tmpdepfile"
71e6232409Smrg
72e6232409Smrg# Some modes work just like other modes, but use different flags.  We
73e6232409Smrg# parameterize here, but still list the modes in the big case below,
74e6232409Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
75e6232409Smrg# here, because this file can only contain one case statement.
76e6232409Smrgif test "$depmode" = hp; then
77e6232409Smrg  # HP compiler uses -M and no extra arg.
78e6232409Smrg  gccflag=-M
79e6232409Smrg  depmode=gcc
80e6232409Smrgfi
81e6232409Smrg
82e6232409Smrgif test "$depmode" = dashXmstdout; then
83e6232409Smrg   # This is just like dashmstdout with a different argument.
84e6232409Smrg   dashmflag=-xM
85e6232409Smrg   depmode=dashmstdout
86e6232409Smrgfi
87e6232409Smrg
888fff3f40Smrgcygpath_u="cygpath -u -f -"
898fff3f40Smrgif test "$depmode" = msvcmsys; then
908fff3f40Smrg   # This is just like msvisualcpp but w/o cygpath translation.
918fff3f40Smrg   # Just convert the backslash-escaped backslashes to single forward
928fff3f40Smrg   # slashes to satisfy depend.m4
938fff3f40Smrg   cygpath_u="sed s,\\\\\\\\,/,g"
948fff3f40Smrg   depmode=msvisualcpp
958fff3f40Smrgfi
968fff3f40Smrg
97e6232409Smrgcase "$depmode" in
98e6232409Smrggcc3)
99e6232409Smrg## gcc 3 implements dependency tracking that does exactly what
100e6232409Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
101e6232409Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
1028fff3f40Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
1038fff3f40Smrg## the command line argument order; so add the flags where they
1048fff3f40Smrg## appear in depend2.am.  Note that the slowdown incurred here
1058fff3f40Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
1068fff3f40Smrg  for arg
1078fff3f40Smrg  do
1088fff3f40Smrg    case $arg in
1098fff3f40Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
1108fff3f40Smrg    *)  set fnord "$@" "$arg" ;;
1118fff3f40Smrg    esac
1128fff3f40Smrg    shift # fnord
1138fff3f40Smrg    shift # $arg
1148fff3f40Smrg  done
1158fff3f40Smrg  "$@"
116e6232409Smrg  stat=$?
117e6232409Smrg  if test $stat -eq 0; then :
118e6232409Smrg  else
119e6232409Smrg    rm -f "$tmpdepfile"
120e6232409Smrg    exit $stat
121e6232409Smrg  fi
122e6232409Smrg  mv "$tmpdepfile" "$depfile"
123e6232409Smrg  ;;
124e6232409Smrg
125e6232409Smrggcc)
126e6232409Smrg## There are various ways to get dependency output from gcc.  Here's
127e6232409Smrg## why we pick this rather obscure method:
128e6232409Smrg## - Don't want to use -MD because we'd like the dependencies to end
129e6232409Smrg##   up in a subdir.  Having to rename by hand is ugly.
130e6232409Smrg##   (We might end up doing this anyway to support other compilers.)
131e6232409Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
132e6232409Smrg##   -MM, not -M (despite what the docs say).
133e6232409Smrg## - Using -M directly means running the compiler twice (even worse
134e6232409Smrg##   than renaming).
135e6232409Smrg  if test -z "$gccflag"; then
136e6232409Smrg    gccflag=-MD,
137e6232409Smrg  fi
138e6232409Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
139e6232409Smrg  stat=$?
140e6232409Smrg  if test $stat -eq 0; then :
141e6232409Smrg  else
142e6232409Smrg    rm -f "$tmpdepfile"
143e6232409Smrg    exit $stat
144e6232409Smrg  fi
145e6232409Smrg  rm -f "$depfile"
146e6232409Smrg  echo "$object : \\" > "$depfile"
147e6232409Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
148e6232409Smrg## The second -e expression handles DOS-style file names with drive letters.
149e6232409Smrg  sed -e 's/^[^:]*: / /' \
150e6232409Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
151e6232409Smrg## This next piece of magic avoids the `deleted header file' problem.
152e6232409Smrg## The problem is that when a header file which appears in a .P file
153e6232409Smrg## is deleted, the dependency causes make to die (because there is
154e6232409Smrg## typically no way to rebuild the header).  We avoid this by adding
155e6232409Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
156e6232409Smrg## this for us directly.
157e6232409Smrg  tr ' ' '
158e6232409Smrg' < "$tmpdepfile" |
159e6232409Smrg## Some versions of gcc put a space before the `:'.  On the theory
160e6232409Smrg## that the space means something, we add a space to the output as
161e6232409Smrg## well.
162e6232409Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
163e6232409Smrg## correctly.  Breaking it into two sed invocations is a workaround.
164e6232409Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
165e6232409Smrg  rm -f "$tmpdepfile"
166e6232409Smrg  ;;
167e6232409Smrg
168e6232409Smrghp)
169e6232409Smrg  # This case exists only to let depend.m4 do its work.  It works by
170e6232409Smrg  # looking at the text of this script.  This case will never be run,
171e6232409Smrg  # since it is checked for above.
172e6232409Smrg  exit 1
173e6232409Smrg  ;;
174e6232409Smrg
175e6232409Smrgsgi)
176e6232409Smrg  if test "$libtool" = yes; then
177e6232409Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
178e6232409Smrg  else
179e6232409Smrg    "$@" -MDupdate "$tmpdepfile"
180e6232409Smrg  fi
181e6232409Smrg  stat=$?
182e6232409Smrg  if test $stat -eq 0; then :
183e6232409Smrg  else
184e6232409Smrg    rm -f "$tmpdepfile"
185e6232409Smrg    exit $stat
186e6232409Smrg  fi
187e6232409Smrg  rm -f "$depfile"
188e6232409Smrg
189e6232409Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
190e6232409Smrg    echo "$object : \\" > "$depfile"
191e6232409Smrg
192e6232409Smrg    # Clip off the initial element (the dependent).  Don't try to be
193e6232409Smrg    # clever and replace this with sed code, as IRIX sed won't handle
194e6232409Smrg    # lines with more than a fixed number of characters (4096 in
195e6232409Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
196e6232409Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
197e6232409Smrg    # dependency line.
198e6232409Smrg    tr ' ' '
199e6232409Smrg' < "$tmpdepfile" \
200e6232409Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
201e6232409Smrg    tr '
2028fff3f40Smrg' ' ' >> "$depfile"
2038fff3f40Smrg    echo >> "$depfile"
204e6232409Smrg
205e6232409Smrg    # The second pass generates a dummy entry for each header file.
206e6232409Smrg    tr ' ' '
207e6232409Smrg' < "$tmpdepfile" \
208e6232409Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
2098fff3f40Smrg   >> "$depfile"
210e6232409Smrg  else
211e6232409Smrg    # The sourcefile does not contain any dependencies, so just
212e6232409Smrg    # store a dummy comment line, to avoid errors with the Makefile
213e6232409Smrg    # "include basename.Plo" scheme.
214e6232409Smrg    echo "#dummy" > "$depfile"
215e6232409Smrg  fi
216e6232409Smrg  rm -f "$tmpdepfile"
217e6232409Smrg  ;;
218e6232409Smrg
219e6232409Smrgaix)
220e6232409Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
221e6232409Smrg  # in a .u file.  In older versions, this file always lives in the
222e6232409Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
223e6232409Smrg  # start of each line; $object doesn't have directory information.
224e6232409Smrg  # Version 6 uses the directory in both cases.
2258fff3f40Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
2268fff3f40Smrg  test "x$dir" = "x$object" && dir=
2278fff3f40Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
228e6232409Smrg  if test "$libtool" = yes; then
2298fff3f40Smrg    tmpdepfile1=$dir$base.u
2308fff3f40Smrg    tmpdepfile2=$base.u
2318fff3f40Smrg    tmpdepfile3=$dir.libs/$base.u
232e6232409Smrg    "$@" -Wc,-M
233e6232409Smrg  else
2348fff3f40Smrg    tmpdepfile1=$dir$base.u
2358fff3f40Smrg    tmpdepfile2=$dir$base.u
2368fff3f40Smrg    tmpdepfile3=$dir$base.u
237e6232409Smrg    "$@" -M
238e6232409Smrg  fi
239e6232409Smrg  stat=$?
240e6232409Smrg
241e6232409Smrg  if test $stat -eq 0; then :
242e6232409Smrg  else
2438fff3f40Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
244e6232409Smrg    exit $stat
245e6232409Smrg  fi
246e6232409Smrg
2478fff3f40Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2488fff3f40Smrg  do
2498fff3f40Smrg    test -f "$tmpdepfile" && break
2508fff3f40Smrg  done
251e6232409Smrg  if test -f "$tmpdepfile"; then
252e6232409Smrg    # Each line is of the form `foo.o: dependent.h'.
253e6232409Smrg    # Do two passes, one to just change these to
254e6232409Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
2558fff3f40Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
2568fff3f40Smrg    # That's a tab and a space in the [].
2578fff3f40Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
258e6232409Smrg  else
259e6232409Smrg    # The sourcefile does not contain any dependencies, so just
260e6232409Smrg    # store a dummy comment line, to avoid errors with the Makefile
261e6232409Smrg    # "include basename.Plo" scheme.
262e6232409Smrg    echo "#dummy" > "$depfile"
263e6232409Smrg  fi
264e6232409Smrg  rm -f "$tmpdepfile"
265e6232409Smrg  ;;
266e6232409Smrg
267e6232409Smrgicc)
268e6232409Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
269e6232409Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
270e6232409Smrg  # ICC 7.0 will fill foo.d with something like
271e6232409Smrg  #    foo.o: sub/foo.c
272e6232409Smrg  #    foo.o: sub/foo.h
273e6232409Smrg  # which is wrong.  We want:
274e6232409Smrg  #    sub/foo.o: sub/foo.c
275e6232409Smrg  #    sub/foo.o: sub/foo.h
276e6232409Smrg  #    sub/foo.c:
277e6232409Smrg  #    sub/foo.h:
278e6232409Smrg  # ICC 7.1 will output
279e6232409Smrg  #    foo.o: sub/foo.c sub/foo.h
280e6232409Smrg  # and will wrap long lines using \ :
281e6232409Smrg  #    foo.o: sub/foo.c ... \
282e6232409Smrg  #     sub/foo.h ... \
283e6232409Smrg  #     ...
284e6232409Smrg
285e6232409Smrg  "$@" -MD -MF "$tmpdepfile"
286e6232409Smrg  stat=$?
287e6232409Smrg  if test $stat -eq 0; then :
288e6232409Smrg  else
289e6232409Smrg    rm -f "$tmpdepfile"
290e6232409Smrg    exit $stat
291e6232409Smrg  fi
292e6232409Smrg  rm -f "$depfile"
293e6232409Smrg  # Each line is of the form `foo.o: dependent.h',
294e6232409Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
295e6232409Smrg  # Do two passes, one to just change these to
296e6232409Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
297e6232409Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
298e6232409Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
299e6232409Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
300e6232409Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
301e6232409Smrg    sed -e 's/$/ :/' >> "$depfile"
302e6232409Smrg  rm -f "$tmpdepfile"
303e6232409Smrg  ;;
304e6232409Smrg
3058fff3f40Smrghp2)
3068fff3f40Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
3078fff3f40Smrg  # compilers, which have integrated preprocessors.  The correct option
3088fff3f40Smrg  # to use with these is +Maked; it writes dependencies to a file named
3098fff3f40Smrg  # 'foo.d', which lands next to the object file, wherever that
3108fff3f40Smrg  # happens to be.
3118fff3f40Smrg  # Much of this is similar to the tru64 case; see comments there.
3128fff3f40Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3138fff3f40Smrg  test "x$dir" = "x$object" && dir=
3148fff3f40Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3158fff3f40Smrg  if test "$libtool" = yes; then
3168fff3f40Smrg    tmpdepfile1=$dir$base.d
3178fff3f40Smrg    tmpdepfile2=$dir.libs/$base.d
3188fff3f40Smrg    "$@" -Wc,+Maked
3198fff3f40Smrg  else
3208fff3f40Smrg    tmpdepfile1=$dir$base.d
3218fff3f40Smrg    tmpdepfile2=$dir$base.d
3228fff3f40Smrg    "$@" +Maked
3238fff3f40Smrg  fi
3248fff3f40Smrg  stat=$?
3258fff3f40Smrg  if test $stat -eq 0; then :
3268fff3f40Smrg  else
3278fff3f40Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
3288fff3f40Smrg     exit $stat
3298fff3f40Smrg  fi
3308fff3f40Smrg
3318fff3f40Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
3328fff3f40Smrg  do
3338fff3f40Smrg    test -f "$tmpdepfile" && break
3348fff3f40Smrg  done
3358fff3f40Smrg  if test -f "$tmpdepfile"; then
3368fff3f40Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
3378fff3f40Smrg    # Add `dependent.h:' lines.
3388fff3f40Smrg    sed -ne '2,${
3398fff3f40Smrg	       s/^ *//
3408fff3f40Smrg	       s/ \\*$//
3418fff3f40Smrg	       s/$/:/
3428fff3f40Smrg	       p
3438fff3f40Smrg	     }' "$tmpdepfile" >> "$depfile"
3448fff3f40Smrg  else
3458fff3f40Smrg    echo "#dummy" > "$depfile"
3468fff3f40Smrg  fi
3478fff3f40Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
3488fff3f40Smrg  ;;
3498fff3f40Smrg
350e6232409Smrgtru64)
351e6232409Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
352e6232409Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
353e6232409Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
354e6232409Smrg   # dependencies in `foo.d' instead, so we check for that too.
355e6232409Smrg   # Subdirectories are respected.
356e6232409Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
357e6232409Smrg   test "x$dir" = "x$object" && dir=
358e6232409Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
359e6232409Smrg
360e6232409Smrg   if test "$libtool" = yes; then
361e6232409Smrg      # With Tru64 cc, shared objects can also be used to make a
3628fff3f40Smrg      # static library.  This mechanism is used in libtool 1.4 series to
363e6232409Smrg      # handle both shared and static libraries in a single compilation.
364e6232409Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
365e6232409Smrg      #
366e6232409Smrg      # With libtool 1.5 this exception was removed, and libtool now
367e6232409Smrg      # generates 2 separate objects for the 2 libraries.  These two
3688fff3f40Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
369e6232409Smrg      # in $dir$base.o.d.  We have to check for both files, because
370e6232409Smrg      # one of the two compilations can be disabled.  We should prefer
371e6232409Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
372e6232409Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
373e6232409Smrg      # the former would cause a distcleancheck panic.
374e6232409Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
375e6232409Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
376e6232409Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
377e6232409Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
378e6232409Smrg      "$@" -Wc,-MD
379e6232409Smrg   else
380e6232409Smrg      tmpdepfile1=$dir$base.o.d
381e6232409Smrg      tmpdepfile2=$dir$base.d
382e6232409Smrg      tmpdepfile3=$dir$base.d
383e6232409Smrg      tmpdepfile4=$dir$base.d
384e6232409Smrg      "$@" -MD
385e6232409Smrg   fi
386e6232409Smrg
387e6232409Smrg   stat=$?
388e6232409Smrg   if test $stat -eq 0; then :
389e6232409Smrg   else
390e6232409Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
391e6232409Smrg      exit $stat
392e6232409Smrg   fi
393e6232409Smrg
394e6232409Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
395e6232409Smrg   do
396e6232409Smrg     test -f "$tmpdepfile" && break
397e6232409Smrg   done
398e6232409Smrg   if test -f "$tmpdepfile"; then
399e6232409Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
400e6232409Smrg      # That's a tab and a space in the [].
401e6232409Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
402e6232409Smrg   else
403e6232409Smrg      echo "#dummy" > "$depfile"
404e6232409Smrg   fi
405e6232409Smrg   rm -f "$tmpdepfile"
406e6232409Smrg   ;;
407e6232409Smrg
408e6232409Smrg#nosideeffect)
409e6232409Smrg  # This comment above is used by automake to tell side-effect
410e6232409Smrg  # dependency tracking mechanisms from slower ones.
411e6232409Smrg
412e6232409Smrgdashmstdout)
413e6232409Smrg  # Important note: in order to support this mode, a compiler *must*
414e6232409Smrg  # always write the preprocessed file to stdout, regardless of -o.
415e6232409Smrg  "$@" || exit $?
416e6232409Smrg
417e6232409Smrg  # Remove the call to Libtool.
418e6232409Smrg  if test "$libtool" = yes; then
4198fff3f40Smrg    while test "X$1" != 'X--mode=compile'; do
420e6232409Smrg      shift
421e6232409Smrg    done
422e6232409Smrg    shift
423e6232409Smrg  fi
424e6232409Smrg
425e6232409Smrg  # Remove `-o $object'.
426e6232409Smrg  IFS=" "
427e6232409Smrg  for arg
428e6232409Smrg  do
429e6232409Smrg    case $arg in
430e6232409Smrg    -o)
431e6232409Smrg      shift
432e6232409Smrg      ;;
433e6232409Smrg    $object)
434e6232409Smrg      shift
435e6232409Smrg      ;;
436e6232409Smrg    *)
437e6232409Smrg      set fnord "$@" "$arg"
438e6232409Smrg      shift # fnord
439e6232409Smrg      shift # $arg
440e6232409Smrg      ;;
441e6232409Smrg    esac
442e6232409Smrg  done
443e6232409Smrg
444e6232409Smrg  test -z "$dashmflag" && dashmflag=-M
445e6232409Smrg  # Require at least two characters before searching for `:'
446e6232409Smrg  # in the target name.  This is to cope with DOS-style filenames:
447e6232409Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
448e6232409Smrg  "$@" $dashmflag |
449e6232409Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
450e6232409Smrg  rm -f "$depfile"
451e6232409Smrg  cat < "$tmpdepfile" > "$depfile"
452e6232409Smrg  tr ' ' '
453e6232409Smrg' < "$tmpdepfile" | \
454e6232409Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
455e6232409Smrg## correctly.  Breaking it into two sed invocations is a workaround.
456e6232409Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
457e6232409Smrg  rm -f "$tmpdepfile"
458e6232409Smrg  ;;
459e6232409Smrg
460e6232409SmrgdashXmstdout)
461e6232409Smrg  # This case only exists to satisfy depend.m4.  It is never actually
462e6232409Smrg  # run, as this mode is specially recognized in the preamble.
463e6232409Smrg  exit 1
464e6232409Smrg  ;;
465e6232409Smrg
466e6232409Smrgmakedepend)
467e6232409Smrg  "$@" || exit $?
468e6232409Smrg  # Remove any Libtool call
469e6232409Smrg  if test "$libtool" = yes; then
4708fff3f40Smrg    while test "X$1" != 'X--mode=compile'; do
471e6232409Smrg      shift
472e6232409Smrg    done
473e6232409Smrg    shift
474e6232409Smrg  fi
475e6232409Smrg  # X makedepend
476e6232409Smrg  shift
4778fff3f40Smrg  cleared=no eat=no
4788fff3f40Smrg  for arg
4798fff3f40Smrg  do
480e6232409Smrg    case $cleared in
481e6232409Smrg    no)
482e6232409Smrg      set ""; shift
483e6232409Smrg      cleared=yes ;;
484e6232409Smrg    esac
4858fff3f40Smrg    if test $eat = yes; then
4868fff3f40Smrg      eat=no
4878fff3f40Smrg      continue
4888fff3f40Smrg    fi
489e6232409Smrg    case "$arg" in
490e6232409Smrg    -D*|-I*)
491e6232409Smrg      set fnord "$@" "$arg"; shift ;;
492e6232409Smrg    # Strip any option that makedepend may not understand.  Remove
493e6232409Smrg    # the object too, otherwise makedepend will parse it as a source file.
4948fff3f40Smrg    -arch)
4958fff3f40Smrg      eat=yes ;;
496e6232409Smrg    -*|$object)
497e6232409Smrg      ;;
498e6232409Smrg    *)
499e6232409Smrg      set fnord "$@" "$arg"; shift ;;
500e6232409Smrg    esac
501e6232409Smrg  done
5028fff3f40Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
503e6232409Smrg  touch "$tmpdepfile"
504e6232409Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
505e6232409Smrg  rm -f "$depfile"
506e6232409Smrg  cat < "$tmpdepfile" > "$depfile"
507e6232409Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
508e6232409Smrg' | \
509e6232409Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
510e6232409Smrg## correctly.  Breaking it into two sed invocations is a workaround.
511e6232409Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
512e6232409Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
513e6232409Smrg  ;;
514e6232409Smrg
515e6232409Smrgcpp)
516e6232409Smrg  # Important note: in order to support this mode, a compiler *must*
517e6232409Smrg  # always write the preprocessed file to stdout.
518e6232409Smrg  "$@" || exit $?
519e6232409Smrg
520e6232409Smrg  # Remove the call to Libtool.
521e6232409Smrg  if test "$libtool" = yes; then
5228fff3f40Smrg    while test "X$1" != 'X--mode=compile'; do
523e6232409Smrg      shift
524e6232409Smrg    done
525e6232409Smrg    shift
526e6232409Smrg  fi
527e6232409Smrg
528e6232409Smrg  # Remove `-o $object'.
529e6232409Smrg  IFS=" "
530e6232409Smrg  for arg
531e6232409Smrg  do
532e6232409Smrg    case $arg in
533e6232409Smrg    -o)
534e6232409Smrg      shift
535e6232409Smrg      ;;
536e6232409Smrg    $object)
537e6232409Smrg      shift
538e6232409Smrg      ;;
539e6232409Smrg    *)
540e6232409Smrg      set fnord "$@" "$arg"
541e6232409Smrg      shift # fnord
542e6232409Smrg      shift # $arg
543e6232409Smrg      ;;
544e6232409Smrg    esac
545e6232409Smrg  done
546e6232409Smrg
547e6232409Smrg  "$@" -E |
548e6232409Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
549e6232409Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
550e6232409Smrg    sed '$ s: \\$::' > "$tmpdepfile"
551e6232409Smrg  rm -f "$depfile"
552e6232409Smrg  echo "$object : \\" > "$depfile"
553e6232409Smrg  cat < "$tmpdepfile" >> "$depfile"
554e6232409Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
555e6232409Smrg  rm -f "$tmpdepfile"
556e6232409Smrg  ;;
557e6232409Smrg
558e6232409Smrgmsvisualcpp)
559e6232409Smrg  # Important note: in order to support this mode, a compiler *must*
5608fff3f40Smrg  # always write the preprocessed file to stdout.
561e6232409Smrg  "$@" || exit $?
5628fff3f40Smrg
5638fff3f40Smrg  # Remove the call to Libtool.
5648fff3f40Smrg  if test "$libtool" = yes; then
5658fff3f40Smrg    while test "X$1" != 'X--mode=compile'; do
5668fff3f40Smrg      shift
5678fff3f40Smrg    done
5688fff3f40Smrg    shift
5698fff3f40Smrg  fi
5708fff3f40Smrg
571e6232409Smrg  IFS=" "
572e6232409Smrg  for arg
573e6232409Smrg  do
574e6232409Smrg    case "$arg" in
5758fff3f40Smrg    -o)
5768fff3f40Smrg      shift
5778fff3f40Smrg      ;;
5788fff3f40Smrg    $object)
5798fff3f40Smrg      shift
5808fff3f40Smrg      ;;
581e6232409Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
582e6232409Smrg	set fnord "$@"
583e6232409Smrg	shift
584e6232409Smrg	shift
585e6232409Smrg	;;
586e6232409Smrg    *)
587e6232409Smrg	set fnord "$@" "$arg"
588e6232409Smrg	shift
589e6232409Smrg	shift
590e6232409Smrg	;;
591e6232409Smrg    esac
592e6232409Smrg  done
5938fff3f40Smrg  "$@" -E 2>/dev/null |
5948fff3f40Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
595e6232409Smrg  rm -f "$depfile"
596e6232409Smrg  echo "$object : \\" > "$depfile"
5978fff3f40Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
598e6232409Smrg  echo "	" >> "$depfile"
5998fff3f40Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
600e6232409Smrg  rm -f "$tmpdepfile"
601e6232409Smrg  ;;
602e6232409Smrg
6038fff3f40Smrgmsvcmsys)
6048fff3f40Smrg  # This case exists only to let depend.m4 do its work.  It works by
6058fff3f40Smrg  # looking at the text of this script.  This case will never be run,
6068fff3f40Smrg  # since it is checked for above.
6078fff3f40Smrg  exit 1
6088fff3f40Smrg  ;;
6098fff3f40Smrg
610e6232409Smrgnone)
611e6232409Smrg  exec "$@"
612e6232409Smrg  ;;
613e6232409Smrg
614e6232409Smrg*)
615e6232409Smrg  echo "Unknown depmode $depmode" 1>&2
616e6232409Smrg  exit 1
617e6232409Smrg  ;;
618e6232409Smrgesac
619e6232409Smrg
620e6232409Smrgexit 0
621e6232409Smrg
622e6232409Smrg# Local Variables:
623e6232409Smrg# mode: shell-script
624e6232409Smrg# sh-indentation: 2
625e6232409Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
626e6232409Smrg# time-stamp-start: "scriptversion="
627e6232409Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
6288fff3f40Smrg# time-stamp-time-zone: "UTC"
6298fff3f40Smrg# time-stamp-end: "; # UTC"
630e6232409Smrg# End:
631