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