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