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