depcomp revision 266e564d
1266e564dSmrg#! /bin/sh
2266e564dSmrg# depcomp - compile a program generating dependencies as side-effects
3266e564dSmrg
4266e564dSmrgscriptversion=2006-10-15.18
5266e564dSmrg
6266e564dSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software
7266e564dSmrg# Foundation, Inc.
8266e564dSmrg
9266e564dSmrg# This program is free software; you can redistribute it and/or modify
10266e564dSmrg# it under the terms of the GNU General Public License as published by
11266e564dSmrg# the Free Software Foundation; either version 2, or (at your option)
12266e564dSmrg# any later version.
13266e564dSmrg
14266e564dSmrg# This program is distributed in the hope that it will be useful,
15266e564dSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
16266e564dSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17266e564dSmrg# GNU General Public License for more details.
18266e564dSmrg
19266e564dSmrg# You should have received a copy of the GNU General Public License
20266e564dSmrg# along with this program; if not, write to the Free Software
21266e564dSmrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22266e564dSmrg# 02110-1301, USA.
23266e564dSmrg
24266e564dSmrg# As a special exception to the GNU General Public License, if you
25266e564dSmrg# distribute this file as part of a program that contains a
26266e564dSmrg# configuration script generated by Autoconf, you may include it under
27266e564dSmrg# the same distribution terms that you use for the rest of that program.
28266e564dSmrg
29266e564dSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
30266e564dSmrg
31266e564dSmrgcase $1 in
32266e564dSmrg  '')
33266e564dSmrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
34266e564dSmrg     exit 1;
35266e564dSmrg     ;;
36266e564dSmrg  -h | --h*)
37266e564dSmrg    cat <<\EOF
38266e564dSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
39266e564dSmrg
40266e564dSmrgRun PROGRAMS ARGS to compile a file, generating dependencies
41266e564dSmrgas side-effects.
42266e564dSmrg
43266e564dSmrgEnvironment variables:
44266e564dSmrg  depmode     Dependency tracking mode.
45266e564dSmrg  source      Source file read by `PROGRAMS ARGS'.
46266e564dSmrg  object      Object file output by `PROGRAMS ARGS'.
47266e564dSmrg  DEPDIR      directory where to store dependencies.
48266e564dSmrg  depfile     Dependency file to output.
49266e564dSmrg  tmpdepfile  Temporary file to use when outputing dependencies.
50266e564dSmrg  libtool     Whether libtool is used (yes/no).
51266e564dSmrg
52266e564dSmrgReport bugs to <bug-automake@gnu.org>.
53266e564dSmrgEOF
54266e564dSmrg    exit $?
55266e564dSmrg    ;;
56266e564dSmrg  -v | --v*)
57266e564dSmrg    echo "depcomp $scriptversion"
58266e564dSmrg    exit $?
59266e564dSmrg    ;;
60266e564dSmrgesac
61266e564dSmrg
62266e564dSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
63266e564dSmrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
64266e564dSmrg  exit 1
65266e564dSmrgfi
66266e564dSmrg
67266e564dSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
68266e564dSmrgdepfile=${depfile-`echo "$object" |
69266e564dSmrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
70266e564dSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
71266e564dSmrg
72266e564dSmrgrm -f "$tmpdepfile"
73266e564dSmrg
74266e564dSmrg# Some modes work just like other modes, but use different flags.  We
75266e564dSmrg# parameterize here, but still list the modes in the big case below,
76266e564dSmrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
77266e564dSmrg# here, because this file can only contain one case statement.
78266e564dSmrgif test "$depmode" = hp; then
79266e564dSmrg  # HP compiler uses -M and no extra arg.
80266e564dSmrg  gccflag=-M
81266e564dSmrg  depmode=gcc
82266e564dSmrgfi
83266e564dSmrg
84266e564dSmrgif test "$depmode" = dashXmstdout; then
85266e564dSmrg   # This is just like dashmstdout with a different argument.
86266e564dSmrg   dashmflag=-xM
87266e564dSmrg   depmode=dashmstdout
88266e564dSmrgfi
89266e564dSmrg
90266e564dSmrgcase "$depmode" in
91266e564dSmrggcc3)
92266e564dSmrg## gcc 3 implements dependency tracking that does exactly what
93266e564dSmrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
94266e564dSmrg## it if -MD -MP comes after the -MF stuff.  Hmm.
95266e564dSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
96266e564dSmrg## the command line argument order; so add the flags where they
97266e564dSmrg## appear in depend2.am.  Note that the slowdown incurred here
98266e564dSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
99266e564dSmrg  for arg
100266e564dSmrg  do
101266e564dSmrg    case $arg in
102266e564dSmrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
103266e564dSmrg    *)  set fnord "$@" "$arg" ;;
104266e564dSmrg    esac
105266e564dSmrg    shift # fnord
106266e564dSmrg    shift # $arg
107266e564dSmrg  done
108266e564dSmrg  "$@"
109266e564dSmrg  stat=$?
110266e564dSmrg  if test $stat -eq 0; then :
111266e564dSmrg  else
112266e564dSmrg    rm -f "$tmpdepfile"
113266e564dSmrg    exit $stat
114266e564dSmrg  fi
115266e564dSmrg  mv "$tmpdepfile" "$depfile"
116266e564dSmrg  ;;
117266e564dSmrg
118266e564dSmrggcc)
119266e564dSmrg## There are various ways to get dependency output from gcc.  Here's
120266e564dSmrg## why we pick this rather obscure method:
121266e564dSmrg## - Don't want to use -MD because we'd like the dependencies to end
122266e564dSmrg##   up in a subdir.  Having to rename by hand is ugly.
123266e564dSmrg##   (We might end up doing this anyway to support other compilers.)
124266e564dSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
125266e564dSmrg##   -MM, not -M (despite what the docs say).
126266e564dSmrg## - Using -M directly means running the compiler twice (even worse
127266e564dSmrg##   than renaming).
128266e564dSmrg  if test -z "$gccflag"; then
129266e564dSmrg    gccflag=-MD,
130266e564dSmrg  fi
131266e564dSmrg  "$@" -Wp,"$gccflag$tmpdepfile"
132266e564dSmrg  stat=$?
133266e564dSmrg  if test $stat -eq 0; then :
134266e564dSmrg  else
135266e564dSmrg    rm -f "$tmpdepfile"
136266e564dSmrg    exit $stat
137266e564dSmrg  fi
138266e564dSmrg  rm -f "$depfile"
139266e564dSmrg  echo "$object : \\" > "$depfile"
140266e564dSmrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
141266e564dSmrg## The second -e expression handles DOS-style file names with drive letters.
142266e564dSmrg  sed -e 's/^[^:]*: / /' \
143266e564dSmrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
144266e564dSmrg## This next piece of magic avoids the `deleted header file' problem.
145266e564dSmrg## The problem is that when a header file which appears in a .P file
146266e564dSmrg## is deleted, the dependency causes make to die (because there is
147266e564dSmrg## typically no way to rebuild the header).  We avoid this by adding
148266e564dSmrg## dummy dependencies for each header file.  Too bad gcc doesn't do
149266e564dSmrg## this for us directly.
150266e564dSmrg  tr ' ' '
151266e564dSmrg' < "$tmpdepfile" |
152266e564dSmrg## Some versions of gcc put a space before the `:'.  On the theory
153266e564dSmrg## that the space means something, we add a space to the output as
154266e564dSmrg## well.
155266e564dSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
156266e564dSmrg## correctly.  Breaking it into two sed invocations is a workaround.
157266e564dSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
158266e564dSmrg  rm -f "$tmpdepfile"
159266e564dSmrg  ;;
160266e564dSmrg
161266e564dSmrghp)
162266e564dSmrg  # This case exists only to let depend.m4 do its work.  It works by
163266e564dSmrg  # looking at the text of this script.  This case will never be run,
164266e564dSmrg  # since it is checked for above.
165266e564dSmrg  exit 1
166266e564dSmrg  ;;
167266e564dSmrg
168266e564dSmrgsgi)
169266e564dSmrg  if test "$libtool" = yes; then
170266e564dSmrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
171266e564dSmrg  else
172266e564dSmrg    "$@" -MDupdate "$tmpdepfile"
173266e564dSmrg  fi
174266e564dSmrg  stat=$?
175266e564dSmrg  if test $stat -eq 0; then :
176266e564dSmrg  else
177266e564dSmrg    rm -f "$tmpdepfile"
178266e564dSmrg    exit $stat
179266e564dSmrg  fi
180266e564dSmrg  rm -f "$depfile"
181266e564dSmrg
182266e564dSmrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
183266e564dSmrg    echo "$object : \\" > "$depfile"
184266e564dSmrg
185266e564dSmrg    # Clip off the initial element (the dependent).  Don't try to be
186266e564dSmrg    # clever and replace this with sed code, as IRIX sed won't handle
187266e564dSmrg    # lines with more than a fixed number of characters (4096 in
188266e564dSmrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
189266e564dSmrg    # the IRIX cc adds comments like `#:fec' to the end of the
190266e564dSmrg    # dependency line.
191266e564dSmrg    tr ' ' '
192266e564dSmrg' < "$tmpdepfile" \
193266e564dSmrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
194266e564dSmrg    tr '
195266e564dSmrg' ' ' >> $depfile
196266e564dSmrg    echo >> $depfile
197266e564dSmrg
198266e564dSmrg    # The second pass generates a dummy entry for each header file.
199266e564dSmrg    tr ' ' '
200266e564dSmrg' < "$tmpdepfile" \
201266e564dSmrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
202266e564dSmrg   >> $depfile
203266e564dSmrg  else
204266e564dSmrg    # The sourcefile does not contain any dependencies, so just
205266e564dSmrg    # store a dummy comment line, to avoid errors with the Makefile
206266e564dSmrg    # "include basename.Plo" scheme.
207266e564dSmrg    echo "#dummy" > "$depfile"
208266e564dSmrg  fi
209266e564dSmrg  rm -f "$tmpdepfile"
210266e564dSmrg  ;;
211266e564dSmrg
212266e564dSmrgaix)
213266e564dSmrg  # The C for AIX Compiler uses -M and outputs the dependencies
214266e564dSmrg  # in a .u file.  In older versions, this file always lives in the
215266e564dSmrg  # current directory.  Also, the AIX compiler puts `$object:' at the
216266e564dSmrg  # start of each line; $object doesn't have directory information.
217266e564dSmrg  # Version 6 uses the directory in both cases.
218266e564dSmrg  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
219266e564dSmrg  tmpdepfile="$stripped.u"
220266e564dSmrg  if test "$libtool" = yes; then
221266e564dSmrg    "$@" -Wc,-M
222266e564dSmrg  else
223266e564dSmrg    "$@" -M
224266e564dSmrg  fi
225266e564dSmrg  stat=$?
226266e564dSmrg
227266e564dSmrg  if test -f "$tmpdepfile"; then :
228266e564dSmrg  else
229266e564dSmrg    stripped=`echo "$stripped" | sed 's,^.*/,,'`
230266e564dSmrg    tmpdepfile="$stripped.u"
231266e564dSmrg  fi
232266e564dSmrg
233266e564dSmrg  if test $stat -eq 0; then :
234266e564dSmrg  else
235266e564dSmrg    rm -f "$tmpdepfile"
236266e564dSmrg    exit $stat
237266e564dSmrg  fi
238266e564dSmrg
239266e564dSmrg  if test -f "$tmpdepfile"; then
240266e564dSmrg    outname="$stripped.o"
241266e564dSmrg    # Each line is of the form `foo.o: dependent.h'.
242266e564dSmrg    # Do two passes, one to just change these to
243266e564dSmrg    # `$object: dependent.h' and one to simply `dependent.h:'.
244266e564dSmrg    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
245266e564dSmrg    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
246266e564dSmrg  else
247266e564dSmrg    # The sourcefile does not contain any dependencies, so just
248266e564dSmrg    # store a dummy comment line, to avoid errors with the Makefile
249266e564dSmrg    # "include basename.Plo" scheme.
250266e564dSmrg    echo "#dummy" > "$depfile"
251266e564dSmrg  fi
252266e564dSmrg  rm -f "$tmpdepfile"
253266e564dSmrg  ;;
254266e564dSmrg
255266e564dSmrgicc)
256266e564dSmrg  # Intel's C compiler understands `-MD -MF file'.  However on
257266e564dSmrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
258266e564dSmrg  # ICC 7.0 will fill foo.d with something like
259266e564dSmrg  #    foo.o: sub/foo.c
260266e564dSmrg  #    foo.o: sub/foo.h
261266e564dSmrg  # which is wrong.  We want:
262266e564dSmrg  #    sub/foo.o: sub/foo.c
263266e564dSmrg  #    sub/foo.o: sub/foo.h
264266e564dSmrg  #    sub/foo.c:
265266e564dSmrg  #    sub/foo.h:
266266e564dSmrg  # ICC 7.1 will output
267266e564dSmrg  #    foo.o: sub/foo.c sub/foo.h
268266e564dSmrg  # and will wrap long lines using \ :
269266e564dSmrg  #    foo.o: sub/foo.c ... \
270266e564dSmrg  #     sub/foo.h ... \
271266e564dSmrg  #     ...
272266e564dSmrg
273266e564dSmrg  "$@" -MD -MF "$tmpdepfile"
274266e564dSmrg  stat=$?
275266e564dSmrg  if test $stat -eq 0; then :
276266e564dSmrg  else
277266e564dSmrg    rm -f "$tmpdepfile"
278266e564dSmrg    exit $stat
279266e564dSmrg  fi
280266e564dSmrg  rm -f "$depfile"
281266e564dSmrg  # Each line is of the form `foo.o: dependent.h',
282266e564dSmrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
283266e564dSmrg  # Do two passes, one to just change these to
284266e564dSmrg  # `$object: dependent.h' and one to simply `dependent.h:'.
285266e564dSmrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
286266e564dSmrg  # Some versions of the HPUX 10.20 sed can't process this invocation
287266e564dSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
288266e564dSmrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
289266e564dSmrg    sed -e 's/$/ :/' >> "$depfile"
290266e564dSmrg  rm -f "$tmpdepfile"
291266e564dSmrg  ;;
292266e564dSmrg
293266e564dSmrghp2)
294266e564dSmrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
295266e564dSmrg  # compilers, which have integrated preprocessors.  The correct option
296266e564dSmrg  # to use with these is +Maked; it writes dependencies to a file named
297266e564dSmrg  # 'foo.d', which lands next to the object file, wherever that
298266e564dSmrg  # happens to be.
299266e564dSmrg  # Much of this is similar to the tru64 case; see comments there.
300266e564dSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
301266e564dSmrg  test "x$dir" = "x$object" && dir=
302266e564dSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
303266e564dSmrg  if test "$libtool" = yes; then
304266e564dSmrg    tmpdepfile1=$dir$base.d
305266e564dSmrg    tmpdepfile2=$dir.libs/$base.d
306266e564dSmrg    "$@" -Wc,+Maked
307266e564dSmrg  else
308266e564dSmrg    tmpdepfile1=$dir$base.d
309266e564dSmrg    tmpdepfile2=$dir$base.d
310266e564dSmrg    "$@" +Maked
311266e564dSmrg  fi
312266e564dSmrg  stat=$?
313266e564dSmrg  if test $stat -eq 0; then :
314266e564dSmrg  else
315266e564dSmrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
316266e564dSmrg     exit $stat
317266e564dSmrg  fi
318266e564dSmrg
319266e564dSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
320266e564dSmrg  do
321266e564dSmrg    test -f "$tmpdepfile" && break
322266e564dSmrg  done
323266e564dSmrg  if test -f "$tmpdepfile"; then
324266e564dSmrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
325266e564dSmrg    # Add `dependent.h:' lines.
326266e564dSmrg    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
327266e564dSmrg  else
328266e564dSmrg    echo "#dummy" > "$depfile"
329266e564dSmrg  fi
330266e564dSmrg  rm -f "$tmpdepfile" "$tmpdepfile2"
331266e564dSmrg  ;;
332266e564dSmrg
333266e564dSmrgtru64)
334266e564dSmrg   # The Tru64 compiler uses -MD to generate dependencies as a side
335266e564dSmrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
336266e564dSmrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
337266e564dSmrg   # dependencies in `foo.d' instead, so we check for that too.
338266e564dSmrg   # Subdirectories are respected.
339266e564dSmrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
340266e564dSmrg   test "x$dir" = "x$object" && dir=
341266e564dSmrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
342266e564dSmrg
343266e564dSmrg   if test "$libtool" = yes; then
344266e564dSmrg      # With Tru64 cc, shared objects can also be used to make a
345266e564dSmrg      # static library.  This mechanism is used in libtool 1.4 series to
346266e564dSmrg      # handle both shared and static libraries in a single compilation.
347266e564dSmrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
348266e564dSmrg      #
349266e564dSmrg      # With libtool 1.5 this exception was removed, and libtool now
350266e564dSmrg      # generates 2 separate objects for the 2 libraries.  These two
351266e564dSmrg      # compilations output dependencies in $dir.libs/$base.o.d and
352266e564dSmrg      # in $dir$base.o.d.  We have to check for both files, because
353266e564dSmrg      # one of the two compilations can be disabled.  We should prefer
354266e564dSmrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
355266e564dSmrg      # automatically cleaned when .libs/ is deleted, while ignoring
356266e564dSmrg      # the former would cause a distcleancheck panic.
357266e564dSmrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
358266e564dSmrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
359266e564dSmrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
360266e564dSmrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
361266e564dSmrg      "$@" -Wc,-MD
362266e564dSmrg   else
363266e564dSmrg      tmpdepfile1=$dir$base.o.d
364266e564dSmrg      tmpdepfile2=$dir$base.d
365266e564dSmrg      tmpdepfile3=$dir$base.d
366266e564dSmrg      tmpdepfile4=$dir$base.d
367266e564dSmrg      "$@" -MD
368266e564dSmrg   fi
369266e564dSmrg
370266e564dSmrg   stat=$?
371266e564dSmrg   if test $stat -eq 0; then :
372266e564dSmrg   else
373266e564dSmrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
374266e564dSmrg      exit $stat
375266e564dSmrg   fi
376266e564dSmrg
377266e564dSmrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
378266e564dSmrg   do
379266e564dSmrg     test -f "$tmpdepfile" && break
380266e564dSmrg   done
381266e564dSmrg   if test -f "$tmpdepfile"; then
382266e564dSmrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
383266e564dSmrg      # That's a tab and a space in the [].
384266e564dSmrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
385266e564dSmrg   else
386266e564dSmrg      echo "#dummy" > "$depfile"
387266e564dSmrg   fi
388266e564dSmrg   rm -f "$tmpdepfile"
389266e564dSmrg   ;;
390266e564dSmrg
391266e564dSmrg#nosideeffect)
392266e564dSmrg  # This comment above is used by automake to tell side-effect
393266e564dSmrg  # dependency tracking mechanisms from slower ones.
394266e564dSmrg
395266e564dSmrgdashmstdout)
396266e564dSmrg  # Important note: in order to support this mode, a compiler *must*
397266e564dSmrg  # always write the preprocessed file to stdout, regardless of -o.
398266e564dSmrg  "$@" || exit $?
399266e564dSmrg
400266e564dSmrg  # Remove the call to Libtool.
401266e564dSmrg  if test "$libtool" = yes; then
402266e564dSmrg    while test $1 != '--mode=compile'; do
403266e564dSmrg      shift
404266e564dSmrg    done
405266e564dSmrg    shift
406266e564dSmrg  fi
407266e564dSmrg
408266e564dSmrg  # Remove `-o $object'.
409266e564dSmrg  IFS=" "
410266e564dSmrg  for arg
411266e564dSmrg  do
412266e564dSmrg    case $arg in
413266e564dSmrg    -o)
414266e564dSmrg      shift
415266e564dSmrg      ;;
416266e564dSmrg    $object)
417266e564dSmrg      shift
418266e564dSmrg      ;;
419266e564dSmrg    *)
420266e564dSmrg      set fnord "$@" "$arg"
421266e564dSmrg      shift # fnord
422266e564dSmrg      shift # $arg
423266e564dSmrg      ;;
424266e564dSmrg    esac
425266e564dSmrg  done
426266e564dSmrg
427266e564dSmrg  test -z "$dashmflag" && dashmflag=-M
428266e564dSmrg  # Require at least two characters before searching for `:'
429266e564dSmrg  # in the target name.  This is to cope with DOS-style filenames:
430266e564dSmrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
431266e564dSmrg  "$@" $dashmflag |
432266e564dSmrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
433266e564dSmrg  rm -f "$depfile"
434266e564dSmrg  cat < "$tmpdepfile" > "$depfile"
435266e564dSmrg  tr ' ' '
436266e564dSmrg' < "$tmpdepfile" | \
437266e564dSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
438266e564dSmrg## correctly.  Breaking it into two sed invocations is a workaround.
439266e564dSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
440266e564dSmrg  rm -f "$tmpdepfile"
441266e564dSmrg  ;;
442266e564dSmrg
443266e564dSmrgdashXmstdout)
444266e564dSmrg  # This case only exists to satisfy depend.m4.  It is never actually
445266e564dSmrg  # run, as this mode is specially recognized in the preamble.
446266e564dSmrg  exit 1
447266e564dSmrg  ;;
448266e564dSmrg
449266e564dSmrgmakedepend)
450266e564dSmrg  "$@" || exit $?
451266e564dSmrg  # Remove any Libtool call
452266e564dSmrg  if test "$libtool" = yes; then
453266e564dSmrg    while test $1 != '--mode=compile'; do
454266e564dSmrg      shift
455266e564dSmrg    done
456266e564dSmrg    shift
457266e564dSmrg  fi
458266e564dSmrg  # X makedepend
459266e564dSmrg  shift
460266e564dSmrg  cleared=no
461266e564dSmrg  for arg in "$@"; do
462266e564dSmrg    case $cleared in
463266e564dSmrg    no)
464266e564dSmrg      set ""; shift
465266e564dSmrg      cleared=yes ;;
466266e564dSmrg    esac
467266e564dSmrg    case "$arg" in
468266e564dSmrg    -D*|-I*)
469266e564dSmrg      set fnord "$@" "$arg"; shift ;;
470266e564dSmrg    # Strip any option that makedepend may not understand.  Remove
471266e564dSmrg    # the object too, otherwise makedepend will parse it as a source file.
472266e564dSmrg    -*|$object)
473266e564dSmrg      ;;
474266e564dSmrg    *)
475266e564dSmrg      set fnord "$@" "$arg"; shift ;;
476266e564dSmrg    esac
477266e564dSmrg  done
478266e564dSmrg  obj_suffix="`echo $object | sed 's/^.*\././'`"
479266e564dSmrg  touch "$tmpdepfile"
480266e564dSmrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
481266e564dSmrg  rm -f "$depfile"
482266e564dSmrg  cat < "$tmpdepfile" > "$depfile"
483266e564dSmrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
484266e564dSmrg' | \
485266e564dSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
486266e564dSmrg## correctly.  Breaking it into two sed invocations is a workaround.
487266e564dSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
488266e564dSmrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
489266e564dSmrg  ;;
490266e564dSmrg
491266e564dSmrgcpp)
492266e564dSmrg  # Important note: in order to support this mode, a compiler *must*
493266e564dSmrg  # always write the preprocessed file to stdout.
494266e564dSmrg  "$@" || exit $?
495266e564dSmrg
496266e564dSmrg  # Remove the call to Libtool.
497266e564dSmrg  if test "$libtool" = yes; then
498266e564dSmrg    while test $1 != '--mode=compile'; do
499266e564dSmrg      shift
500266e564dSmrg    done
501266e564dSmrg    shift
502266e564dSmrg  fi
503266e564dSmrg
504266e564dSmrg  # Remove `-o $object'.
505266e564dSmrg  IFS=" "
506266e564dSmrg  for arg
507266e564dSmrg  do
508266e564dSmrg    case $arg in
509266e564dSmrg    -o)
510266e564dSmrg      shift
511266e564dSmrg      ;;
512266e564dSmrg    $object)
513266e564dSmrg      shift
514266e564dSmrg      ;;
515266e564dSmrg    *)
516266e564dSmrg      set fnord "$@" "$arg"
517266e564dSmrg      shift # fnord
518266e564dSmrg      shift # $arg
519266e564dSmrg      ;;
520266e564dSmrg    esac
521266e564dSmrg  done
522266e564dSmrg
523266e564dSmrg  "$@" -E |
524266e564dSmrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
525266e564dSmrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
526266e564dSmrg    sed '$ s: \\$::' > "$tmpdepfile"
527266e564dSmrg  rm -f "$depfile"
528266e564dSmrg  echo "$object : \\" > "$depfile"
529266e564dSmrg  cat < "$tmpdepfile" >> "$depfile"
530266e564dSmrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
531266e564dSmrg  rm -f "$tmpdepfile"
532266e564dSmrg  ;;
533266e564dSmrg
534266e564dSmrgmsvisualcpp)
535266e564dSmrg  # Important note: in order to support this mode, a compiler *must*
536266e564dSmrg  # always write the preprocessed file to stdout, regardless of -o,
537266e564dSmrg  # because we must use -o when running libtool.
538266e564dSmrg  "$@" || exit $?
539266e564dSmrg  IFS=" "
540266e564dSmrg  for arg
541266e564dSmrg  do
542266e564dSmrg    case "$arg" in
543266e564dSmrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
544266e564dSmrg	set fnord "$@"
545266e564dSmrg	shift
546266e564dSmrg	shift
547266e564dSmrg	;;
548266e564dSmrg    *)
549266e564dSmrg	set fnord "$@" "$arg"
550266e564dSmrg	shift
551266e564dSmrg	shift
552266e564dSmrg	;;
553266e564dSmrg    esac
554266e564dSmrg  done
555266e564dSmrg  "$@" -E |
556266e564dSmrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
557266e564dSmrg  rm -f "$depfile"
558266e564dSmrg  echo "$object : \\" > "$depfile"
559266e564dSmrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
560266e564dSmrg  echo "	" >> "$depfile"
561266e564dSmrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
562266e564dSmrg  rm -f "$tmpdepfile"
563266e564dSmrg  ;;
564266e564dSmrg
565266e564dSmrgnone)
566266e564dSmrg  exec "$@"
567266e564dSmrg  ;;
568266e564dSmrg
569266e564dSmrg*)
570266e564dSmrg  echo "Unknown depmode $depmode" 1>&2
571266e564dSmrg  exit 1
572266e564dSmrg  ;;
573266e564dSmrgesac
574266e564dSmrg
575266e564dSmrgexit 0
576266e564dSmrg
577266e564dSmrg# Local Variables:
578266e564dSmrg# mode: shell-script
579266e564dSmrg# sh-indentation: 2
580266e564dSmrg# eval: (add-hook 'write-file-hooks 'time-stamp)
581266e564dSmrg# time-stamp-start: "scriptversion="
582266e564dSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
583266e564dSmrg# time-stamp-end: "$"
584266e564dSmrg# End:
585