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