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