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