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