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