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