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