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