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