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