depcomp revision b3eb03f3
1010cdda0Smrg#! /bin/sh
2010cdda0Smrg# depcomp - compile a program generating dependencies as side-effects
3b3eb03f3Smrg
4b3eb03f3Smrgscriptversion=2009-04-28.21; # UTC
5b3eb03f3Smrg
6b3eb03f3Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
7b3eb03f3Smrg# Software Foundation, Inc.
8010cdda0Smrg
9010cdda0Smrg# This program is free software; you can redistribute it and/or modify
10010cdda0Smrg# it under the terms of the GNU General Public License as published by
11010cdda0Smrg# the Free Software Foundation; either version 2, or (at your option)
12010cdda0Smrg# any later version.
13010cdda0Smrg
14010cdda0Smrg# This program is distributed in the hope that it will be useful,
15010cdda0Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
16010cdda0Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17010cdda0Smrg# GNU General Public License for more details.
18010cdda0Smrg
19010cdda0Smrg# You should have received a copy of the GNU General Public License
20b3eb03f3Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
21010cdda0Smrg
22010cdda0Smrg# As a special exception to the GNU General Public License, if you
23010cdda0Smrg# distribute this file as part of a program that contains a
24010cdda0Smrg# configuration script generated by Autoconf, you may include it under
25010cdda0Smrg# the same distribution terms that you use for the rest of that program.
26010cdda0Smrg
27010cdda0Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
28010cdda0Smrg
29b3eb03f3Smrgcase $1 in
30b3eb03f3Smrg  '')
31b3eb03f3Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
32b3eb03f3Smrg     exit 1;
33b3eb03f3Smrg     ;;
34b3eb03f3Smrg  -h | --h*)
35b3eb03f3Smrg    cat <<\EOF
36b3eb03f3SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
37b3eb03f3Smrg
38b3eb03f3SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
39b3eb03f3Smrgas side-effects.
40b3eb03f3Smrg
41b3eb03f3SmrgEnvironment variables:
42b3eb03f3Smrg  depmode     Dependency tracking mode.
43b3eb03f3Smrg  source      Source file read by `PROGRAMS ARGS'.
44b3eb03f3Smrg  object      Object file output by `PROGRAMS ARGS'.
45b3eb03f3Smrg  DEPDIR      directory where to store dependencies.
46b3eb03f3Smrg  depfile     Dependency file to output.
47b3eb03f3Smrg  tmpdepfile  Temporary file to use when outputing dependencies.
48b3eb03f3Smrg  libtool     Whether libtool is used (yes/no).
49b3eb03f3Smrg
50b3eb03f3SmrgReport bugs to <bug-automake@gnu.org>.
51b3eb03f3SmrgEOF
52b3eb03f3Smrg    exit $?
53b3eb03f3Smrg    ;;
54b3eb03f3Smrg  -v | --v*)
55b3eb03f3Smrg    echo "depcomp $scriptversion"
56b3eb03f3Smrg    exit $?
57b3eb03f3Smrg    ;;
58b3eb03f3Smrgesac
59b3eb03f3Smrg
60010cdda0Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
61010cdda0Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
62010cdda0Smrg  exit 1
63010cdda0Smrgfi
64010cdda0Smrg
65b3eb03f3Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
66b3eb03f3Smrgdepfile=${depfile-`echo "$object" |
67b3eb03f3Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
68010cdda0Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
69010cdda0Smrg
70010cdda0Smrgrm -f "$tmpdepfile"
71010cdda0Smrg
72010cdda0Smrg# Some modes work just like other modes, but use different flags.  We
73010cdda0Smrg# parameterize here, but still list the modes in the big case below,
74010cdda0Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
75010cdda0Smrg# here, because this file can only contain one case statement.
76010cdda0Smrgif test "$depmode" = hp; then
77010cdda0Smrg  # HP compiler uses -M and no extra arg.
78010cdda0Smrg  gccflag=-M
79010cdda0Smrg  depmode=gcc
80010cdda0Smrgfi
81010cdda0Smrg
82010cdda0Smrgif test "$depmode" = dashXmstdout; then
83010cdda0Smrg   # This is just like dashmstdout with a different argument.
84010cdda0Smrg   dashmflag=-xM
85010cdda0Smrg   depmode=dashmstdout
86010cdda0Smrgfi
87010cdda0Smrg
88b3eb03f3Smrgcygpath_u="cygpath -u -f -"
89b3eb03f3Smrgif test "$depmode" = msvcmsys; then
90b3eb03f3Smrg   # This is just like msvisualcpp but w/o cygpath translation.
91b3eb03f3Smrg   # Just convert the backslash-escaped backslashes to single forward
92b3eb03f3Smrg   # slashes to satisfy depend.m4
93b3eb03f3Smrg   cygpath_u="sed s,\\\\\\\\,/,g"
94b3eb03f3Smrg   depmode=msvisualcpp
95b3eb03f3Smrgfi
96b3eb03f3Smrg
97010cdda0Smrgcase "$depmode" in
98010cdda0Smrggcc3)
99010cdda0Smrg## gcc 3 implements dependency tracking that does exactly what
100010cdda0Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
101010cdda0Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
102b3eb03f3Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
103b3eb03f3Smrg## the command line argument order; so add the flags where they
104b3eb03f3Smrg## appear in depend2.am.  Note that the slowdown incurred here
105b3eb03f3Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
106b3eb03f3Smrg  for arg
107b3eb03f3Smrg  do
108b3eb03f3Smrg    case $arg in
109b3eb03f3Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
110b3eb03f3Smrg    *)  set fnord "$@" "$arg" ;;
111b3eb03f3Smrg    esac
112b3eb03f3Smrg    shift # fnord
113b3eb03f3Smrg    shift # $arg
114b3eb03f3Smrg  done
115b3eb03f3Smrg  "$@"
116010cdda0Smrg  stat=$?
117010cdda0Smrg  if test $stat -eq 0; then :
118010cdda0Smrg  else
119010cdda0Smrg    rm -f "$tmpdepfile"
120010cdda0Smrg    exit $stat
121010cdda0Smrg  fi
122010cdda0Smrg  mv "$tmpdepfile" "$depfile"
123010cdda0Smrg  ;;
124010cdda0Smrg
125010cdda0Smrggcc)
126010cdda0Smrg## There are various ways to get dependency output from gcc.  Here's
127010cdda0Smrg## why we pick this rather obscure method:
128010cdda0Smrg## - Don't want to use -MD because we'd like the dependencies to end
129010cdda0Smrg##   up in a subdir.  Having to rename by hand is ugly.
130010cdda0Smrg##   (We might end up doing this anyway to support other compilers.)
131010cdda0Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
132010cdda0Smrg##   -MM, not -M (despite what the docs say).
133010cdda0Smrg## - Using -M directly means running the compiler twice (even worse
134010cdda0Smrg##   than renaming).
135010cdda0Smrg  if test -z "$gccflag"; then
136010cdda0Smrg    gccflag=-MD,
137010cdda0Smrg  fi
138010cdda0Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
139010cdda0Smrg  stat=$?
140010cdda0Smrg  if test $stat -eq 0; then :
141010cdda0Smrg  else
142010cdda0Smrg    rm -f "$tmpdepfile"
143010cdda0Smrg    exit $stat
144010cdda0Smrg  fi
145010cdda0Smrg  rm -f "$depfile"
146010cdda0Smrg  echo "$object : \\" > "$depfile"
147010cdda0Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
148010cdda0Smrg## The second -e expression handles DOS-style file names with drive letters.
149010cdda0Smrg  sed -e 's/^[^:]*: / /' \
150010cdda0Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
151010cdda0Smrg## This next piece of magic avoids the `deleted header file' problem.
152010cdda0Smrg## The problem is that when a header file which appears in a .P file
153010cdda0Smrg## is deleted, the dependency causes make to die (because there is
154010cdda0Smrg## typically no way to rebuild the header).  We avoid this by adding
155010cdda0Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
156010cdda0Smrg## this for us directly.
157010cdda0Smrg  tr ' ' '
158010cdda0Smrg' < "$tmpdepfile" |
159010cdda0Smrg## Some versions of gcc put a space before the `:'.  On the theory
160010cdda0Smrg## that the space means something, we add a space to the output as
161010cdda0Smrg## well.
162010cdda0Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
163010cdda0Smrg## correctly.  Breaking it into two sed invocations is a workaround.
164010cdda0Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
165010cdda0Smrg  rm -f "$tmpdepfile"
166010cdda0Smrg  ;;
167010cdda0Smrg
168010cdda0Smrghp)
169010cdda0Smrg  # This case exists only to let depend.m4 do its work.  It works by
170010cdda0Smrg  # looking at the text of this script.  This case will never be run,
171010cdda0Smrg  # since it is checked for above.
172010cdda0Smrg  exit 1
173010cdda0Smrg  ;;
174010cdda0Smrg
175010cdda0Smrgsgi)
176010cdda0Smrg  if test "$libtool" = yes; then
177010cdda0Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
178010cdda0Smrg  else
179010cdda0Smrg    "$@" -MDupdate "$tmpdepfile"
180010cdda0Smrg  fi
181010cdda0Smrg  stat=$?
182010cdda0Smrg  if test $stat -eq 0; then :
183010cdda0Smrg  else
184010cdda0Smrg    rm -f "$tmpdepfile"
185010cdda0Smrg    exit $stat
186010cdda0Smrg  fi
187010cdda0Smrg  rm -f "$depfile"
188010cdda0Smrg
189010cdda0Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
190010cdda0Smrg    echo "$object : \\" > "$depfile"
191010cdda0Smrg
192010cdda0Smrg    # Clip off the initial element (the dependent).  Don't try to be
193010cdda0Smrg    # clever and replace this with sed code, as IRIX sed won't handle
194010cdda0Smrg    # lines with more than a fixed number of characters (4096 in
195010cdda0Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
196010cdda0Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
197010cdda0Smrg    # dependency line.
198010cdda0Smrg    tr ' ' '
199010cdda0Smrg' < "$tmpdepfile" \
200010cdda0Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
201010cdda0Smrg    tr '
202b3eb03f3Smrg' ' ' >> "$depfile"
203b3eb03f3Smrg    echo >> "$depfile"
204010cdda0Smrg
205010cdda0Smrg    # The second pass generates a dummy entry for each header file.
206010cdda0Smrg    tr ' ' '
207010cdda0Smrg' < "$tmpdepfile" \
208010cdda0Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
209b3eb03f3Smrg   >> "$depfile"
210010cdda0Smrg  else
211010cdda0Smrg    # The sourcefile does not contain any dependencies, so just
212010cdda0Smrg    # store a dummy comment line, to avoid errors with the Makefile
213010cdda0Smrg    # "include basename.Plo" scheme.
214010cdda0Smrg    echo "#dummy" > "$depfile"
215010cdda0Smrg  fi
216010cdda0Smrg  rm -f "$tmpdepfile"
217010cdda0Smrg  ;;
218010cdda0Smrg
219010cdda0Smrgaix)
220010cdda0Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
221010cdda0Smrg  # in a .u file.  In older versions, this file always lives in the
222010cdda0Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
223010cdda0Smrg  # start of each line; $object doesn't have directory information.
224010cdda0Smrg  # Version 6 uses the directory in both cases.
225b3eb03f3Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
226b3eb03f3Smrg  test "x$dir" = "x$object" && dir=
227b3eb03f3Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
228010cdda0Smrg  if test "$libtool" = yes; then
229b3eb03f3Smrg    tmpdepfile1=$dir$base.u
230b3eb03f3Smrg    tmpdepfile2=$base.u
231b3eb03f3Smrg    tmpdepfile3=$dir.libs/$base.u
232010cdda0Smrg    "$@" -Wc,-M
233010cdda0Smrg  else
234b3eb03f3Smrg    tmpdepfile1=$dir$base.u
235b3eb03f3Smrg    tmpdepfile2=$dir$base.u
236b3eb03f3Smrg    tmpdepfile3=$dir$base.u
237010cdda0Smrg    "$@" -M
238010cdda0Smrg  fi
239010cdda0Smrg  stat=$?
240010cdda0Smrg
241010cdda0Smrg  if test $stat -eq 0; then :
242010cdda0Smrg  else
243b3eb03f3Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
244010cdda0Smrg    exit $stat
245010cdda0Smrg  fi
246010cdda0Smrg
247b3eb03f3Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
248b3eb03f3Smrg  do
249b3eb03f3Smrg    test -f "$tmpdepfile" && break
250b3eb03f3Smrg  done
251010cdda0Smrg  if test -f "$tmpdepfile"; then
252010cdda0Smrg    # Each line is of the form `foo.o: dependent.h'.
253010cdda0Smrg    # Do two passes, one to just change these to
254010cdda0Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
255b3eb03f3Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
256b3eb03f3Smrg    # That's a tab and a space in the [].
257b3eb03f3Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
258010cdda0Smrg  else
259010cdda0Smrg    # The sourcefile does not contain any dependencies, so just
260010cdda0Smrg    # store a dummy comment line, to avoid errors with the Makefile
261010cdda0Smrg    # "include basename.Plo" scheme.
262010cdda0Smrg    echo "#dummy" > "$depfile"
263010cdda0Smrg  fi
264010cdda0Smrg  rm -f "$tmpdepfile"
265010cdda0Smrg  ;;
266010cdda0Smrg
267010cdda0Smrgicc)
268010cdda0Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
269010cdda0Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
270010cdda0Smrg  # ICC 7.0 will fill foo.d with something like
271010cdda0Smrg  #    foo.o: sub/foo.c
272010cdda0Smrg  #    foo.o: sub/foo.h
273010cdda0Smrg  # which is wrong.  We want:
274010cdda0Smrg  #    sub/foo.o: sub/foo.c
275010cdda0Smrg  #    sub/foo.o: sub/foo.h
276010cdda0Smrg  #    sub/foo.c:
277010cdda0Smrg  #    sub/foo.h:
278010cdda0Smrg  # ICC 7.1 will output
279010cdda0Smrg  #    foo.o: sub/foo.c sub/foo.h
280010cdda0Smrg  # and will wrap long lines using \ :
281010cdda0Smrg  #    foo.o: sub/foo.c ... \
282010cdda0Smrg  #     sub/foo.h ... \
283010cdda0Smrg  #     ...
284010cdda0Smrg
285010cdda0Smrg  "$@" -MD -MF "$tmpdepfile"
286010cdda0Smrg  stat=$?
287010cdda0Smrg  if test $stat -eq 0; then :
288010cdda0Smrg  else
289010cdda0Smrg    rm -f "$tmpdepfile"
290010cdda0Smrg    exit $stat
291010cdda0Smrg  fi
292010cdda0Smrg  rm -f "$depfile"
293010cdda0Smrg  # Each line is of the form `foo.o: dependent.h',
294010cdda0Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
295010cdda0Smrg  # Do two passes, one to just change these to
296010cdda0Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
297010cdda0Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
298010cdda0Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
299010cdda0Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
300010cdda0Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
301010cdda0Smrg    sed -e 's/$/ :/' >> "$depfile"
302010cdda0Smrg  rm -f "$tmpdepfile"
303010cdda0Smrg  ;;
304010cdda0Smrg
305b3eb03f3Smrghp2)
306b3eb03f3Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
307b3eb03f3Smrg  # compilers, which have integrated preprocessors.  The correct option
308b3eb03f3Smrg  # to use with these is +Maked; it writes dependencies to a file named
309b3eb03f3Smrg  # 'foo.d', which lands next to the object file, wherever that
310b3eb03f3Smrg  # happens to be.
311b3eb03f3Smrg  # Much of this is similar to the tru64 case; see comments there.
312b3eb03f3Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
313b3eb03f3Smrg  test "x$dir" = "x$object" && dir=
314b3eb03f3Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
315b3eb03f3Smrg  if test "$libtool" = yes; then
316b3eb03f3Smrg    tmpdepfile1=$dir$base.d
317b3eb03f3Smrg    tmpdepfile2=$dir.libs/$base.d
318b3eb03f3Smrg    "$@" -Wc,+Maked
319b3eb03f3Smrg  else
320b3eb03f3Smrg    tmpdepfile1=$dir$base.d
321b3eb03f3Smrg    tmpdepfile2=$dir$base.d
322b3eb03f3Smrg    "$@" +Maked
323b3eb03f3Smrg  fi
324b3eb03f3Smrg  stat=$?
325b3eb03f3Smrg  if test $stat -eq 0; then :
326b3eb03f3Smrg  else
327b3eb03f3Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
328b3eb03f3Smrg     exit $stat
329b3eb03f3Smrg  fi
330b3eb03f3Smrg
331b3eb03f3Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
332b3eb03f3Smrg  do
333b3eb03f3Smrg    test -f "$tmpdepfile" && break
334b3eb03f3Smrg  done
335b3eb03f3Smrg  if test -f "$tmpdepfile"; then
336b3eb03f3Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
337b3eb03f3Smrg    # Add `dependent.h:' lines.
338b3eb03f3Smrg    sed -ne '2,${
339b3eb03f3Smrg	       s/^ *//
340b3eb03f3Smrg	       s/ \\*$//
341b3eb03f3Smrg	       s/$/:/
342b3eb03f3Smrg	       p
343b3eb03f3Smrg	     }' "$tmpdepfile" >> "$depfile"
344b3eb03f3Smrg  else
345b3eb03f3Smrg    echo "#dummy" > "$depfile"
346b3eb03f3Smrg  fi
347b3eb03f3Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
348b3eb03f3Smrg  ;;
349b3eb03f3Smrg
350010cdda0Smrgtru64)
351010cdda0Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
352010cdda0Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
353010cdda0Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
354010cdda0Smrg   # dependencies in `foo.d' instead, so we check for that too.
355010cdda0Smrg   # Subdirectories are respected.
356010cdda0Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
357010cdda0Smrg   test "x$dir" = "x$object" && dir=
358010cdda0Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
359010cdda0Smrg
360010cdda0Smrg   if test "$libtool" = yes; then
361b3eb03f3Smrg      # With Tru64 cc, shared objects can also be used to make a
362b3eb03f3Smrg      # static library.  This mechanism is used in libtool 1.4 series to
363b3eb03f3Smrg      # handle both shared and static libraries in a single compilation.
364b3eb03f3Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
365b3eb03f3Smrg      #
366b3eb03f3Smrg      # With libtool 1.5 this exception was removed, and libtool now
367b3eb03f3Smrg      # generates 2 separate objects for the 2 libraries.  These two
368b3eb03f3Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
369b3eb03f3Smrg      # in $dir$base.o.d.  We have to check for both files, because
370b3eb03f3Smrg      # one of the two compilations can be disabled.  We should prefer
371b3eb03f3Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
372b3eb03f3Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
373b3eb03f3Smrg      # the former would cause a distcleancheck panic.
374b3eb03f3Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
375b3eb03f3Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
376b3eb03f3Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
377b3eb03f3Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
378010cdda0Smrg      "$@" -Wc,-MD
379010cdda0Smrg   else
380b3eb03f3Smrg      tmpdepfile1=$dir$base.o.d
381b3eb03f3Smrg      tmpdepfile2=$dir$base.d
382b3eb03f3Smrg      tmpdepfile3=$dir$base.d
383b3eb03f3Smrg      tmpdepfile4=$dir$base.d
384010cdda0Smrg      "$@" -MD
385010cdda0Smrg   fi
386010cdda0Smrg
387010cdda0Smrg   stat=$?
388010cdda0Smrg   if test $stat -eq 0; then :
389010cdda0Smrg   else
390b3eb03f3Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
391010cdda0Smrg      exit $stat
392010cdda0Smrg   fi
393010cdda0Smrg
394b3eb03f3Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
395b3eb03f3Smrg   do
396b3eb03f3Smrg     test -f "$tmpdepfile" && break
397b3eb03f3Smrg   done
398010cdda0Smrg   if test -f "$tmpdepfile"; then
399010cdda0Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
400010cdda0Smrg      # That's a tab and a space in the [].
401010cdda0Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
402010cdda0Smrg   else
403010cdda0Smrg      echo "#dummy" > "$depfile"
404010cdda0Smrg   fi
405010cdda0Smrg   rm -f "$tmpdepfile"
406010cdda0Smrg   ;;
407010cdda0Smrg
408010cdda0Smrg#nosideeffect)
409010cdda0Smrg  # This comment above is used by automake to tell side-effect
410010cdda0Smrg  # dependency tracking mechanisms from slower ones.
411010cdda0Smrg
412010cdda0Smrgdashmstdout)
413010cdda0Smrg  # Important note: in order to support this mode, a compiler *must*
414010cdda0Smrg  # always write the preprocessed file to stdout, regardless of -o.
415010cdda0Smrg  "$@" || exit $?
416010cdda0Smrg
417010cdda0Smrg  # Remove the call to Libtool.
418010cdda0Smrg  if test "$libtool" = yes; then
419b3eb03f3Smrg    while test "X$1" != 'X--mode=compile'; do
420010cdda0Smrg      shift
421010cdda0Smrg    done
422010cdda0Smrg    shift
423010cdda0Smrg  fi
424010cdda0Smrg
425010cdda0Smrg  # Remove `-o $object'.
426010cdda0Smrg  IFS=" "
427010cdda0Smrg  for arg
428010cdda0Smrg  do
429010cdda0Smrg    case $arg in
430010cdda0Smrg    -o)
431010cdda0Smrg      shift
432010cdda0Smrg      ;;
433010cdda0Smrg    $object)
434010cdda0Smrg      shift
435010cdda0Smrg      ;;
436010cdda0Smrg    *)
437010cdda0Smrg      set fnord "$@" "$arg"
438010cdda0Smrg      shift # fnord
439010cdda0Smrg      shift # $arg
440010cdda0Smrg      ;;
441010cdda0Smrg    esac
442010cdda0Smrg  done
443010cdda0Smrg
444010cdda0Smrg  test -z "$dashmflag" && dashmflag=-M
445010cdda0Smrg  # Require at least two characters before searching for `:'
446010cdda0Smrg  # in the target name.  This is to cope with DOS-style filenames:
447010cdda0Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
448010cdda0Smrg  "$@" $dashmflag |
449010cdda0Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
450010cdda0Smrg  rm -f "$depfile"
451010cdda0Smrg  cat < "$tmpdepfile" > "$depfile"
452010cdda0Smrg  tr ' ' '
453010cdda0Smrg' < "$tmpdepfile" | \
454010cdda0Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
455010cdda0Smrg## correctly.  Breaking it into two sed invocations is a workaround.
456010cdda0Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
457010cdda0Smrg  rm -f "$tmpdepfile"
458010cdda0Smrg  ;;
459010cdda0Smrg
460010cdda0SmrgdashXmstdout)
461010cdda0Smrg  # This case only exists to satisfy depend.m4.  It is never actually
462010cdda0Smrg  # run, as this mode is specially recognized in the preamble.
463010cdda0Smrg  exit 1
464010cdda0Smrg  ;;
465010cdda0Smrg
466010cdda0Smrgmakedepend)
467010cdda0Smrg  "$@" || exit $?
468010cdda0Smrg  # Remove any Libtool call
469010cdda0Smrg  if test "$libtool" = yes; then
470b3eb03f3Smrg    while test "X$1" != 'X--mode=compile'; do
471010cdda0Smrg      shift
472010cdda0Smrg    done
473010cdda0Smrg    shift
474010cdda0Smrg  fi
475010cdda0Smrg  # X makedepend
476010cdda0Smrg  shift
477b3eb03f3Smrg  cleared=no eat=no
478b3eb03f3Smrg  for arg
479b3eb03f3Smrg  do
480010cdda0Smrg    case $cleared in
481010cdda0Smrg    no)
482010cdda0Smrg      set ""; shift
483010cdda0Smrg      cleared=yes ;;
484010cdda0Smrg    esac
485b3eb03f3Smrg    if test $eat = yes; then
486b3eb03f3Smrg      eat=no
487b3eb03f3Smrg      continue
488b3eb03f3Smrg    fi
489010cdda0Smrg    case "$arg" in
490010cdda0Smrg    -D*|-I*)
491010cdda0Smrg      set fnord "$@" "$arg"; shift ;;
492010cdda0Smrg    # Strip any option that makedepend may not understand.  Remove
493010cdda0Smrg    # the object too, otherwise makedepend will parse it as a source file.
494b3eb03f3Smrg    -arch)
495b3eb03f3Smrg      eat=yes ;;
496010cdda0Smrg    -*|$object)
497010cdda0Smrg      ;;
498010cdda0Smrg    *)
499010cdda0Smrg      set fnord "$@" "$arg"; shift ;;
500010cdda0Smrg    esac
501010cdda0Smrg  done
502b3eb03f3Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
503010cdda0Smrg  touch "$tmpdepfile"
504010cdda0Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
505010cdda0Smrg  rm -f "$depfile"
506010cdda0Smrg  cat < "$tmpdepfile" > "$depfile"
507010cdda0Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
508010cdda0Smrg' | \
509010cdda0Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
510010cdda0Smrg## correctly.  Breaking it into two sed invocations is a workaround.
511010cdda0Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
512010cdda0Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
513010cdda0Smrg  ;;
514010cdda0Smrg
515010cdda0Smrgcpp)
516010cdda0Smrg  # Important note: in order to support this mode, a compiler *must*
517010cdda0Smrg  # always write the preprocessed file to stdout.
518010cdda0Smrg  "$@" || exit $?
519010cdda0Smrg
520010cdda0Smrg  # Remove the call to Libtool.
521010cdda0Smrg  if test "$libtool" = yes; then
522b3eb03f3Smrg    while test "X$1" != 'X--mode=compile'; do
523010cdda0Smrg      shift
524010cdda0Smrg    done
525010cdda0Smrg    shift
526010cdda0Smrg  fi
527010cdda0Smrg
528010cdda0Smrg  # Remove `-o $object'.
529010cdda0Smrg  IFS=" "
530010cdda0Smrg  for arg
531010cdda0Smrg  do
532010cdda0Smrg    case $arg in
533010cdda0Smrg    -o)
534010cdda0Smrg      shift
535010cdda0Smrg      ;;
536010cdda0Smrg    $object)
537010cdda0Smrg      shift
538010cdda0Smrg      ;;
539010cdda0Smrg    *)
540010cdda0Smrg      set fnord "$@" "$arg"
541010cdda0Smrg      shift # fnord
542010cdda0Smrg      shift # $arg
543010cdda0Smrg      ;;
544010cdda0Smrg    esac
545010cdda0Smrg  done
546010cdda0Smrg
547010cdda0Smrg  "$@" -E |
548b3eb03f3Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
549b3eb03f3Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
550010cdda0Smrg    sed '$ s: \\$::' > "$tmpdepfile"
551010cdda0Smrg  rm -f "$depfile"
552010cdda0Smrg  echo "$object : \\" > "$depfile"
553010cdda0Smrg  cat < "$tmpdepfile" >> "$depfile"
554010cdda0Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
555010cdda0Smrg  rm -f "$tmpdepfile"
556010cdda0Smrg  ;;
557010cdda0Smrg
558010cdda0Smrgmsvisualcpp)
559010cdda0Smrg  # Important note: in order to support this mode, a compiler *must*
560b3eb03f3Smrg  # always write the preprocessed file to stdout.
561010cdda0Smrg  "$@" || exit $?
562b3eb03f3Smrg
563b3eb03f3Smrg  # Remove the call to Libtool.
564b3eb03f3Smrg  if test "$libtool" = yes; then
565b3eb03f3Smrg    while test "X$1" != 'X--mode=compile'; do
566b3eb03f3Smrg      shift
567b3eb03f3Smrg    done
568b3eb03f3Smrg    shift
569b3eb03f3Smrg  fi
570b3eb03f3Smrg
571010cdda0Smrg  IFS=" "
572010cdda0Smrg  for arg
573010cdda0Smrg  do
574010cdda0Smrg    case "$arg" in
575b3eb03f3Smrg    -o)
576b3eb03f3Smrg      shift
577b3eb03f3Smrg      ;;
578b3eb03f3Smrg    $object)
579b3eb03f3Smrg      shift
580b3eb03f3Smrg      ;;
581010cdda0Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
582010cdda0Smrg	set fnord "$@"
583010cdda0Smrg	shift
584010cdda0Smrg	shift
585010cdda0Smrg	;;
586010cdda0Smrg    *)
587010cdda0Smrg	set fnord "$@" "$arg"
588010cdda0Smrg	shift
589010cdda0Smrg	shift
590010cdda0Smrg	;;
591010cdda0Smrg    esac
592010cdda0Smrg  done
593b3eb03f3Smrg  "$@" -E 2>/dev/null |
594b3eb03f3Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
595010cdda0Smrg  rm -f "$depfile"
596010cdda0Smrg  echo "$object : \\" > "$depfile"
597b3eb03f3Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
598010cdda0Smrg  echo "	" >> "$depfile"
599b3eb03f3Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
600010cdda0Smrg  rm -f "$tmpdepfile"
601010cdda0Smrg  ;;
602010cdda0Smrg
603b3eb03f3Smrgmsvcmsys)
604b3eb03f3Smrg  # This case exists only to let depend.m4 do its work.  It works by
605b3eb03f3Smrg  # looking at the text of this script.  This case will never be run,
606b3eb03f3Smrg  # since it is checked for above.
607b3eb03f3Smrg  exit 1
608b3eb03f3Smrg  ;;
609b3eb03f3Smrg
610010cdda0Smrgnone)
611010cdda0Smrg  exec "$@"
612010cdda0Smrg  ;;
613010cdda0Smrg
614010cdda0Smrg*)
615010cdda0Smrg  echo "Unknown depmode $depmode" 1>&2
616010cdda0Smrg  exit 1
617010cdda0Smrg  ;;
618010cdda0Smrgesac
619010cdda0Smrg
620010cdda0Smrgexit 0
621b3eb03f3Smrg
622b3eb03f3Smrg# Local Variables:
623b3eb03f3Smrg# mode: shell-script
624b3eb03f3Smrg# sh-indentation: 2
625b3eb03f3Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
626b3eb03f3Smrg# time-stamp-start: "scriptversion="
627b3eb03f3Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
628b3eb03f3Smrg# time-stamp-time-zone: "UTC"
629b3eb03f3Smrg# time-stamp-end: "; # UTC"
630b3eb03f3Smrg# End:
631