depcomp revision 3f6d0e1d
1692f60a7Smrg#! /bin/sh
2692f60a7Smrg# depcomp - compile a program generating dependencies as side-effects
3692f60a7Smrg
43f6d0e1dSmrgscriptversion=2011-12-04.11; # UTC
5692f60a7Smrg
63f6d0e1dSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
73f6d0e1dSmrg# 2011 Free Software Foundation, Inc.
8692f60a7Smrg
9692f60a7Smrg# This program is free software; you can redistribute it and/or modify
10692f60a7Smrg# it under the terms of the GNU General Public License as published by
11692f60a7Smrg# the Free Software Foundation; either version 2, or (at your option)
12692f60a7Smrg# any later version.
13692f60a7Smrg
14692f60a7Smrg# This program is distributed in the hope that it will be useful,
15692f60a7Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
16692f60a7Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17692f60a7Smrg# GNU General Public License for more details.
18692f60a7Smrg
19692f60a7Smrg# You should have received a copy of the GNU General Public License
203f6d0e1dSmrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
21692f60a7Smrg
22692f60a7Smrg# As a special exception to the GNU General Public License, if you
23692f60a7Smrg# distribute this file as part of a program that contains a
24692f60a7Smrg# configuration script generated by Autoconf, you may include it under
25692f60a7Smrg# the same distribution terms that you use for the rest of that program.
26692f60a7Smrg
27692f60a7Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
28692f60a7Smrg
29692f60a7Smrgcase $1 in
30692f60a7Smrg  '')
31692f60a7Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
32692f60a7Smrg     exit 1;
33692f60a7Smrg     ;;
34692f60a7Smrg  -h | --h*)
35692f60a7Smrg    cat <<\EOF
36692f60a7SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
37692f60a7Smrg
38692f60a7SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
39692f60a7Smrgas side-effects.
40692f60a7Smrg
41692f60a7SmrgEnvironment variables:
42692f60a7Smrg  depmode     Dependency tracking mode.
43692f60a7Smrg  source      Source file read by `PROGRAMS ARGS'.
44692f60a7Smrg  object      Object file output by `PROGRAMS ARGS'.
45692f60a7Smrg  DEPDIR      directory where to store dependencies.
46692f60a7Smrg  depfile     Dependency file to output.
473f6d0e1dSmrg  tmpdepfile  Temporary file to use when outputting dependencies.
48692f60a7Smrg  libtool     Whether libtool is used (yes/no).
49692f60a7Smrg
50692f60a7SmrgReport bugs to <bug-automake@gnu.org>.
51692f60a7SmrgEOF
52692f60a7Smrg    exit $?
53692f60a7Smrg    ;;
54692f60a7Smrg  -v | --v*)
55692f60a7Smrg    echo "depcomp $scriptversion"
56692f60a7Smrg    exit $?
57692f60a7Smrg    ;;
58692f60a7Smrgesac
59692f60a7Smrg
60692f60a7Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
61692f60a7Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
62692f60a7Smrg  exit 1
63692f60a7Smrgfi
64692f60a7Smrg
65692f60a7Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
66692f60a7Smrgdepfile=${depfile-`echo "$object" |
67692f60a7Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
68692f60a7Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
69692f60a7Smrg
70692f60a7Smrgrm -f "$tmpdepfile"
71692f60a7Smrg
72692f60a7Smrg# Some modes work just like other modes, but use different flags.  We
73692f60a7Smrg# parameterize here, but still list the modes in the big case below,
74692f60a7Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
75692f60a7Smrg# here, because this file can only contain one case statement.
76692f60a7Smrgif test "$depmode" = hp; then
77692f60a7Smrg  # HP compiler uses -M and no extra arg.
78692f60a7Smrg  gccflag=-M
79692f60a7Smrg  depmode=gcc
80692f60a7Smrgfi
81692f60a7Smrg
82692f60a7Smrgif test "$depmode" = dashXmstdout; then
83692f60a7Smrg   # This is just like dashmstdout with a different argument.
84692f60a7Smrg   dashmflag=-xM
85692f60a7Smrg   depmode=dashmstdout
86692f60a7Smrgfi
87692f60a7Smrg
883f6d0e1dSmrgcygpath_u="cygpath -u -f -"
893f6d0e1dSmrgif test "$depmode" = msvcmsys; then
903f6d0e1dSmrg   # This is just like msvisualcpp but w/o cygpath translation.
913f6d0e1dSmrg   # Just convert the backslash-escaped backslashes to single forward
923f6d0e1dSmrg   # slashes to satisfy depend.m4
933f6d0e1dSmrg   cygpath_u='sed s,\\\\,/,g'
943f6d0e1dSmrg   depmode=msvisualcpp
953f6d0e1dSmrgfi
963f6d0e1dSmrg
973f6d0e1dSmrgif test "$depmode" = msvc7msys; then
983f6d0e1dSmrg   # This is just like msvc7 but w/o cygpath translation.
993f6d0e1dSmrg   # Just convert the backslash-escaped backslashes to single forward
1003f6d0e1dSmrg   # slashes to satisfy depend.m4
1013f6d0e1dSmrg   cygpath_u='sed s,\\\\,/,g'
1023f6d0e1dSmrg   depmode=msvc7
1033f6d0e1dSmrgfi
1043f6d0e1dSmrg
105692f60a7Smrgcase "$depmode" in
106692f60a7Smrggcc3)
107692f60a7Smrg## gcc 3 implements dependency tracking that does exactly what
108692f60a7Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
109692f60a7Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
11054569438Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
11154569438Smrg## the command line argument order; so add the flags where they
11254569438Smrg## appear in depend2.am.  Note that the slowdown incurred here
11354569438Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
11454569438Smrg  for arg
11554569438Smrg  do
11654569438Smrg    case $arg in
11754569438Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
11854569438Smrg    *)  set fnord "$@" "$arg" ;;
11954569438Smrg    esac
12054569438Smrg    shift # fnord
12154569438Smrg    shift # $arg
12254569438Smrg  done
12354569438Smrg  "$@"
124692f60a7Smrg  stat=$?
125692f60a7Smrg  if test $stat -eq 0; then :
126692f60a7Smrg  else
127692f60a7Smrg    rm -f "$tmpdepfile"
128692f60a7Smrg    exit $stat
129692f60a7Smrg  fi
130692f60a7Smrg  mv "$tmpdepfile" "$depfile"
131692f60a7Smrg  ;;
132692f60a7Smrg
133692f60a7Smrggcc)
134692f60a7Smrg## There are various ways to get dependency output from gcc.  Here's
135692f60a7Smrg## why we pick this rather obscure method:
136692f60a7Smrg## - Don't want to use -MD because we'd like the dependencies to end
137692f60a7Smrg##   up in a subdir.  Having to rename by hand is ugly.
138692f60a7Smrg##   (We might end up doing this anyway to support other compilers.)
139692f60a7Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
140692f60a7Smrg##   -MM, not -M (despite what the docs say).
141692f60a7Smrg## - Using -M directly means running the compiler twice (even worse
142692f60a7Smrg##   than renaming).
143692f60a7Smrg  if test -z "$gccflag"; then
144692f60a7Smrg    gccflag=-MD,
145692f60a7Smrg  fi
146692f60a7Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
147692f60a7Smrg  stat=$?
148692f60a7Smrg  if test $stat -eq 0; then :
149692f60a7Smrg  else
150692f60a7Smrg    rm -f "$tmpdepfile"
151692f60a7Smrg    exit $stat
152692f60a7Smrg  fi
153692f60a7Smrg  rm -f "$depfile"
154692f60a7Smrg  echo "$object : \\" > "$depfile"
155692f60a7Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
156692f60a7Smrg## The second -e expression handles DOS-style file names with drive letters.
157692f60a7Smrg  sed -e 's/^[^:]*: / /' \
158692f60a7Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
159692f60a7Smrg## This next piece of magic avoids the `deleted header file' problem.
160692f60a7Smrg## The problem is that when a header file which appears in a .P file
161692f60a7Smrg## is deleted, the dependency causes make to die (because there is
162692f60a7Smrg## typically no way to rebuild the header).  We avoid this by adding
163692f60a7Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
164692f60a7Smrg## this for us directly.
165692f60a7Smrg  tr ' ' '
166692f60a7Smrg' < "$tmpdepfile" |
167692f60a7Smrg## Some versions of gcc put a space before the `:'.  On the theory
168692f60a7Smrg## that the space means something, we add a space to the output as
1693f6d0e1dSmrg## well.  hp depmode also adds that space, but also prefixes the VPATH
1703f6d0e1dSmrg## to the object.  Take care to not repeat it in the output.
171692f60a7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
172692f60a7Smrg## correctly.  Breaking it into two sed invocations is a workaround.
1733f6d0e1dSmrg    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
1743f6d0e1dSmrg      | sed -e 's/$/ :/' >> "$depfile"
175692f60a7Smrg  rm -f "$tmpdepfile"
176692f60a7Smrg  ;;
177692f60a7Smrg
178692f60a7Smrghp)
179692f60a7Smrg  # This case exists only to let depend.m4 do its work.  It works by
180692f60a7Smrg  # looking at the text of this script.  This case will never be run,
181692f60a7Smrg  # since it is checked for above.
182692f60a7Smrg  exit 1
183692f60a7Smrg  ;;
184692f60a7Smrg
185692f60a7Smrgsgi)
186692f60a7Smrg  if test "$libtool" = yes; then
187692f60a7Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
188692f60a7Smrg  else
189692f60a7Smrg    "$@" -MDupdate "$tmpdepfile"
190692f60a7Smrg  fi
191692f60a7Smrg  stat=$?
192692f60a7Smrg  if test $stat -eq 0; then :
193692f60a7Smrg  else
194692f60a7Smrg    rm -f "$tmpdepfile"
195692f60a7Smrg    exit $stat
196692f60a7Smrg  fi
197692f60a7Smrg  rm -f "$depfile"
198692f60a7Smrg
199692f60a7Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
200692f60a7Smrg    echo "$object : \\" > "$depfile"
201692f60a7Smrg
202692f60a7Smrg    # Clip off the initial element (the dependent).  Don't try to be
203692f60a7Smrg    # clever and replace this with sed code, as IRIX sed won't handle
204692f60a7Smrg    # lines with more than a fixed number of characters (4096 in
205692f60a7Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
206692f60a7Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
207692f60a7Smrg    # dependency line.
208692f60a7Smrg    tr ' ' '
209692f60a7Smrg' < "$tmpdepfile" \
210692f60a7Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
211692f60a7Smrg    tr '
2123f6d0e1dSmrg' ' ' >> "$depfile"
2133f6d0e1dSmrg    echo >> "$depfile"
214692f60a7Smrg
215692f60a7Smrg    # The second pass generates a dummy entry for each header file.
216692f60a7Smrg    tr ' ' '
217692f60a7Smrg' < "$tmpdepfile" \
218692f60a7Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
2193f6d0e1dSmrg   >> "$depfile"
220692f60a7Smrg  else
221692f60a7Smrg    # The sourcefile does not contain any dependencies, so just
222692f60a7Smrg    # store a dummy comment line, to avoid errors with the Makefile
223692f60a7Smrg    # "include basename.Plo" scheme.
224692f60a7Smrg    echo "#dummy" > "$depfile"
225692f60a7Smrg  fi
226692f60a7Smrg  rm -f "$tmpdepfile"
227692f60a7Smrg  ;;
228692f60a7Smrg
229692f60a7Smrgaix)
230692f60a7Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
231692f60a7Smrg  # in a .u file.  In older versions, this file always lives in the
232692f60a7Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
233692f60a7Smrg  # start of each line; $object doesn't have directory information.
234692f60a7Smrg  # Version 6 uses the directory in both cases.
23554569438Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
23654569438Smrg  test "x$dir" = "x$object" && dir=
23754569438Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
238692f60a7Smrg  if test "$libtool" = yes; then
23954569438Smrg    tmpdepfile1=$dir$base.u
24054569438Smrg    tmpdepfile2=$base.u
24154569438Smrg    tmpdepfile3=$dir.libs/$base.u
242692f60a7Smrg    "$@" -Wc,-M
243692f60a7Smrg  else
24454569438Smrg    tmpdepfile1=$dir$base.u
24554569438Smrg    tmpdepfile2=$dir$base.u
24654569438Smrg    tmpdepfile3=$dir$base.u
247692f60a7Smrg    "$@" -M
248692f60a7Smrg  fi
249692f60a7Smrg  stat=$?
250692f60a7Smrg
251692f60a7Smrg  if test $stat -eq 0; then :
252692f60a7Smrg  else
25354569438Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
254692f60a7Smrg    exit $stat
255692f60a7Smrg  fi
256692f60a7Smrg
25754569438Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
25854569438Smrg  do
25954569438Smrg    test -f "$tmpdepfile" && break
26054569438Smrg  done
261692f60a7Smrg  if test -f "$tmpdepfile"; then
262692f60a7Smrg    # Each line is of the form `foo.o: dependent.h'.
263692f60a7Smrg    # Do two passes, one to just change these to
264692f60a7Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
26554569438Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
26654569438Smrg    # That's a tab and a space in the [].
26754569438Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
268692f60a7Smrg  else
269692f60a7Smrg    # The sourcefile does not contain any dependencies, so just
270692f60a7Smrg    # store a dummy comment line, to avoid errors with the Makefile
271692f60a7Smrg    # "include basename.Plo" scheme.
272692f60a7Smrg    echo "#dummy" > "$depfile"
273692f60a7Smrg  fi
274692f60a7Smrg  rm -f "$tmpdepfile"
275692f60a7Smrg  ;;
276692f60a7Smrg
277692f60a7Smrgicc)
278692f60a7Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
279692f60a7Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
280692f60a7Smrg  # ICC 7.0 will fill foo.d with something like
281692f60a7Smrg  #    foo.o: sub/foo.c
282692f60a7Smrg  #    foo.o: sub/foo.h
283692f60a7Smrg  # which is wrong.  We want:
284692f60a7Smrg  #    sub/foo.o: sub/foo.c
285692f60a7Smrg  #    sub/foo.o: sub/foo.h
286692f60a7Smrg  #    sub/foo.c:
287692f60a7Smrg  #    sub/foo.h:
288692f60a7Smrg  # ICC 7.1 will output
289692f60a7Smrg  #    foo.o: sub/foo.c sub/foo.h
290692f60a7Smrg  # and will wrap long lines using \ :
291692f60a7Smrg  #    foo.o: sub/foo.c ... \
292692f60a7Smrg  #     sub/foo.h ... \
293692f60a7Smrg  #     ...
294692f60a7Smrg
295692f60a7Smrg  "$@" -MD -MF "$tmpdepfile"
296692f60a7Smrg  stat=$?
297692f60a7Smrg  if test $stat -eq 0; then :
298692f60a7Smrg  else
299692f60a7Smrg    rm -f "$tmpdepfile"
300692f60a7Smrg    exit $stat
301692f60a7Smrg  fi
302692f60a7Smrg  rm -f "$depfile"
303692f60a7Smrg  # Each line is of the form `foo.o: dependent.h',
304692f60a7Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
305692f60a7Smrg  # Do two passes, one to just change these to
306692f60a7Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
307692f60a7Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
308692f60a7Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
309692f60a7Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
310692f60a7Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
311692f60a7Smrg    sed -e 's/$/ :/' >> "$depfile"
312692f60a7Smrg  rm -f "$tmpdepfile"
313692f60a7Smrg  ;;
314692f60a7Smrg
31554569438Smrghp2)
31654569438Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
31754569438Smrg  # compilers, which have integrated preprocessors.  The correct option
31854569438Smrg  # to use with these is +Maked; it writes dependencies to a file named
31954569438Smrg  # 'foo.d', which lands next to the object file, wherever that
32054569438Smrg  # happens to be.
32154569438Smrg  # Much of this is similar to the tru64 case; see comments there.
32254569438Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
32354569438Smrg  test "x$dir" = "x$object" && dir=
32454569438Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
32554569438Smrg  if test "$libtool" = yes; then
32654569438Smrg    tmpdepfile1=$dir$base.d
32754569438Smrg    tmpdepfile2=$dir.libs/$base.d
32854569438Smrg    "$@" -Wc,+Maked
32954569438Smrg  else
33054569438Smrg    tmpdepfile1=$dir$base.d
33154569438Smrg    tmpdepfile2=$dir$base.d
33254569438Smrg    "$@" +Maked
33354569438Smrg  fi
33454569438Smrg  stat=$?
33554569438Smrg  if test $stat -eq 0; then :
33654569438Smrg  else
33754569438Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
33854569438Smrg     exit $stat
33954569438Smrg  fi
34054569438Smrg
34154569438Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
34254569438Smrg  do
34354569438Smrg    test -f "$tmpdepfile" && break
34454569438Smrg  done
34554569438Smrg  if test -f "$tmpdepfile"; then
34654569438Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
34754569438Smrg    # Add `dependent.h:' lines.
3483f6d0e1dSmrg    sed -ne '2,${
3493f6d0e1dSmrg	       s/^ *//
3503f6d0e1dSmrg	       s/ \\*$//
3513f6d0e1dSmrg	       s/$/:/
3523f6d0e1dSmrg	       p
3533f6d0e1dSmrg	     }' "$tmpdepfile" >> "$depfile"
35454569438Smrg  else
35554569438Smrg    echo "#dummy" > "$depfile"
35654569438Smrg  fi
35754569438Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
35854569438Smrg  ;;
35954569438Smrg
360692f60a7Smrgtru64)
361692f60a7Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
362692f60a7Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
363692f60a7Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
364692f60a7Smrg   # dependencies in `foo.d' instead, so we check for that too.
365692f60a7Smrg   # Subdirectories are respected.
366692f60a7Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
367692f60a7Smrg   test "x$dir" = "x$object" && dir=
368692f60a7Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
369692f60a7Smrg
370692f60a7Smrg   if test "$libtool" = yes; then
371692f60a7Smrg      # With Tru64 cc, shared objects can also be used to make a
37254569438Smrg      # static library.  This mechanism is used in libtool 1.4 series to
373692f60a7Smrg      # handle both shared and static libraries in a single compilation.
374692f60a7Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
375692f60a7Smrg      #
376692f60a7Smrg      # With libtool 1.5 this exception was removed, and libtool now
377692f60a7Smrg      # generates 2 separate objects for the 2 libraries.  These two
37854569438Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
379692f60a7Smrg      # in $dir$base.o.d.  We have to check for both files, because
380692f60a7Smrg      # one of the two compilations can be disabled.  We should prefer
381692f60a7Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
382692f60a7Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
383692f60a7Smrg      # the former would cause a distcleancheck panic.
384692f60a7Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
385692f60a7Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
386692f60a7Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
387692f60a7Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
388692f60a7Smrg      "$@" -Wc,-MD
389692f60a7Smrg   else
390692f60a7Smrg      tmpdepfile1=$dir$base.o.d
391692f60a7Smrg      tmpdepfile2=$dir$base.d
392692f60a7Smrg      tmpdepfile3=$dir$base.d
393692f60a7Smrg      tmpdepfile4=$dir$base.d
394692f60a7Smrg      "$@" -MD
395692f60a7Smrg   fi
396692f60a7Smrg
397692f60a7Smrg   stat=$?
398692f60a7Smrg   if test $stat -eq 0; then :
399692f60a7Smrg   else
400692f60a7Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
401692f60a7Smrg      exit $stat
402692f60a7Smrg   fi
403692f60a7Smrg
404692f60a7Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
405692f60a7Smrg   do
406692f60a7Smrg     test -f "$tmpdepfile" && break
407692f60a7Smrg   done
408692f60a7Smrg   if test -f "$tmpdepfile"; then
409692f60a7Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
410692f60a7Smrg      # That's a tab and a space in the [].
411692f60a7Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
412692f60a7Smrg   else
413692f60a7Smrg      echo "#dummy" > "$depfile"
414692f60a7Smrg   fi
415692f60a7Smrg   rm -f "$tmpdepfile"
416692f60a7Smrg   ;;
417692f60a7Smrg
4183f6d0e1dSmrgmsvc7)
4193f6d0e1dSmrg  if test "$libtool" = yes; then
4203f6d0e1dSmrg    showIncludes=-Wc,-showIncludes
4213f6d0e1dSmrg  else
4223f6d0e1dSmrg    showIncludes=-showIncludes
4233f6d0e1dSmrg  fi
4243f6d0e1dSmrg  "$@" $showIncludes > "$tmpdepfile"
4253f6d0e1dSmrg  stat=$?
4263f6d0e1dSmrg  grep -v '^Note: including file: ' "$tmpdepfile"
4273f6d0e1dSmrg  if test "$stat" = 0; then :
4283f6d0e1dSmrg  else
4293f6d0e1dSmrg    rm -f "$tmpdepfile"
4303f6d0e1dSmrg    exit $stat
4313f6d0e1dSmrg  fi
4323f6d0e1dSmrg  rm -f "$depfile"
4333f6d0e1dSmrg  echo "$object : \\" > "$depfile"
4343f6d0e1dSmrg  # The first sed program below extracts the file names and escapes
4353f6d0e1dSmrg  # backslashes for cygpath.  The second sed program outputs the file
4363f6d0e1dSmrg  # name when reading, but also accumulates all include files in the
4373f6d0e1dSmrg  # hold buffer in order to output them again at the end.  This only
4383f6d0e1dSmrg  # works with sed implementations that can handle large buffers.
4393f6d0e1dSmrg  sed < "$tmpdepfile" -n '
4403f6d0e1dSmrg/^Note: including file:  *\(.*\)/ {
4413f6d0e1dSmrg  s//\1/
4423f6d0e1dSmrg  s/\\/\\\\/g
4433f6d0e1dSmrg  p
4443f6d0e1dSmrg}' | $cygpath_u | sort -u | sed -n '
4453f6d0e1dSmrgs/ /\\ /g
4463f6d0e1dSmrgs/\(.*\)/	\1 \\/p
4473f6d0e1dSmrgs/.\(.*\) \\/\1:/
4483f6d0e1dSmrgH
4493f6d0e1dSmrg$ {
4503f6d0e1dSmrg  s/.*/	/
4513f6d0e1dSmrg  G
4523f6d0e1dSmrg  p
4533f6d0e1dSmrg}' >> "$depfile"
4543f6d0e1dSmrg  rm -f "$tmpdepfile"
4553f6d0e1dSmrg  ;;
4563f6d0e1dSmrg
4573f6d0e1dSmrgmsvc7msys)
4583f6d0e1dSmrg  # This case exists only to let depend.m4 do its work.  It works by
4593f6d0e1dSmrg  # looking at the text of this script.  This case will never be run,
4603f6d0e1dSmrg  # since it is checked for above.
4613f6d0e1dSmrg  exit 1
4623f6d0e1dSmrg  ;;
4633f6d0e1dSmrg
464692f60a7Smrg#nosideeffect)
465692f60a7Smrg  # This comment above is used by automake to tell side-effect
466692f60a7Smrg  # dependency tracking mechanisms from slower ones.
467692f60a7Smrg
468692f60a7Smrgdashmstdout)
469692f60a7Smrg  # Important note: in order to support this mode, a compiler *must*
470692f60a7Smrg  # always write the preprocessed file to stdout, regardless of -o.
471692f60a7Smrg  "$@" || exit $?
472692f60a7Smrg
473692f60a7Smrg  # Remove the call to Libtool.
474692f60a7Smrg  if test "$libtool" = yes; then
4753f6d0e1dSmrg    while test "X$1" != 'X--mode=compile'; do
476692f60a7Smrg      shift
477692f60a7Smrg    done
478692f60a7Smrg    shift
479692f60a7Smrg  fi
480692f60a7Smrg
481692f60a7Smrg  # Remove `-o $object'.
482692f60a7Smrg  IFS=" "
483692f60a7Smrg  for arg
484692f60a7Smrg  do
485692f60a7Smrg    case $arg in
486692f60a7Smrg    -o)
487692f60a7Smrg      shift
488692f60a7Smrg      ;;
489692f60a7Smrg    $object)
490692f60a7Smrg      shift
491692f60a7Smrg      ;;
492692f60a7Smrg    *)
493692f60a7Smrg      set fnord "$@" "$arg"
494692f60a7Smrg      shift # fnord
495692f60a7Smrg      shift # $arg
496692f60a7Smrg      ;;
497692f60a7Smrg    esac
498692f60a7Smrg  done
499692f60a7Smrg
500692f60a7Smrg  test -z "$dashmflag" && dashmflag=-M
501692f60a7Smrg  # Require at least two characters before searching for `:'
502692f60a7Smrg  # in the target name.  This is to cope with DOS-style filenames:
503692f60a7Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
504692f60a7Smrg  "$@" $dashmflag |
505692f60a7Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
506692f60a7Smrg  rm -f "$depfile"
507692f60a7Smrg  cat < "$tmpdepfile" > "$depfile"
508692f60a7Smrg  tr ' ' '
509692f60a7Smrg' < "$tmpdepfile" | \
510692f60a7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
511692f60a7Smrg## correctly.  Breaking it into two sed invocations is a workaround.
512692f60a7Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
513692f60a7Smrg  rm -f "$tmpdepfile"
514692f60a7Smrg  ;;
515692f60a7Smrg
516692f60a7SmrgdashXmstdout)
517692f60a7Smrg  # This case only exists to satisfy depend.m4.  It is never actually
518692f60a7Smrg  # run, as this mode is specially recognized in the preamble.
519692f60a7Smrg  exit 1
520692f60a7Smrg  ;;
521692f60a7Smrg
522692f60a7Smrgmakedepend)
523692f60a7Smrg  "$@" || exit $?
524692f60a7Smrg  # Remove any Libtool call
525692f60a7Smrg  if test "$libtool" = yes; then
5263f6d0e1dSmrg    while test "X$1" != 'X--mode=compile'; do
527692f60a7Smrg      shift
528692f60a7Smrg    done
529692f60a7Smrg    shift
530692f60a7Smrg  fi
531692f60a7Smrg  # X makedepend
532692f60a7Smrg  shift
5333f6d0e1dSmrg  cleared=no eat=no
5343f6d0e1dSmrg  for arg
5353f6d0e1dSmrg  do
536692f60a7Smrg    case $cleared in
537692f60a7Smrg    no)
538692f60a7Smrg      set ""; shift
539692f60a7Smrg      cleared=yes ;;
540692f60a7Smrg    esac
5413f6d0e1dSmrg    if test $eat = yes; then
5423f6d0e1dSmrg      eat=no
5433f6d0e1dSmrg      continue
5443f6d0e1dSmrg    fi
545692f60a7Smrg    case "$arg" in
546692f60a7Smrg    -D*|-I*)
547692f60a7Smrg      set fnord "$@" "$arg"; shift ;;
548692f60a7Smrg    # Strip any option that makedepend may not understand.  Remove
549692f60a7Smrg    # the object too, otherwise makedepend will parse it as a source file.
5503f6d0e1dSmrg    -arch)
5513f6d0e1dSmrg      eat=yes ;;
552692f60a7Smrg    -*|$object)
553692f60a7Smrg      ;;
554692f60a7Smrg    *)
555692f60a7Smrg      set fnord "$@" "$arg"; shift ;;
556692f60a7Smrg    esac
557692f60a7Smrg  done
5583f6d0e1dSmrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
559692f60a7Smrg  touch "$tmpdepfile"
560692f60a7Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
561692f60a7Smrg  rm -f "$depfile"
5623f6d0e1dSmrg  # makedepend may prepend the VPATH from the source file name to the object.
5633f6d0e1dSmrg  # No need to regex-escape $object, excess matching of '.' is harmless.
5643f6d0e1dSmrg  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
565692f60a7Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
566692f60a7Smrg' | \
567692f60a7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
568692f60a7Smrg## correctly.  Breaking it into two sed invocations is a workaround.
569692f60a7Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
570692f60a7Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
571692f60a7Smrg  ;;
572692f60a7Smrg
573692f60a7Smrgcpp)
574692f60a7Smrg  # Important note: in order to support this mode, a compiler *must*
575692f60a7Smrg  # always write the preprocessed file to stdout.
576692f60a7Smrg  "$@" || exit $?
577692f60a7Smrg
578692f60a7Smrg  # Remove the call to Libtool.
579692f60a7Smrg  if test "$libtool" = yes; then
5803f6d0e1dSmrg    while test "X$1" != 'X--mode=compile'; do
581692f60a7Smrg      shift
582692f60a7Smrg    done
583692f60a7Smrg    shift
584692f60a7Smrg  fi
585692f60a7Smrg
586692f60a7Smrg  # Remove `-o $object'.
587692f60a7Smrg  IFS=" "
588692f60a7Smrg  for arg
589692f60a7Smrg  do
590692f60a7Smrg    case $arg in
591692f60a7Smrg    -o)
592692f60a7Smrg      shift
593692f60a7Smrg      ;;
594692f60a7Smrg    $object)
595692f60a7Smrg      shift
596692f60a7Smrg      ;;
597692f60a7Smrg    *)
598692f60a7Smrg      set fnord "$@" "$arg"
599692f60a7Smrg      shift # fnord
600692f60a7Smrg      shift # $arg
601692f60a7Smrg      ;;
602692f60a7Smrg    esac
603692f60a7Smrg  done
604692f60a7Smrg
605692f60a7Smrg  "$@" -E |
606692f60a7Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
607692f60a7Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
608692f60a7Smrg    sed '$ s: \\$::' > "$tmpdepfile"
609692f60a7Smrg  rm -f "$depfile"
610692f60a7Smrg  echo "$object : \\" > "$depfile"
611692f60a7Smrg  cat < "$tmpdepfile" >> "$depfile"
612692f60a7Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
613692f60a7Smrg  rm -f "$tmpdepfile"
614692f60a7Smrg  ;;
615692f60a7Smrg
616692f60a7Smrgmsvisualcpp)
617692f60a7Smrg  # Important note: in order to support this mode, a compiler *must*
6183f6d0e1dSmrg  # always write the preprocessed file to stdout.
619692f60a7Smrg  "$@" || exit $?
6203f6d0e1dSmrg
6213f6d0e1dSmrg  # Remove the call to Libtool.
6223f6d0e1dSmrg  if test "$libtool" = yes; then
6233f6d0e1dSmrg    while test "X$1" != 'X--mode=compile'; do
6243f6d0e1dSmrg      shift
6253f6d0e1dSmrg    done
6263f6d0e1dSmrg    shift
6273f6d0e1dSmrg  fi
6283f6d0e1dSmrg
629692f60a7Smrg  IFS=" "
630692f60a7Smrg  for arg
631692f60a7Smrg  do
632692f60a7Smrg    case "$arg" in
6333f6d0e1dSmrg    -o)
6343f6d0e1dSmrg      shift
6353f6d0e1dSmrg      ;;
6363f6d0e1dSmrg    $object)
6373f6d0e1dSmrg      shift
6383f6d0e1dSmrg      ;;
639692f60a7Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
640692f60a7Smrg	set fnord "$@"
641692f60a7Smrg	shift
642692f60a7Smrg	shift
643692f60a7Smrg	;;
644692f60a7Smrg    *)
645692f60a7Smrg	set fnord "$@" "$arg"
646692f60a7Smrg	shift
647692f60a7Smrg	shift
648692f60a7Smrg	;;
649692f60a7Smrg    esac
650692f60a7Smrg  done
6513f6d0e1dSmrg  "$@" -E 2>/dev/null |
6523f6d0e1dSmrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
653692f60a7Smrg  rm -f "$depfile"
654692f60a7Smrg  echo "$object : \\" > "$depfile"
6553f6d0e1dSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
656692f60a7Smrg  echo "	" >> "$depfile"
6573f6d0e1dSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
658692f60a7Smrg  rm -f "$tmpdepfile"
659692f60a7Smrg  ;;
660692f60a7Smrg
6613f6d0e1dSmrgmsvcmsys)
6623f6d0e1dSmrg  # This case exists only to let depend.m4 do its work.  It works by
6633f6d0e1dSmrg  # looking at the text of this script.  This case will never be run,
6643f6d0e1dSmrg  # since it is checked for above.
6653f6d0e1dSmrg  exit 1
6663f6d0e1dSmrg  ;;
6673f6d0e1dSmrg
668692f60a7Smrgnone)
669692f60a7Smrg  exec "$@"
670692f60a7Smrg  ;;
671692f60a7Smrg
672692f60a7Smrg*)
673692f60a7Smrg  echo "Unknown depmode $depmode" 1>&2
674692f60a7Smrg  exit 1
675692f60a7Smrg  ;;
676692f60a7Smrgesac
677692f60a7Smrg
678692f60a7Smrgexit 0
679692f60a7Smrg
680692f60a7Smrg# Local Variables:
681692f60a7Smrg# mode: shell-script
682692f60a7Smrg# sh-indentation: 2
683692f60a7Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
684692f60a7Smrg# time-stamp-start: "scriptversion="
685692f60a7Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
6863f6d0e1dSmrg# time-stamp-time-zone: "UTC"
6873f6d0e1dSmrg# time-stamp-end: "; # UTC"
688692f60a7Smrg# End:
689