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