depcomp revision eda3803b
1fe5e51b7Smrg#! /bin/sh
2fe5e51b7Smrg# depcomp - compile a program generating dependencies as side-effects
3fe5e51b7Smrg
4eda3803bSmrgscriptversion=2007-03-29.01
5fe5e51b7Smrg
6eda3803bSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 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.
218eda3803bSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
219eda3803bSmrg  test "x$dir" = "x$object" && dir=
220eda3803bSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
221fe5e51b7Smrg  if test "$libtool" = yes; then
222eda3803bSmrg    tmpdepfile1=$dir$base.u
223eda3803bSmrg    tmpdepfile2=$base.u
224eda3803bSmrg    tmpdepfile3=$dir.libs/$base.u
225fe5e51b7Smrg    "$@" -Wc,-M
226fe5e51b7Smrg  else
227eda3803bSmrg    tmpdepfile1=$dir$base.u
228eda3803bSmrg    tmpdepfile2=$dir$base.u
229eda3803bSmrg    tmpdepfile3=$dir$base.u
230fe5e51b7Smrg    "$@" -M
231fe5e51b7Smrg  fi
232fe5e51b7Smrg  stat=$?
233fe5e51b7Smrg
234fe5e51b7Smrg  if test $stat -eq 0; then :
235fe5e51b7Smrg  else
236eda3803bSmrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
237fe5e51b7Smrg    exit $stat
238fe5e51b7Smrg  fi
239fe5e51b7Smrg
240eda3803bSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
241eda3803bSmrg  do
242eda3803bSmrg    test -f "$tmpdepfile" && break
243eda3803bSmrg  done
244fe5e51b7Smrg  if test -f "$tmpdepfile"; then
245fe5e51b7Smrg    # Each line is of the form `foo.o: dependent.h'.
246fe5e51b7Smrg    # Do two passes, one to just change these to
247fe5e51b7Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
248eda3803bSmrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
249eda3803bSmrg    # That's a tab and a space in the [].
250eda3803bSmrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
251fe5e51b7Smrg  else
252fe5e51b7Smrg    # The sourcefile does not contain any dependencies, so just
253fe5e51b7Smrg    # store a dummy comment line, to avoid errors with the Makefile
254fe5e51b7Smrg    # "include basename.Plo" scheme.
255fe5e51b7Smrg    echo "#dummy" > "$depfile"
256fe5e51b7Smrg  fi
257fe5e51b7Smrg  rm -f "$tmpdepfile"
258fe5e51b7Smrg  ;;
259fe5e51b7Smrg
260fe5e51b7Smrgicc)
261fe5e51b7Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
262fe5e51b7Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
263fe5e51b7Smrg  # ICC 7.0 will fill foo.d with something like
264fe5e51b7Smrg  #    foo.o: sub/foo.c
265fe5e51b7Smrg  #    foo.o: sub/foo.h
266fe5e51b7Smrg  # which is wrong.  We want:
267fe5e51b7Smrg  #    sub/foo.o: sub/foo.c
268fe5e51b7Smrg  #    sub/foo.o: sub/foo.h
269fe5e51b7Smrg  #    sub/foo.c:
270fe5e51b7Smrg  #    sub/foo.h:
271fe5e51b7Smrg  # ICC 7.1 will output
272fe5e51b7Smrg  #    foo.o: sub/foo.c sub/foo.h
273fe5e51b7Smrg  # and will wrap long lines using \ :
274fe5e51b7Smrg  #    foo.o: sub/foo.c ... \
275fe5e51b7Smrg  #     sub/foo.h ... \
276fe5e51b7Smrg  #     ...
277fe5e51b7Smrg
278fe5e51b7Smrg  "$@" -MD -MF "$tmpdepfile"
279fe5e51b7Smrg  stat=$?
280fe5e51b7Smrg  if test $stat -eq 0; then :
281fe5e51b7Smrg  else
282fe5e51b7Smrg    rm -f "$tmpdepfile"
283fe5e51b7Smrg    exit $stat
284fe5e51b7Smrg  fi
285fe5e51b7Smrg  rm -f "$depfile"
286fe5e51b7Smrg  # Each line is of the form `foo.o: dependent.h',
287fe5e51b7Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
288fe5e51b7Smrg  # Do two passes, one to just change these to
289fe5e51b7Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
290fe5e51b7Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
291fe5e51b7Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
292fe5e51b7Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
293fe5e51b7Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
294fe5e51b7Smrg    sed -e 's/$/ :/' >> "$depfile"
295fe5e51b7Smrg  rm -f "$tmpdepfile"
296fe5e51b7Smrg  ;;
297fe5e51b7Smrg
298fe5e51b7Smrghp2)
299fe5e51b7Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
300fe5e51b7Smrg  # compilers, which have integrated preprocessors.  The correct option
301fe5e51b7Smrg  # to use with these is +Maked; it writes dependencies to a file named
302fe5e51b7Smrg  # 'foo.d', which lands next to the object file, wherever that
303fe5e51b7Smrg  # happens to be.
304fe5e51b7Smrg  # Much of this is similar to the tru64 case; see comments there.
305fe5e51b7Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
306fe5e51b7Smrg  test "x$dir" = "x$object" && dir=
307fe5e51b7Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
308fe5e51b7Smrg  if test "$libtool" = yes; then
309fe5e51b7Smrg    tmpdepfile1=$dir$base.d
310fe5e51b7Smrg    tmpdepfile2=$dir.libs/$base.d
311fe5e51b7Smrg    "$@" -Wc,+Maked
312fe5e51b7Smrg  else
313fe5e51b7Smrg    tmpdepfile1=$dir$base.d
314fe5e51b7Smrg    tmpdepfile2=$dir$base.d
315fe5e51b7Smrg    "$@" +Maked
316fe5e51b7Smrg  fi
317fe5e51b7Smrg  stat=$?
318fe5e51b7Smrg  if test $stat -eq 0; then :
319fe5e51b7Smrg  else
320fe5e51b7Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
321fe5e51b7Smrg     exit $stat
322fe5e51b7Smrg  fi
323fe5e51b7Smrg
324fe5e51b7Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
325fe5e51b7Smrg  do
326fe5e51b7Smrg    test -f "$tmpdepfile" && break
327fe5e51b7Smrg  done
328fe5e51b7Smrg  if test -f "$tmpdepfile"; then
329fe5e51b7Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
330fe5e51b7Smrg    # Add `dependent.h:' lines.
331fe5e51b7Smrg    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
332fe5e51b7Smrg  else
333fe5e51b7Smrg    echo "#dummy" > "$depfile"
334fe5e51b7Smrg  fi
335fe5e51b7Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
336fe5e51b7Smrg  ;;
337fe5e51b7Smrg
338fe5e51b7Smrgtru64)
339fe5e51b7Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
340fe5e51b7Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
341fe5e51b7Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
342fe5e51b7Smrg   # dependencies in `foo.d' instead, so we check for that too.
343fe5e51b7Smrg   # Subdirectories are respected.
344fe5e51b7Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
345fe5e51b7Smrg   test "x$dir" = "x$object" && dir=
346fe5e51b7Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
347fe5e51b7Smrg
348fe5e51b7Smrg   if test "$libtool" = yes; then
349fe5e51b7Smrg      # With Tru64 cc, shared objects can also be used to make a
350fe5e51b7Smrg      # static library.  This mechanism is used in libtool 1.4 series to
351fe5e51b7Smrg      # handle both shared and static libraries in a single compilation.
352fe5e51b7Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
353fe5e51b7Smrg      #
354fe5e51b7Smrg      # With libtool 1.5 this exception was removed, and libtool now
355fe5e51b7Smrg      # generates 2 separate objects for the 2 libraries.  These two
356fe5e51b7Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
357fe5e51b7Smrg      # in $dir$base.o.d.  We have to check for both files, because
358fe5e51b7Smrg      # one of the two compilations can be disabled.  We should prefer
359fe5e51b7Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
360fe5e51b7Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
361fe5e51b7Smrg      # the former would cause a distcleancheck panic.
362fe5e51b7Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
363fe5e51b7Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
364fe5e51b7Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
365fe5e51b7Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
366fe5e51b7Smrg      "$@" -Wc,-MD
367fe5e51b7Smrg   else
368fe5e51b7Smrg      tmpdepfile1=$dir$base.o.d
369fe5e51b7Smrg      tmpdepfile2=$dir$base.d
370fe5e51b7Smrg      tmpdepfile3=$dir$base.d
371fe5e51b7Smrg      tmpdepfile4=$dir$base.d
372fe5e51b7Smrg      "$@" -MD
373fe5e51b7Smrg   fi
374fe5e51b7Smrg
375fe5e51b7Smrg   stat=$?
376fe5e51b7Smrg   if test $stat -eq 0; then :
377fe5e51b7Smrg   else
378fe5e51b7Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
379fe5e51b7Smrg      exit $stat
380fe5e51b7Smrg   fi
381fe5e51b7Smrg
382fe5e51b7Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
383fe5e51b7Smrg   do
384fe5e51b7Smrg     test -f "$tmpdepfile" && break
385fe5e51b7Smrg   done
386fe5e51b7Smrg   if test -f "$tmpdepfile"; then
387fe5e51b7Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
388fe5e51b7Smrg      # That's a tab and a space in the [].
389fe5e51b7Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
390fe5e51b7Smrg   else
391fe5e51b7Smrg      echo "#dummy" > "$depfile"
392fe5e51b7Smrg   fi
393fe5e51b7Smrg   rm -f "$tmpdepfile"
394fe5e51b7Smrg   ;;
395fe5e51b7Smrg
396fe5e51b7Smrg#nosideeffect)
397fe5e51b7Smrg  # This comment above is used by automake to tell side-effect
398fe5e51b7Smrg  # dependency tracking mechanisms from slower ones.
399fe5e51b7Smrg
400fe5e51b7Smrgdashmstdout)
401fe5e51b7Smrg  # Important note: in order to support this mode, a compiler *must*
402fe5e51b7Smrg  # always write the preprocessed file to stdout, regardless of -o.
403fe5e51b7Smrg  "$@" || exit $?
404fe5e51b7Smrg
405fe5e51b7Smrg  # Remove the call to Libtool.
406fe5e51b7Smrg  if test "$libtool" = yes; then
407fe5e51b7Smrg    while test $1 != '--mode=compile'; do
408fe5e51b7Smrg      shift
409fe5e51b7Smrg    done
410fe5e51b7Smrg    shift
411fe5e51b7Smrg  fi
412fe5e51b7Smrg
413fe5e51b7Smrg  # Remove `-o $object'.
414fe5e51b7Smrg  IFS=" "
415fe5e51b7Smrg  for arg
416fe5e51b7Smrg  do
417fe5e51b7Smrg    case $arg in
418fe5e51b7Smrg    -o)
419fe5e51b7Smrg      shift
420fe5e51b7Smrg      ;;
421fe5e51b7Smrg    $object)
422fe5e51b7Smrg      shift
423fe5e51b7Smrg      ;;
424fe5e51b7Smrg    *)
425fe5e51b7Smrg      set fnord "$@" "$arg"
426fe5e51b7Smrg      shift # fnord
427fe5e51b7Smrg      shift # $arg
428fe5e51b7Smrg      ;;
429fe5e51b7Smrg    esac
430fe5e51b7Smrg  done
431fe5e51b7Smrg
432fe5e51b7Smrg  test -z "$dashmflag" && dashmflag=-M
433fe5e51b7Smrg  # Require at least two characters before searching for `:'
434fe5e51b7Smrg  # in the target name.  This is to cope with DOS-style filenames:
435fe5e51b7Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
436fe5e51b7Smrg  "$@" $dashmflag |
437fe5e51b7Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
438fe5e51b7Smrg  rm -f "$depfile"
439fe5e51b7Smrg  cat < "$tmpdepfile" > "$depfile"
440fe5e51b7Smrg  tr ' ' '
441fe5e51b7Smrg' < "$tmpdepfile" | \
442fe5e51b7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
443fe5e51b7Smrg## correctly.  Breaking it into two sed invocations is a workaround.
444fe5e51b7Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
445fe5e51b7Smrg  rm -f "$tmpdepfile"
446fe5e51b7Smrg  ;;
447fe5e51b7Smrg
448fe5e51b7SmrgdashXmstdout)
449fe5e51b7Smrg  # This case only exists to satisfy depend.m4.  It is never actually
450fe5e51b7Smrg  # run, as this mode is specially recognized in the preamble.
451fe5e51b7Smrg  exit 1
452fe5e51b7Smrg  ;;
453fe5e51b7Smrg
454fe5e51b7Smrgmakedepend)
455fe5e51b7Smrg  "$@" || exit $?
456fe5e51b7Smrg  # Remove any Libtool call
457fe5e51b7Smrg  if test "$libtool" = yes; then
458fe5e51b7Smrg    while test $1 != '--mode=compile'; do
459fe5e51b7Smrg      shift
460fe5e51b7Smrg    done
461fe5e51b7Smrg    shift
462fe5e51b7Smrg  fi
463fe5e51b7Smrg  # X makedepend
464fe5e51b7Smrg  shift
465fe5e51b7Smrg  cleared=no
466fe5e51b7Smrg  for arg in "$@"; do
467fe5e51b7Smrg    case $cleared in
468fe5e51b7Smrg    no)
469fe5e51b7Smrg      set ""; shift
470fe5e51b7Smrg      cleared=yes ;;
471fe5e51b7Smrg    esac
472fe5e51b7Smrg    case "$arg" in
473fe5e51b7Smrg    -D*|-I*)
474fe5e51b7Smrg      set fnord "$@" "$arg"; shift ;;
475fe5e51b7Smrg    # Strip any option that makedepend may not understand.  Remove
476fe5e51b7Smrg    # the object too, otherwise makedepend will parse it as a source file.
477fe5e51b7Smrg    -*|$object)
478fe5e51b7Smrg      ;;
479fe5e51b7Smrg    *)
480fe5e51b7Smrg      set fnord "$@" "$arg"; shift ;;
481fe5e51b7Smrg    esac
482fe5e51b7Smrg  done
483fe5e51b7Smrg  obj_suffix="`echo $object | sed 's/^.*\././'`"
484fe5e51b7Smrg  touch "$tmpdepfile"
485fe5e51b7Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
486fe5e51b7Smrg  rm -f "$depfile"
487fe5e51b7Smrg  cat < "$tmpdepfile" > "$depfile"
488fe5e51b7Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
489fe5e51b7Smrg' | \
490fe5e51b7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
491fe5e51b7Smrg## correctly.  Breaking it into two sed invocations is a workaround.
492fe5e51b7Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
493fe5e51b7Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
494fe5e51b7Smrg  ;;
495fe5e51b7Smrg
496fe5e51b7Smrgcpp)
497fe5e51b7Smrg  # Important note: in order to support this mode, a compiler *must*
498fe5e51b7Smrg  # always write the preprocessed file to stdout.
499fe5e51b7Smrg  "$@" || exit $?
500fe5e51b7Smrg
501fe5e51b7Smrg  # Remove the call to Libtool.
502fe5e51b7Smrg  if test "$libtool" = yes; then
503fe5e51b7Smrg    while test $1 != '--mode=compile'; do
504fe5e51b7Smrg      shift
505fe5e51b7Smrg    done
506fe5e51b7Smrg    shift
507fe5e51b7Smrg  fi
508fe5e51b7Smrg
509fe5e51b7Smrg  # Remove `-o $object'.
510fe5e51b7Smrg  IFS=" "
511fe5e51b7Smrg  for arg
512fe5e51b7Smrg  do
513fe5e51b7Smrg    case $arg in
514fe5e51b7Smrg    -o)
515fe5e51b7Smrg      shift
516fe5e51b7Smrg      ;;
517fe5e51b7Smrg    $object)
518fe5e51b7Smrg      shift
519fe5e51b7Smrg      ;;
520fe5e51b7Smrg    *)
521fe5e51b7Smrg      set fnord "$@" "$arg"
522fe5e51b7Smrg      shift # fnord
523fe5e51b7Smrg      shift # $arg
524fe5e51b7Smrg      ;;
525fe5e51b7Smrg    esac
526fe5e51b7Smrg  done
527fe5e51b7Smrg
528fe5e51b7Smrg  "$@" -E |
529fe5e51b7Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
530fe5e51b7Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
531fe5e51b7Smrg    sed '$ s: \\$::' > "$tmpdepfile"
532fe5e51b7Smrg  rm -f "$depfile"
533fe5e51b7Smrg  echo "$object : \\" > "$depfile"
534fe5e51b7Smrg  cat < "$tmpdepfile" >> "$depfile"
535fe5e51b7Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
536fe5e51b7Smrg  rm -f "$tmpdepfile"
537fe5e51b7Smrg  ;;
538fe5e51b7Smrg
539fe5e51b7Smrgmsvisualcpp)
540fe5e51b7Smrg  # Important note: in order to support this mode, a compiler *must*
541fe5e51b7Smrg  # always write the preprocessed file to stdout, regardless of -o,
542fe5e51b7Smrg  # because we must use -o when running libtool.
543fe5e51b7Smrg  "$@" || exit $?
544fe5e51b7Smrg  IFS=" "
545fe5e51b7Smrg  for arg
546fe5e51b7Smrg  do
547fe5e51b7Smrg    case "$arg" in
548fe5e51b7Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
549fe5e51b7Smrg	set fnord "$@"
550fe5e51b7Smrg	shift
551fe5e51b7Smrg	shift
552fe5e51b7Smrg	;;
553fe5e51b7Smrg    *)
554fe5e51b7Smrg	set fnord "$@" "$arg"
555fe5e51b7Smrg	shift
556fe5e51b7Smrg	shift
557fe5e51b7Smrg	;;
558fe5e51b7Smrg    esac
559fe5e51b7Smrg  done
560fe5e51b7Smrg  "$@" -E |
561fe5e51b7Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
562fe5e51b7Smrg  rm -f "$depfile"
563fe5e51b7Smrg  echo "$object : \\" > "$depfile"
564fe5e51b7Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
565fe5e51b7Smrg  echo "	" >> "$depfile"
566fe5e51b7Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
567fe5e51b7Smrg  rm -f "$tmpdepfile"
568fe5e51b7Smrg  ;;
569fe5e51b7Smrg
570fe5e51b7Smrgnone)
571fe5e51b7Smrg  exec "$@"
572fe5e51b7Smrg  ;;
573fe5e51b7Smrg
574fe5e51b7Smrg*)
575fe5e51b7Smrg  echo "Unknown depmode $depmode" 1>&2
576fe5e51b7Smrg  exit 1
577fe5e51b7Smrg  ;;
578fe5e51b7Smrgesac
579fe5e51b7Smrg
580fe5e51b7Smrgexit 0
581fe5e51b7Smrg
582fe5e51b7Smrg# Local Variables:
583fe5e51b7Smrg# mode: shell-script
584fe5e51b7Smrg# sh-indentation: 2
585fe5e51b7Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
586fe5e51b7Smrg# time-stamp-start: "scriptversion="
587fe5e51b7Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
588fe5e51b7Smrg# time-stamp-end: "$"
589fe5e51b7Smrg# End:
590