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