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