1d983712dSmrg#! /bin/sh
2d983712dSmrg# depcomp - compile a program generating dependencies as side-effects
3d983712dSmrg
44b9470b1Smrgscriptversion=2011-12-04.11; # UTC
5d983712dSmrg
64b9470b1Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
74b9470b1Smrg# 2011 Free Software Foundation, Inc.
8d983712dSmrg
9d983712dSmrg# This program is free software; you can redistribute it and/or modify
10d983712dSmrg# it under the terms of the GNU General Public License as published by
11d983712dSmrg# the Free Software Foundation; either version 2, or (at your option)
12d983712dSmrg# any later version.
13d983712dSmrg
14d983712dSmrg# This program is distributed in the hope that it will be useful,
15d983712dSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
16d983712dSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17d983712dSmrg# GNU General Public License for more details.
18d983712dSmrg
19d983712dSmrg# You should have received a copy of the GNU General Public License
204b9470b1Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
21d983712dSmrg
22d983712dSmrg# As a special exception to the GNU General Public License, if you
23d983712dSmrg# distribute this file as part of a program that contains a
24d983712dSmrg# configuration script generated by Autoconf, you may include it under
25d983712dSmrg# the same distribution terms that you use for the rest of that program.
26d983712dSmrg
27d983712dSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
28d983712dSmrg
29d983712dSmrgcase $1 in
30d983712dSmrg  '')
31d983712dSmrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
32d983712dSmrg     exit 1;
33d983712dSmrg     ;;
34d983712dSmrg  -h | --h*)
35d983712dSmrg    cat <<\EOF
36d983712dSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
37d983712dSmrg
38d983712dSmrgRun PROGRAMS ARGS to compile a file, generating dependencies
39d983712dSmrgas side-effects.
40d983712dSmrg
41d983712dSmrgEnvironment variables:
42d983712dSmrg  depmode     Dependency tracking mode.
43d983712dSmrg  source      Source file read by `PROGRAMS ARGS'.
44d983712dSmrg  object      Object file output by `PROGRAMS ARGS'.
45d983712dSmrg  DEPDIR      directory where to store dependencies.
46d983712dSmrg  depfile     Dependency file to output.
474b9470b1Smrg  tmpdepfile  Temporary file to use when outputting dependencies.
48d983712dSmrg  libtool     Whether libtool is used (yes/no).
49d983712dSmrg
50d983712dSmrgReport bugs to <bug-automake@gnu.org>.
51d983712dSmrgEOF
52d983712dSmrg    exit $?
53d983712dSmrg    ;;
54d983712dSmrg  -v | --v*)
55d983712dSmrg    echo "depcomp $scriptversion"
56d983712dSmrg    exit $?
57d983712dSmrg    ;;
58d983712dSmrgesac
59d983712dSmrg
60d983712dSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
61d983712dSmrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
62d983712dSmrg  exit 1
63d983712dSmrgfi
64d983712dSmrg
65d983712dSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
66d983712dSmrgdepfile=${depfile-`echo "$object" |
67d983712dSmrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
68d983712dSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
69d983712dSmrg
70d983712dSmrgrm -f "$tmpdepfile"
71d983712dSmrg
72d983712dSmrg# Some modes work just like other modes, but use different flags.  We
73d983712dSmrg# parameterize here, but still list the modes in the big case below,
74d983712dSmrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
75d983712dSmrg# here, because this file can only contain one case statement.
76d983712dSmrgif test "$depmode" = hp; then
77d983712dSmrg  # HP compiler uses -M and no extra arg.
78d983712dSmrg  gccflag=-M
79d983712dSmrg  depmode=gcc
80d983712dSmrgfi
81d983712dSmrg
82d983712dSmrgif test "$depmode" = dashXmstdout; then
83d983712dSmrg   # This is just like dashmstdout with a different argument.
84d983712dSmrg   dashmflag=-xM
85d983712dSmrg   depmode=dashmstdout
86d983712dSmrgfi
87d983712dSmrg
884b9470b1Smrgcygpath_u="cygpath -u -f -"
894b9470b1Smrgif test "$depmode" = msvcmsys; then
904b9470b1Smrg   # This is just like msvisualcpp but w/o cygpath translation.
914b9470b1Smrg   # Just convert the backslash-escaped backslashes to single forward
924b9470b1Smrg   # slashes to satisfy depend.m4
934b9470b1Smrg   cygpath_u='sed s,\\\\,/,g'
944b9470b1Smrg   depmode=msvisualcpp
954b9470b1Smrgfi
964b9470b1Smrg
974b9470b1Smrgif test "$depmode" = msvc7msys; then
984b9470b1Smrg   # This is just like msvc7 but w/o cygpath translation.
994b9470b1Smrg   # Just convert the backslash-escaped backslashes to single forward
1004b9470b1Smrg   # slashes to satisfy depend.m4
1014b9470b1Smrg   cygpath_u='sed s,\\\\,/,g'
1024b9470b1Smrg   depmode=msvc7
1034b9470b1Smrgfi
1044b9470b1Smrg
105d983712dSmrgcase "$depmode" in
106d983712dSmrggcc3)
107d983712dSmrg## gcc 3 implements dependency tracking that does exactly what
108d983712dSmrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
109d983712dSmrg## it if -MD -MP comes after the -MF stuff.  Hmm.
110962c3257Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
111962c3257Smrg## the command line argument order; so add the flags where they
112962c3257Smrg## appear in depend2.am.  Note that the slowdown incurred here
113962c3257Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
114962c3257Smrg  for arg
115962c3257Smrg  do
116962c3257Smrg    case $arg in
117962c3257Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
118962c3257Smrg    *)  set fnord "$@" "$arg" ;;
119962c3257Smrg    esac
120962c3257Smrg    shift # fnord
121962c3257Smrg    shift # $arg
122962c3257Smrg  done
123962c3257Smrg  "$@"
124d983712dSmrg  stat=$?
125d983712dSmrg  if test $stat -eq 0; then :
126d983712dSmrg  else
127d983712dSmrg    rm -f "$tmpdepfile"
128d983712dSmrg    exit $stat
129d983712dSmrg  fi
130d983712dSmrg  mv "$tmpdepfile" "$depfile"
131d983712dSmrg  ;;
132d983712dSmrg
133d983712dSmrggcc)
134d983712dSmrg## There are various ways to get dependency output from gcc.  Here's
135d983712dSmrg## why we pick this rather obscure method:
136d983712dSmrg## - Don't want to use -MD because we'd like the dependencies to end
137d983712dSmrg##   up in a subdir.  Having to rename by hand is ugly.
138d983712dSmrg##   (We might end up doing this anyway to support other compilers.)
139d983712dSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
140d983712dSmrg##   -MM, not -M (despite what the docs say).
141d983712dSmrg## - Using -M directly means running the compiler twice (even worse
142d983712dSmrg##   than renaming).
143d983712dSmrg  if test -z "$gccflag"; then
144d983712dSmrg    gccflag=-MD,
145d983712dSmrg  fi
146d983712dSmrg  "$@" -Wp,"$gccflag$tmpdepfile"
147d983712dSmrg  stat=$?
148d983712dSmrg  if test $stat -eq 0; then :
149d983712dSmrg  else
150d983712dSmrg    rm -f "$tmpdepfile"
151d983712dSmrg    exit $stat
152d983712dSmrg  fi
153d983712dSmrg  rm -f "$depfile"
154d983712dSmrg  echo "$object : \\" > "$depfile"
155d983712dSmrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
156d983712dSmrg## The second -e expression handles DOS-style file names with drive letters.
157d983712dSmrg  sed -e 's/^[^:]*: / /' \
158d983712dSmrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
159d983712dSmrg## This next piece of magic avoids the `deleted header file' problem.
160d983712dSmrg## The problem is that when a header file which appears in a .P file
161d983712dSmrg## is deleted, the dependency causes make to die (because there is
162d983712dSmrg## typically no way to rebuild the header).  We avoid this by adding
163d983712dSmrg## dummy dependencies for each header file.  Too bad gcc doesn't do
164d983712dSmrg## this for us directly.
165d983712dSmrg  tr ' ' '
166d983712dSmrg' < "$tmpdepfile" |
167d983712dSmrg## Some versions of gcc put a space before the `:'.  On the theory
168d983712dSmrg## that the space means something, we add a space to the output as
1694b9470b1Smrg## well.  hp depmode also adds that space, but also prefixes the VPATH
1704b9470b1Smrg## to the object.  Take care to not repeat it in the output.
171d983712dSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
172d983712dSmrg## correctly.  Breaking it into two sed invocations is a workaround.
1734b9470b1Smrg    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
1744b9470b1Smrg      | sed -e 's/$/ :/' >> "$depfile"
175d983712dSmrg  rm -f "$tmpdepfile"
176d983712dSmrg  ;;
177d983712dSmrg
178d983712dSmrghp)
179d983712dSmrg  # This case exists only to let depend.m4 do its work.  It works by
180d983712dSmrg  # looking at the text of this script.  This case will never be run,
181d983712dSmrg  # since it is checked for above.
182d983712dSmrg  exit 1
183d983712dSmrg  ;;
184d983712dSmrg
185d983712dSmrgsgi)
186d983712dSmrg  if test "$libtool" = yes; then
187d983712dSmrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
188d983712dSmrg  else
189d983712dSmrg    "$@" -MDupdate "$tmpdepfile"
190d983712dSmrg  fi
191d983712dSmrg  stat=$?
192d983712dSmrg  if test $stat -eq 0; then :
193d983712dSmrg  else
194d983712dSmrg    rm -f "$tmpdepfile"
195d983712dSmrg    exit $stat
196d983712dSmrg  fi
197d983712dSmrg  rm -f "$depfile"
198d983712dSmrg
199d983712dSmrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
200d983712dSmrg    echo "$object : \\" > "$depfile"
201d983712dSmrg
202d983712dSmrg    # Clip off the initial element (the dependent).  Don't try to be
203d983712dSmrg    # clever and replace this with sed code, as IRIX sed won't handle
204d983712dSmrg    # lines with more than a fixed number of characters (4096 in
205d983712dSmrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
206d983712dSmrg    # the IRIX cc adds comments like `#:fec' to the end of the
207d983712dSmrg    # dependency line.
208d983712dSmrg    tr ' ' '
209d983712dSmrg' < "$tmpdepfile" \
210d983712dSmrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
211d983712dSmrg    tr '
2124b9470b1Smrg' ' ' >> "$depfile"
2134b9470b1Smrg    echo >> "$depfile"
214d983712dSmrg
215d983712dSmrg    # The second pass generates a dummy entry for each header file.
216d983712dSmrg    tr ' ' '
217d983712dSmrg' < "$tmpdepfile" \
218d983712dSmrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
2194b9470b1Smrg   >> "$depfile"
220d983712dSmrg  else
221d983712dSmrg    # The sourcefile does not contain any dependencies, so just
222d983712dSmrg    # store a dummy comment line, to avoid errors with the Makefile
223d983712dSmrg    # "include basename.Plo" scheme.
224d983712dSmrg    echo "#dummy" > "$depfile"
225d983712dSmrg  fi
226d983712dSmrg  rm -f "$tmpdepfile"
227d983712dSmrg  ;;
228d983712dSmrg
229d983712dSmrgaix)
230d983712dSmrg  # The C for AIX Compiler uses -M and outputs the dependencies
231d983712dSmrg  # in a .u file.  In older versions, this file always lives in the
232d983712dSmrg  # current directory.  Also, the AIX compiler puts `$object:' at the
233d983712dSmrg  # start of each line; $object doesn't have directory information.
234d983712dSmrg  # Version 6 uses the directory in both cases.
235962c3257Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
236962c3257Smrg  test "x$dir" = "x$object" && dir=
237962c3257Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
238d983712dSmrg  if test "$libtool" = yes; then
239962c3257Smrg    tmpdepfile1=$dir$base.u
240962c3257Smrg    tmpdepfile2=$base.u
241962c3257Smrg    tmpdepfile3=$dir.libs/$base.u
242d983712dSmrg    "$@" -Wc,-M
243d983712dSmrg  else
244962c3257Smrg    tmpdepfile1=$dir$base.u
245962c3257Smrg    tmpdepfile2=$dir$base.u
246962c3257Smrg    tmpdepfile3=$dir$base.u
247d983712dSmrg    "$@" -M
248d983712dSmrg  fi
249d983712dSmrg  stat=$?
250d983712dSmrg
251d983712dSmrg  if test $stat -eq 0; then :
252d983712dSmrg  else
253962c3257Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
254d983712dSmrg    exit $stat
255d983712dSmrg  fi
256d983712dSmrg
257962c3257Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
258962c3257Smrg  do
259962c3257Smrg    test -f "$tmpdepfile" && break
260962c3257Smrg  done
261d983712dSmrg  if test -f "$tmpdepfile"; then
262d983712dSmrg    # Each line is of the form `foo.o: dependent.h'.
263d983712dSmrg    # Do two passes, one to just change these to
264d983712dSmrg    # `$object: dependent.h' and one to simply `dependent.h:'.
265962c3257Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
266962c3257Smrg    # That's a tab and a space in the [].
267962c3257Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
268d983712dSmrg  else
269d983712dSmrg    # The sourcefile does not contain any dependencies, so just
270d983712dSmrg    # store a dummy comment line, to avoid errors with the Makefile
271d983712dSmrg    # "include basename.Plo" scheme.
272d983712dSmrg    echo "#dummy" > "$depfile"
273d983712dSmrg  fi
274d983712dSmrg  rm -f "$tmpdepfile"
275d983712dSmrg  ;;
276d983712dSmrg
277d983712dSmrgicc)
278d983712dSmrg  # Intel's C compiler understands `-MD -MF file'.  However on
279d983712dSmrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
280d983712dSmrg  # ICC 7.0 will fill foo.d with something like
281d983712dSmrg  #    foo.o: sub/foo.c
282d983712dSmrg  #    foo.o: sub/foo.h
283d983712dSmrg  # which is wrong.  We want:
284d983712dSmrg  #    sub/foo.o: sub/foo.c
285d983712dSmrg  #    sub/foo.o: sub/foo.h
286d983712dSmrg  #    sub/foo.c:
287d983712dSmrg  #    sub/foo.h:
288d983712dSmrg  # ICC 7.1 will output
289d983712dSmrg  #    foo.o: sub/foo.c sub/foo.h
290d983712dSmrg  # and will wrap long lines using \ :
291d983712dSmrg  #    foo.o: sub/foo.c ... \
292d983712dSmrg  #     sub/foo.h ... \
293d983712dSmrg  #     ...
294d983712dSmrg
295d983712dSmrg  "$@" -MD -MF "$tmpdepfile"
296d983712dSmrg  stat=$?
297d983712dSmrg  if test $stat -eq 0; then :
298d983712dSmrg  else
299d983712dSmrg    rm -f "$tmpdepfile"
300d983712dSmrg    exit $stat
301d983712dSmrg  fi
302d983712dSmrg  rm -f "$depfile"
303d983712dSmrg  # Each line is of the form `foo.o: dependent.h',
304d983712dSmrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
305d983712dSmrg  # Do two passes, one to just change these to
306d983712dSmrg  # `$object: dependent.h' and one to simply `dependent.h:'.
307d983712dSmrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
308d983712dSmrg  # Some versions of the HPUX 10.20 sed can't process this invocation
309d983712dSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
310d983712dSmrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
311d983712dSmrg    sed -e 's/$/ :/' >> "$depfile"
312d983712dSmrg  rm -f "$tmpdepfile"
313d983712dSmrg  ;;
314d983712dSmrg
315962c3257Smrghp2)
316962c3257Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
317962c3257Smrg  # compilers, which have integrated preprocessors.  The correct option
318962c3257Smrg  # to use with these is +Maked; it writes dependencies to a file named
319962c3257Smrg  # 'foo.d', which lands next to the object file, wherever that
320962c3257Smrg  # happens to be.
321962c3257Smrg  # Much of this is similar to the tru64 case; see comments there.
322962c3257Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
323962c3257Smrg  test "x$dir" = "x$object" && dir=
324962c3257Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
325962c3257Smrg  if test "$libtool" = yes; then
326962c3257Smrg    tmpdepfile1=$dir$base.d
327962c3257Smrg    tmpdepfile2=$dir.libs/$base.d
328962c3257Smrg    "$@" -Wc,+Maked
329962c3257Smrg  else
330962c3257Smrg    tmpdepfile1=$dir$base.d
331962c3257Smrg    tmpdepfile2=$dir$base.d
332962c3257Smrg    "$@" +Maked
333962c3257Smrg  fi
334962c3257Smrg  stat=$?
335962c3257Smrg  if test $stat -eq 0; then :
336962c3257Smrg  else
337962c3257Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
338962c3257Smrg     exit $stat
339962c3257Smrg  fi
340962c3257Smrg
341962c3257Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
342962c3257Smrg  do
343962c3257Smrg    test -f "$tmpdepfile" && break
344962c3257Smrg  done
345962c3257Smrg  if test -f "$tmpdepfile"; then
346962c3257Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
347962c3257Smrg    # Add `dependent.h:' lines.
3484b9470b1Smrg    sed -ne '2,${
3494b9470b1Smrg	       s/^ *//
3504b9470b1Smrg	       s/ \\*$//
3514b9470b1Smrg	       s/$/:/
3524b9470b1Smrg	       p
3534b9470b1Smrg	     }' "$tmpdepfile" >> "$depfile"
354962c3257Smrg  else
355962c3257Smrg    echo "#dummy" > "$depfile"
356962c3257Smrg  fi
357962c3257Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
358962c3257Smrg  ;;
359962c3257Smrg
360d983712dSmrgtru64)
361d983712dSmrg   # The Tru64 compiler uses -MD to generate dependencies as a side
362d983712dSmrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
363d983712dSmrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
364d983712dSmrg   # dependencies in `foo.d' instead, so we check for that too.
365d983712dSmrg   # Subdirectories are respected.
366d983712dSmrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
367d983712dSmrg   test "x$dir" = "x$object" && dir=
368d983712dSmrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
369d983712dSmrg
370d983712dSmrg   if test "$libtool" = yes; then
371d983712dSmrg      # With Tru64 cc, shared objects can also be used to make a
372962c3257Smrg      # static library.  This mechanism is used in libtool 1.4 series to
373d983712dSmrg      # handle both shared and static libraries in a single compilation.
374d983712dSmrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
375d983712dSmrg      #
376d983712dSmrg      # With libtool 1.5 this exception was removed, and libtool now
377d983712dSmrg      # generates 2 separate objects for the 2 libraries.  These two
378962c3257Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
379d983712dSmrg      # in $dir$base.o.d.  We have to check for both files, because
380d983712dSmrg      # one of the two compilations can be disabled.  We should prefer
381d983712dSmrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
382d983712dSmrg      # automatically cleaned when .libs/ is deleted, while ignoring
383d983712dSmrg      # the former would cause a distcleancheck panic.
384d983712dSmrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
385d983712dSmrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
386d983712dSmrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
387d983712dSmrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
388d983712dSmrg      "$@" -Wc,-MD
389d983712dSmrg   else
390d983712dSmrg      tmpdepfile1=$dir$base.o.d
391d983712dSmrg      tmpdepfile2=$dir$base.d
392d983712dSmrg      tmpdepfile3=$dir$base.d
393d983712dSmrg      tmpdepfile4=$dir$base.d
394d983712dSmrg      "$@" -MD
395d983712dSmrg   fi
396d983712dSmrg
397d983712dSmrg   stat=$?
398d983712dSmrg   if test $stat -eq 0; then :
399d983712dSmrg   else
400d983712dSmrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
401d983712dSmrg      exit $stat
402d983712dSmrg   fi
403d983712dSmrg
404d983712dSmrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
405d983712dSmrg   do
406d983712dSmrg     test -f "$tmpdepfile" && break
407d983712dSmrg   done
408d983712dSmrg   if test -f "$tmpdepfile"; then
409d983712dSmrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
410d983712dSmrg      # That's a tab and a space in the [].
411d983712dSmrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
412d983712dSmrg   else
413d983712dSmrg      echo "#dummy" > "$depfile"
414d983712dSmrg   fi
415d983712dSmrg   rm -f "$tmpdepfile"
416d983712dSmrg   ;;
417d983712dSmrg
4184b9470b1Smrgmsvc7)
4194b9470b1Smrg  if test "$libtool" = yes; then
4204b9470b1Smrg    showIncludes=-Wc,-showIncludes
4214b9470b1Smrg  else
4224b9470b1Smrg    showIncludes=-showIncludes
4234b9470b1Smrg  fi
4244b9470b1Smrg  "$@" $showIncludes > "$tmpdepfile"
4254b9470b1Smrg  stat=$?
4264b9470b1Smrg  grep -v '^Note: including file: ' "$tmpdepfile"
4274b9470b1Smrg  if test "$stat" = 0; then :
4284b9470b1Smrg  else
4294b9470b1Smrg    rm -f "$tmpdepfile"
4304b9470b1Smrg    exit $stat
4314b9470b1Smrg  fi
4324b9470b1Smrg  rm -f "$depfile"
4334b9470b1Smrg  echo "$object : \\" > "$depfile"
4344b9470b1Smrg  # The first sed program below extracts the file names and escapes
4354b9470b1Smrg  # backslashes for cygpath.  The second sed program outputs the file
4364b9470b1Smrg  # name when reading, but also accumulates all include files in the
4374b9470b1Smrg  # hold buffer in order to output them again at the end.  This only
4384b9470b1Smrg  # works with sed implementations that can handle large buffers.
4394b9470b1Smrg  sed < "$tmpdepfile" -n '
4404b9470b1Smrg/^Note: including file:  *\(.*\)/ {
4414b9470b1Smrg  s//\1/
4424b9470b1Smrg  s/\\/\\\\/g
4434b9470b1Smrg  p
4444b9470b1Smrg}' | $cygpath_u | sort -u | sed -n '
4454b9470b1Smrgs/ /\\ /g
4464b9470b1Smrgs/\(.*\)/	\1 \\/p
4474b9470b1Smrgs/.\(.*\) \\/\1:/
4484b9470b1SmrgH
4494b9470b1Smrg$ {
4504b9470b1Smrg  s/.*/	/
4514b9470b1Smrg  G
4524b9470b1Smrg  p
4534b9470b1Smrg}' >> "$depfile"
4544b9470b1Smrg  rm -f "$tmpdepfile"
4554b9470b1Smrg  ;;
4564b9470b1Smrg
4574b9470b1Smrgmsvc7msys)
4584b9470b1Smrg  # This case exists only to let depend.m4 do its work.  It works by
4594b9470b1Smrg  # looking at the text of this script.  This case will never be run,
4604b9470b1Smrg  # since it is checked for above.
4614b9470b1Smrg  exit 1
4624b9470b1Smrg  ;;
4634b9470b1Smrg
464d983712dSmrg#nosideeffect)
465d983712dSmrg  # This comment above is used by automake to tell side-effect
466d983712dSmrg  # dependency tracking mechanisms from slower ones.
467d983712dSmrg
468d983712dSmrgdashmstdout)
469d983712dSmrg  # Important note: in order to support this mode, a compiler *must*
470d983712dSmrg  # always write the preprocessed file to stdout, regardless of -o.
471d983712dSmrg  "$@" || exit $?
472d983712dSmrg
473d983712dSmrg  # Remove the call to Libtool.
474d983712dSmrg  if test "$libtool" = yes; then
4754b9470b1Smrg    while test "X$1" != 'X--mode=compile'; do
476d983712dSmrg      shift
477d983712dSmrg    done
478d983712dSmrg    shift
479d983712dSmrg  fi
480d983712dSmrg
481d983712dSmrg  # Remove `-o $object'.
482d983712dSmrg  IFS=" "
483d983712dSmrg  for arg
484d983712dSmrg  do
485d983712dSmrg    case $arg in
486d983712dSmrg    -o)
487d983712dSmrg      shift
488d983712dSmrg      ;;
489d983712dSmrg    $object)
490d983712dSmrg      shift
491d983712dSmrg      ;;
492d983712dSmrg    *)
493d983712dSmrg      set fnord "$@" "$arg"
494d983712dSmrg      shift # fnord
495d983712dSmrg      shift # $arg
496d983712dSmrg      ;;
497d983712dSmrg    esac
498d983712dSmrg  done
499d983712dSmrg
500d983712dSmrg  test -z "$dashmflag" && dashmflag=-M
501d983712dSmrg  # Require at least two characters before searching for `:'
502d983712dSmrg  # in the target name.  This is to cope with DOS-style filenames:
503d983712dSmrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
504d983712dSmrg  "$@" $dashmflag |
505d983712dSmrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
506d983712dSmrg  rm -f "$depfile"
507d983712dSmrg  cat < "$tmpdepfile" > "$depfile"
508d983712dSmrg  tr ' ' '
509d983712dSmrg' < "$tmpdepfile" | \
510d983712dSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
511d983712dSmrg## correctly.  Breaking it into two sed invocations is a workaround.
512d983712dSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
513d983712dSmrg  rm -f "$tmpdepfile"
514d983712dSmrg  ;;
515d983712dSmrg
516d983712dSmrgdashXmstdout)
517d983712dSmrg  # This case only exists to satisfy depend.m4.  It is never actually
518d983712dSmrg  # run, as this mode is specially recognized in the preamble.
519d983712dSmrg  exit 1
520d983712dSmrg  ;;
521d983712dSmrg
522d983712dSmrgmakedepend)
523d983712dSmrg  "$@" || exit $?
524d983712dSmrg  # Remove any Libtool call
525d983712dSmrg  if test "$libtool" = yes; then
5264b9470b1Smrg    while test "X$1" != 'X--mode=compile'; do
527d983712dSmrg      shift
528d983712dSmrg    done
529d983712dSmrg    shift
530d983712dSmrg  fi
531d983712dSmrg  # X makedepend
532d983712dSmrg  shift
5334b9470b1Smrg  cleared=no eat=no
5344b9470b1Smrg  for arg
5354b9470b1Smrg  do
536d983712dSmrg    case $cleared in
537d983712dSmrg    no)
538d983712dSmrg      set ""; shift
539d983712dSmrg      cleared=yes ;;
540d983712dSmrg    esac
5414b9470b1Smrg    if test $eat = yes; then
5424b9470b1Smrg      eat=no
5434b9470b1Smrg      continue
5444b9470b1Smrg    fi
545d983712dSmrg    case "$arg" in
546d983712dSmrg    -D*|-I*)
547d983712dSmrg      set fnord "$@" "$arg"; shift ;;
548d983712dSmrg    # Strip any option that makedepend may not understand.  Remove
549d983712dSmrg    # the object too, otherwise makedepend will parse it as a source file.
5504b9470b1Smrg    -arch)
5514b9470b1Smrg      eat=yes ;;
552d983712dSmrg    -*|$object)
553d983712dSmrg      ;;
554d983712dSmrg    *)
555d983712dSmrg      set fnord "$@" "$arg"; shift ;;
556d983712dSmrg    esac
557d983712dSmrg  done
5584b9470b1Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
559d983712dSmrg  touch "$tmpdepfile"
560d983712dSmrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
561d983712dSmrg  rm -f "$depfile"
5624b9470b1Smrg  # makedepend may prepend the VPATH from the source file name to the object.
5634b9470b1Smrg  # No need to regex-escape $object, excess matching of '.' is harmless.
5644b9470b1Smrg  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
565d983712dSmrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
566d983712dSmrg' | \
567d983712dSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
568d983712dSmrg## correctly.  Breaking it into two sed invocations is a workaround.
569d983712dSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
570d983712dSmrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
571d983712dSmrg  ;;
572d983712dSmrg
573d983712dSmrgcpp)
574d983712dSmrg  # Important note: in order to support this mode, a compiler *must*
575d983712dSmrg  # always write the preprocessed file to stdout.
576d983712dSmrg  "$@" || exit $?
577d983712dSmrg
578d983712dSmrg  # Remove the call to Libtool.
579d983712dSmrg  if test "$libtool" = yes; then
5804b9470b1Smrg    while test "X$1" != 'X--mode=compile'; do
581d983712dSmrg      shift
582d983712dSmrg    done
583d983712dSmrg    shift
584d983712dSmrg  fi
585d983712dSmrg
586d983712dSmrg  # Remove `-o $object'.
587d983712dSmrg  IFS=" "
588d983712dSmrg  for arg
589d983712dSmrg  do
590d983712dSmrg    case $arg in
591d983712dSmrg    -o)
592d983712dSmrg      shift
593d983712dSmrg      ;;
594d983712dSmrg    $object)
595d983712dSmrg      shift
596d983712dSmrg      ;;
597d983712dSmrg    *)
598d983712dSmrg      set fnord "$@" "$arg"
599d983712dSmrg      shift # fnord
600d983712dSmrg      shift # $arg
601d983712dSmrg      ;;
602d983712dSmrg    esac
603d983712dSmrg  done
604d983712dSmrg
605d983712dSmrg  "$@" -E |
606d983712dSmrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
607d983712dSmrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
608d983712dSmrg    sed '$ s: \\$::' > "$tmpdepfile"
609d983712dSmrg  rm -f "$depfile"
610d983712dSmrg  echo "$object : \\" > "$depfile"
611d983712dSmrg  cat < "$tmpdepfile" >> "$depfile"
612d983712dSmrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
613d983712dSmrg  rm -f "$tmpdepfile"
614d983712dSmrg  ;;
615d983712dSmrg
616d983712dSmrgmsvisualcpp)
617d983712dSmrg  # Important note: in order to support this mode, a compiler *must*
6184b9470b1Smrg  # always write the preprocessed file to stdout.
619d983712dSmrg  "$@" || exit $?
6204b9470b1Smrg
6214b9470b1Smrg  # Remove the call to Libtool.
6224b9470b1Smrg  if test "$libtool" = yes; then
6234b9470b1Smrg    while test "X$1" != 'X--mode=compile'; do
6244b9470b1Smrg      shift
6254b9470b1Smrg    done
6264b9470b1Smrg    shift
6274b9470b1Smrg  fi
6284b9470b1Smrg
629d983712dSmrg  IFS=" "
630d983712dSmrg  for arg
631d983712dSmrg  do
632d983712dSmrg    case "$arg" in
6334b9470b1Smrg    -o)
6344b9470b1Smrg      shift
6354b9470b1Smrg      ;;
6364b9470b1Smrg    $object)
6374b9470b1Smrg      shift
6384b9470b1Smrg      ;;
639d983712dSmrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
640d983712dSmrg	set fnord "$@"
641d983712dSmrg	shift
642d983712dSmrg	shift
643d983712dSmrg	;;
644d983712dSmrg    *)
645d983712dSmrg	set fnord "$@" "$arg"
646d983712dSmrg	shift
647d983712dSmrg	shift
648d983712dSmrg	;;
649d983712dSmrg    esac
650d983712dSmrg  done
6514b9470b1Smrg  "$@" -E 2>/dev/null |
6524b9470b1Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
653d983712dSmrg  rm -f "$depfile"
654d983712dSmrg  echo "$object : \\" > "$depfile"
6554b9470b1Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
656d983712dSmrg  echo "	" >> "$depfile"
6574b9470b1Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
658d983712dSmrg  rm -f "$tmpdepfile"
659d983712dSmrg  ;;
660d983712dSmrg
6614b9470b1Smrgmsvcmsys)
6624b9470b1Smrg  # This case exists only to let depend.m4 do its work.  It works by
6634b9470b1Smrg  # looking at the text of this script.  This case will never be run,
6644b9470b1Smrg  # since it is checked for above.
6654b9470b1Smrg  exit 1
6664b9470b1Smrg  ;;
6674b9470b1Smrg
668d983712dSmrgnone)
669d983712dSmrg  exec "$@"
670d983712dSmrg  ;;
671d983712dSmrg
672d983712dSmrg*)
673d983712dSmrg  echo "Unknown depmode $depmode" 1>&2
674d983712dSmrg  exit 1
675d983712dSmrg  ;;
676d983712dSmrgesac
677d983712dSmrg
678d983712dSmrgexit 0
679d983712dSmrg
680d983712dSmrg# Local Variables:
681d983712dSmrg# mode: shell-script
682d983712dSmrg# sh-indentation: 2
683d983712dSmrg# eval: (add-hook 'write-file-hooks 'time-stamp)
684d983712dSmrg# time-stamp-start: "scriptversion="
685d983712dSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
6864b9470b1Smrg# time-stamp-time-zone: "UTC"
6874b9470b1Smrg# time-stamp-end: "; # UTC"
688d983712dSmrg# End:
689