depcomp revision 0597fb56
1b042e37fSmrg#! /bin/sh
2b042e37fSmrg# depcomp - compile a program generating dependencies as side-effects
3b042e37fSmrg
40597fb56Smrgscriptversion=2011-12-04.11; # UTC
5b042e37fSmrg
60597fb56Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
70597fb56Smrg# 2011 Free Software Foundation, Inc.
8b042e37fSmrg
9b042e37fSmrg# This program is free software; you can redistribute it and/or modify
10b042e37fSmrg# it under the terms of the GNU General Public License as published by
11b042e37fSmrg# the Free Software Foundation; either version 2, or (at your option)
12b042e37fSmrg# any later version.
13b042e37fSmrg
14b042e37fSmrg# This program is distributed in the hope that it will be useful,
15b042e37fSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
16b042e37fSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17b042e37fSmrg# GNU General Public License for more details.
18b042e37fSmrg
19b042e37fSmrg# You should have received a copy of the GNU General Public License
20706b6b52Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
21b042e37fSmrg
22b042e37fSmrg# As a special exception to the GNU General Public License, if you
23b042e37fSmrg# distribute this file as part of a program that contains a
24b042e37fSmrg# configuration script generated by Autoconf, you may include it under
25b042e37fSmrg# the same distribution terms that you use for the rest of that program.
26b042e37fSmrg
27b042e37fSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
28b042e37fSmrg
29b042e37fSmrgcase $1 in
30b042e37fSmrg  '')
31b042e37fSmrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
32b042e37fSmrg     exit 1;
33b042e37fSmrg     ;;
34b042e37fSmrg  -h | --h*)
35b042e37fSmrg    cat <<\EOF
36b042e37fSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
37b042e37fSmrg
38b042e37fSmrgRun PROGRAMS ARGS to compile a file, generating dependencies
39b042e37fSmrgas side-effects.
40b042e37fSmrg
41b042e37fSmrgEnvironment variables:
42b042e37fSmrg  depmode     Dependency tracking mode.
43b042e37fSmrg  source      Source file read by `PROGRAMS ARGS'.
44b042e37fSmrg  object      Object file output by `PROGRAMS ARGS'.
45b042e37fSmrg  DEPDIR      directory where to store dependencies.
46b042e37fSmrg  depfile     Dependency file to output.
470597fb56Smrg  tmpdepfile  Temporary file to use when outputting dependencies.
48b042e37fSmrg  libtool     Whether libtool is used (yes/no).
49b042e37fSmrg
50b042e37fSmrgReport bugs to <bug-automake@gnu.org>.
51b042e37fSmrgEOF
52b042e37fSmrg    exit $?
53b042e37fSmrg    ;;
54b042e37fSmrg  -v | --v*)
55b042e37fSmrg    echo "depcomp $scriptversion"
56b042e37fSmrg    exit $?
57b042e37fSmrg    ;;
58b042e37fSmrgesac
59b042e37fSmrg
60b042e37fSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
61b042e37fSmrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
62b042e37fSmrg  exit 1
63b042e37fSmrgfi
64b042e37fSmrg
65b042e37fSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
66b042e37fSmrgdepfile=${depfile-`echo "$object" |
67b042e37fSmrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
68b042e37fSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
69b042e37fSmrg
70b042e37fSmrgrm -f "$tmpdepfile"
71b042e37fSmrg
72b042e37fSmrg# Some modes work just like other modes, but use different flags.  We
73b042e37fSmrg# parameterize here, but still list the modes in the big case below,
74b042e37fSmrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
75b042e37fSmrg# here, because this file can only contain one case statement.
76b042e37fSmrgif test "$depmode" = hp; then
77b042e37fSmrg  # HP compiler uses -M and no extra arg.
78b042e37fSmrg  gccflag=-M
79b042e37fSmrg  depmode=gcc
80b042e37fSmrgfi
81b042e37fSmrg
82b042e37fSmrgif test "$depmode" = dashXmstdout; then
83b042e37fSmrg   # This is just like dashmstdout with a different argument.
84b042e37fSmrg   dashmflag=-xM
85b042e37fSmrg   depmode=dashmstdout
86b042e37fSmrgfi
87b042e37fSmrg
88706b6b52Smrgcygpath_u="cygpath -u -f -"
89706b6b52Smrgif test "$depmode" = msvcmsys; then
90706b6b52Smrg   # This is just like msvisualcpp but w/o cygpath translation.
91706b6b52Smrg   # Just convert the backslash-escaped backslashes to single forward
92706b6b52Smrg   # slashes to satisfy depend.m4
930597fb56Smrg   cygpath_u='sed s,\\\\,/,g'
94706b6b52Smrg   depmode=msvisualcpp
95706b6b52Smrgfi
96706b6b52Smrg
970597fb56Smrgif test "$depmode" = msvc7msys; then
980597fb56Smrg   # This is just like msvc7 but w/o cygpath translation.
990597fb56Smrg   # Just convert the backslash-escaped backslashes to single forward
1000597fb56Smrg   # slashes to satisfy depend.m4
1010597fb56Smrg   cygpath_u='sed s,\\\\,/,g'
1020597fb56Smrg   depmode=msvc7
1030597fb56Smrgfi
1040597fb56Smrg
105b042e37fSmrgcase "$depmode" in
106b042e37fSmrggcc3)
107b042e37fSmrg## gcc 3 implements dependency tracking that does exactly what
108b042e37fSmrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
109b042e37fSmrg## it if -MD -MP comes after the -MF stuff.  Hmm.
110b042e37fSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
111b042e37fSmrg## the command line argument order; so add the flags where they
112b042e37fSmrg## appear in depend2.am.  Note that the slowdown incurred here
113b042e37fSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
114b042e37fSmrg  for arg
115b042e37fSmrg  do
116b042e37fSmrg    case $arg in
117b042e37fSmrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
118b042e37fSmrg    *)  set fnord "$@" "$arg" ;;
119b042e37fSmrg    esac
120b042e37fSmrg    shift # fnord
121b042e37fSmrg    shift # $arg
122b042e37fSmrg  done
123b042e37fSmrg  "$@"
124b042e37fSmrg  stat=$?
125b042e37fSmrg  if test $stat -eq 0; then :
126b042e37fSmrg  else
127b042e37fSmrg    rm -f "$tmpdepfile"
128b042e37fSmrg    exit $stat
129b042e37fSmrg  fi
130b042e37fSmrg  mv "$tmpdepfile" "$depfile"
131b042e37fSmrg  ;;
132b042e37fSmrg
133b042e37fSmrggcc)
134b042e37fSmrg## There are various ways to get dependency output from gcc.  Here's
135b042e37fSmrg## why we pick this rather obscure method:
136b042e37fSmrg## - Don't want to use -MD because we'd like the dependencies to end
137b042e37fSmrg##   up in a subdir.  Having to rename by hand is ugly.
138b042e37fSmrg##   (We might end up doing this anyway to support other compilers.)
139b042e37fSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
140b042e37fSmrg##   -MM, not -M (despite what the docs say).
141b042e37fSmrg## - Using -M directly means running the compiler twice (even worse
142b042e37fSmrg##   than renaming).
143b042e37fSmrg  if test -z "$gccflag"; then
144b042e37fSmrg    gccflag=-MD,
145b042e37fSmrg  fi
146b042e37fSmrg  "$@" -Wp,"$gccflag$tmpdepfile"
147b042e37fSmrg  stat=$?
148b042e37fSmrg  if test $stat -eq 0; then :
149b042e37fSmrg  else
150b042e37fSmrg    rm -f "$tmpdepfile"
151b042e37fSmrg    exit $stat
152b042e37fSmrg  fi
153b042e37fSmrg  rm -f "$depfile"
154b042e37fSmrg  echo "$object : \\" > "$depfile"
155b042e37fSmrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
156b042e37fSmrg## The second -e expression handles DOS-style file names with drive letters.
157b042e37fSmrg  sed -e 's/^[^:]*: / /' \
158b042e37fSmrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
159b042e37fSmrg## This next piece of magic avoids the `deleted header file' problem.
160b042e37fSmrg## The problem is that when a header file which appears in a .P file
161b042e37fSmrg## is deleted, the dependency causes make to die (because there is
162b042e37fSmrg## typically no way to rebuild the header).  We avoid this by adding
163b042e37fSmrg## dummy dependencies for each header file.  Too bad gcc doesn't do
164b042e37fSmrg## this for us directly.
165b042e37fSmrg  tr ' ' '
166b042e37fSmrg' < "$tmpdepfile" |
167b042e37fSmrg## Some versions of gcc put a space before the `:'.  On the theory
168b042e37fSmrg## that the space means something, we add a space to the output as
1690597fb56Smrg## well.  hp depmode also adds that space, but also prefixes the VPATH
1700597fb56Smrg## to the object.  Take care to not repeat it in the output.
171b042e37fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
172b042e37fSmrg## correctly.  Breaking it into two sed invocations is a workaround.
1730597fb56Smrg    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
1740597fb56Smrg      | sed -e 's/$/ :/' >> "$depfile"
175b042e37fSmrg  rm -f "$tmpdepfile"
176b042e37fSmrg  ;;
177b042e37fSmrg
178b042e37fSmrghp)
179b042e37fSmrg  # This case exists only to let depend.m4 do its work.  It works by
180b042e37fSmrg  # looking at the text of this script.  This case will never be run,
181b042e37fSmrg  # since it is checked for above.
182b042e37fSmrg  exit 1
183b042e37fSmrg  ;;
184b042e37fSmrg
185b042e37fSmrgsgi)
186b042e37fSmrg  if test "$libtool" = yes; then
187b042e37fSmrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
188b042e37fSmrg  else
189b042e37fSmrg    "$@" -MDupdate "$tmpdepfile"
190b042e37fSmrg  fi
191b042e37fSmrg  stat=$?
192b042e37fSmrg  if test $stat -eq 0; then :
193b042e37fSmrg  else
194b042e37fSmrg    rm -f "$tmpdepfile"
195b042e37fSmrg    exit $stat
196b042e37fSmrg  fi
197b042e37fSmrg  rm -f "$depfile"
198b042e37fSmrg
199b042e37fSmrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
200b042e37fSmrg    echo "$object : \\" > "$depfile"
201b042e37fSmrg
202b042e37fSmrg    # Clip off the initial element (the dependent).  Don't try to be
203b042e37fSmrg    # clever and replace this with sed code, as IRIX sed won't handle
204b042e37fSmrg    # lines with more than a fixed number of characters (4096 in
205b042e37fSmrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
206b042e37fSmrg    # the IRIX cc adds comments like `#:fec' to the end of the
207b042e37fSmrg    # dependency line.
208b042e37fSmrg    tr ' ' '
209b042e37fSmrg' < "$tmpdepfile" \
210b042e37fSmrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
211b042e37fSmrg    tr '
212706b6b52Smrg' ' ' >> "$depfile"
213706b6b52Smrg    echo >> "$depfile"
214b042e37fSmrg
215b042e37fSmrg    # The second pass generates a dummy entry for each header file.
216b042e37fSmrg    tr ' ' '
217b042e37fSmrg' < "$tmpdepfile" \
218b042e37fSmrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
219706b6b52Smrg   >> "$depfile"
220b042e37fSmrg  else
221b042e37fSmrg    # The sourcefile does not contain any dependencies, so just
222b042e37fSmrg    # store a dummy comment line, to avoid errors with the Makefile
223b042e37fSmrg    # "include basename.Plo" scheme.
224b042e37fSmrg    echo "#dummy" > "$depfile"
225b042e37fSmrg  fi
226b042e37fSmrg  rm -f "$tmpdepfile"
227b042e37fSmrg  ;;
228b042e37fSmrg
229b042e37fSmrgaix)
230b042e37fSmrg  # The C for AIX Compiler uses -M and outputs the dependencies
231b042e37fSmrg  # in a .u file.  In older versions, this file always lives in the
232b042e37fSmrg  # current directory.  Also, the AIX compiler puts `$object:' at the
233b042e37fSmrg  # start of each line; $object doesn't have directory information.
234b042e37fSmrg  # Version 6 uses the directory in both cases.
235706b6b52Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
236706b6b52Smrg  test "x$dir" = "x$object" && dir=
237706b6b52Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
238b042e37fSmrg  if test "$libtool" = yes; then
239706b6b52Smrg    tmpdepfile1=$dir$base.u
240706b6b52Smrg    tmpdepfile2=$base.u
241706b6b52Smrg    tmpdepfile3=$dir.libs/$base.u
242b042e37fSmrg    "$@" -Wc,-M
243b042e37fSmrg  else
244706b6b52Smrg    tmpdepfile1=$dir$base.u
245706b6b52Smrg    tmpdepfile2=$dir$base.u
246706b6b52Smrg    tmpdepfile3=$dir$base.u
247b042e37fSmrg    "$@" -M
248b042e37fSmrg  fi
249b042e37fSmrg  stat=$?
250b042e37fSmrg
251b042e37fSmrg  if test $stat -eq 0; then :
252b042e37fSmrg  else
253706b6b52Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
254b042e37fSmrg    exit $stat
255b042e37fSmrg  fi
256b042e37fSmrg
257706b6b52Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
258706b6b52Smrg  do
259706b6b52Smrg    test -f "$tmpdepfile" && break
260706b6b52Smrg  done
261b042e37fSmrg  if test -f "$tmpdepfile"; then
262b042e37fSmrg    # Each line is of the form `foo.o: dependent.h'.
263b042e37fSmrg    # Do two passes, one to just change these to
264b042e37fSmrg    # `$object: dependent.h' and one to simply `dependent.h:'.
265706b6b52Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
266706b6b52Smrg    # That's a tab and a space in the [].
267706b6b52Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
268b042e37fSmrg  else
269b042e37fSmrg    # The sourcefile does not contain any dependencies, so just
270b042e37fSmrg    # store a dummy comment line, to avoid errors with the Makefile
271b042e37fSmrg    # "include basename.Plo" scheme.
272b042e37fSmrg    echo "#dummy" > "$depfile"
273b042e37fSmrg  fi
274b042e37fSmrg  rm -f "$tmpdepfile"
275b042e37fSmrg  ;;
276b042e37fSmrg
277b042e37fSmrgicc)
278b042e37fSmrg  # Intel's C compiler understands `-MD -MF file'.  However on
279b042e37fSmrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
280b042e37fSmrg  # ICC 7.0 will fill foo.d with something like
281b042e37fSmrg  #    foo.o: sub/foo.c
282b042e37fSmrg  #    foo.o: sub/foo.h
283b042e37fSmrg  # which is wrong.  We want:
284b042e37fSmrg  #    sub/foo.o: sub/foo.c
285b042e37fSmrg  #    sub/foo.o: sub/foo.h
286b042e37fSmrg  #    sub/foo.c:
287b042e37fSmrg  #    sub/foo.h:
288b042e37fSmrg  # ICC 7.1 will output
289b042e37fSmrg  #    foo.o: sub/foo.c sub/foo.h
290b042e37fSmrg  # and will wrap long lines using \ :
291b042e37fSmrg  #    foo.o: sub/foo.c ... \
292b042e37fSmrg  #     sub/foo.h ... \
293b042e37fSmrg  #     ...
294b042e37fSmrg
295b042e37fSmrg  "$@" -MD -MF "$tmpdepfile"
296b042e37fSmrg  stat=$?
297b042e37fSmrg  if test $stat -eq 0; then :
298b042e37fSmrg  else
299b042e37fSmrg    rm -f "$tmpdepfile"
300b042e37fSmrg    exit $stat
301b042e37fSmrg  fi
302b042e37fSmrg  rm -f "$depfile"
303b042e37fSmrg  # Each line is of the form `foo.o: dependent.h',
304b042e37fSmrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
305b042e37fSmrg  # Do two passes, one to just change these to
306b042e37fSmrg  # `$object: dependent.h' and one to simply `dependent.h:'.
307b042e37fSmrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
308b042e37fSmrg  # Some versions of the HPUX 10.20 sed can't process this invocation
309b042e37fSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
310b042e37fSmrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
311b042e37fSmrg    sed -e 's/$/ :/' >> "$depfile"
312b042e37fSmrg  rm -f "$tmpdepfile"
313b042e37fSmrg  ;;
314b042e37fSmrg
315b042e37fSmrghp2)
316b042e37fSmrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
317b042e37fSmrg  # compilers, which have integrated preprocessors.  The correct option
318b042e37fSmrg  # to use with these is +Maked; it writes dependencies to a file named
319b042e37fSmrg  # 'foo.d', which lands next to the object file, wherever that
320b042e37fSmrg  # happens to be.
321b042e37fSmrg  # Much of this is similar to the tru64 case; see comments there.
322b042e37fSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
323b042e37fSmrg  test "x$dir" = "x$object" && dir=
324b042e37fSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
325b042e37fSmrg  if test "$libtool" = yes; then
326b042e37fSmrg    tmpdepfile1=$dir$base.d
327b042e37fSmrg    tmpdepfile2=$dir.libs/$base.d
328b042e37fSmrg    "$@" -Wc,+Maked
329b042e37fSmrg  else
330b042e37fSmrg    tmpdepfile1=$dir$base.d
331b042e37fSmrg    tmpdepfile2=$dir$base.d
332b042e37fSmrg    "$@" +Maked
333b042e37fSmrg  fi
334b042e37fSmrg  stat=$?
335b042e37fSmrg  if test $stat -eq 0; then :
336b042e37fSmrg  else
337b042e37fSmrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
338b042e37fSmrg     exit $stat
339b042e37fSmrg  fi
340b042e37fSmrg
341b042e37fSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
342b042e37fSmrg  do
343b042e37fSmrg    test -f "$tmpdepfile" && break
344b042e37fSmrg  done
345b042e37fSmrg  if test -f "$tmpdepfile"; then
346b042e37fSmrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
347b042e37fSmrg    # Add `dependent.h:' lines.
348706b6b52Smrg    sed -ne '2,${
349706b6b52Smrg	       s/^ *//
350706b6b52Smrg	       s/ \\*$//
351706b6b52Smrg	       s/$/:/
352706b6b52Smrg	       p
353706b6b52Smrg	     }' "$tmpdepfile" >> "$depfile"
354b042e37fSmrg  else
355b042e37fSmrg    echo "#dummy" > "$depfile"
356b042e37fSmrg  fi
357b042e37fSmrg  rm -f "$tmpdepfile" "$tmpdepfile2"
358b042e37fSmrg  ;;
359b042e37fSmrg
360b042e37fSmrgtru64)
361b042e37fSmrg   # The Tru64 compiler uses -MD to generate dependencies as a side
362b042e37fSmrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
363b042e37fSmrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
364b042e37fSmrg   # dependencies in `foo.d' instead, so we check for that too.
365b042e37fSmrg   # Subdirectories are respected.
366b042e37fSmrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
367b042e37fSmrg   test "x$dir" = "x$object" && dir=
368b042e37fSmrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
369b042e37fSmrg
370b042e37fSmrg   if test "$libtool" = yes; then
371b042e37fSmrg      # With Tru64 cc, shared objects can also be used to make a
372b042e37fSmrg      # static library.  This mechanism is used in libtool 1.4 series to
373b042e37fSmrg      # handle both shared and static libraries in a single compilation.
374b042e37fSmrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
375b042e37fSmrg      #
376b042e37fSmrg      # With libtool 1.5 this exception was removed, and libtool now
377b042e37fSmrg      # generates 2 separate objects for the 2 libraries.  These two
378b042e37fSmrg      # compilations output dependencies in $dir.libs/$base.o.d and
379b042e37fSmrg      # in $dir$base.o.d.  We have to check for both files, because
380b042e37fSmrg      # one of the two compilations can be disabled.  We should prefer
381b042e37fSmrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
382b042e37fSmrg      # automatically cleaned when .libs/ is deleted, while ignoring
383b042e37fSmrg      # the former would cause a distcleancheck panic.
384b042e37fSmrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
385b042e37fSmrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
386b042e37fSmrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
387b042e37fSmrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
388b042e37fSmrg      "$@" -Wc,-MD
389b042e37fSmrg   else
390b042e37fSmrg      tmpdepfile1=$dir$base.o.d
391b042e37fSmrg      tmpdepfile2=$dir$base.d
392b042e37fSmrg      tmpdepfile3=$dir$base.d
393b042e37fSmrg      tmpdepfile4=$dir$base.d
394b042e37fSmrg      "$@" -MD
395b042e37fSmrg   fi
396b042e37fSmrg
397b042e37fSmrg   stat=$?
398b042e37fSmrg   if test $stat -eq 0; then :
399b042e37fSmrg   else
400b042e37fSmrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
401b042e37fSmrg      exit $stat
402b042e37fSmrg   fi
403b042e37fSmrg
404b042e37fSmrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
405b042e37fSmrg   do
406b042e37fSmrg     test -f "$tmpdepfile" && break
407b042e37fSmrg   done
408b042e37fSmrg   if test -f "$tmpdepfile"; then
409b042e37fSmrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
410b042e37fSmrg      # That's a tab and a space in the [].
411b042e37fSmrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
412b042e37fSmrg   else
413b042e37fSmrg      echo "#dummy" > "$depfile"
414b042e37fSmrg   fi
415b042e37fSmrg   rm -f "$tmpdepfile"
416b042e37fSmrg   ;;
417b042e37fSmrg
4180597fb56Smrgmsvc7)
4190597fb56Smrg  if test "$libtool" = yes; then
4200597fb56Smrg    showIncludes=-Wc,-showIncludes
4210597fb56Smrg  else
4220597fb56Smrg    showIncludes=-showIncludes
4230597fb56Smrg  fi
4240597fb56Smrg  "$@" $showIncludes > "$tmpdepfile"
4250597fb56Smrg  stat=$?
4260597fb56Smrg  grep -v '^Note: including file: ' "$tmpdepfile"
4270597fb56Smrg  if test "$stat" = 0; then :
4280597fb56Smrg  else
4290597fb56Smrg    rm -f "$tmpdepfile"
4300597fb56Smrg    exit $stat
4310597fb56Smrg  fi
4320597fb56Smrg  rm -f "$depfile"
4330597fb56Smrg  echo "$object : \\" > "$depfile"
4340597fb56Smrg  # The first sed program below extracts the file names and escapes
4350597fb56Smrg  # backslashes for cygpath.  The second sed program outputs the file
4360597fb56Smrg  # name when reading, but also accumulates all include files in the
4370597fb56Smrg  # hold buffer in order to output them again at the end.  This only
4380597fb56Smrg  # works with sed implementations that can handle large buffers.
4390597fb56Smrg  sed < "$tmpdepfile" -n '
4400597fb56Smrg/^Note: including file:  *\(.*\)/ {
4410597fb56Smrg  s//\1/
4420597fb56Smrg  s/\\/\\\\/g
4430597fb56Smrg  p
4440597fb56Smrg}' | $cygpath_u | sort -u | sed -n '
4450597fb56Smrgs/ /\\ /g
4460597fb56Smrgs/\(.*\)/	\1 \\/p
4470597fb56Smrgs/.\(.*\) \\/\1:/
4480597fb56SmrgH
4490597fb56Smrg$ {
4500597fb56Smrg  s/.*/	/
4510597fb56Smrg  G
4520597fb56Smrg  p
4530597fb56Smrg}' >> "$depfile"
4540597fb56Smrg  rm -f "$tmpdepfile"
4550597fb56Smrg  ;;
4560597fb56Smrg
4570597fb56Smrgmsvc7msys)
4580597fb56Smrg  # This case exists only to let depend.m4 do its work.  It works by
4590597fb56Smrg  # looking at the text of this script.  This case will never be run,
4600597fb56Smrg  # since it is checked for above.
4610597fb56Smrg  exit 1
4620597fb56Smrg  ;;
4630597fb56Smrg
464b042e37fSmrg#nosideeffect)
465b042e37fSmrg  # This comment above is used by automake to tell side-effect
466b042e37fSmrg  # dependency tracking mechanisms from slower ones.
467b042e37fSmrg
468b042e37fSmrgdashmstdout)
469b042e37fSmrg  # Important note: in order to support this mode, a compiler *must*
470b042e37fSmrg  # always write the preprocessed file to stdout, regardless of -o.
471b042e37fSmrg  "$@" || exit $?
472b042e37fSmrg
473b042e37fSmrg  # Remove the call to Libtool.
474b042e37fSmrg  if test "$libtool" = yes; then
475706b6b52Smrg    while test "X$1" != 'X--mode=compile'; do
476b042e37fSmrg      shift
477b042e37fSmrg    done
478b042e37fSmrg    shift
479b042e37fSmrg  fi
480b042e37fSmrg
481b042e37fSmrg  # Remove `-o $object'.
482b042e37fSmrg  IFS=" "
483b042e37fSmrg  for arg
484b042e37fSmrg  do
485b042e37fSmrg    case $arg in
486b042e37fSmrg    -o)
487b042e37fSmrg      shift
488b042e37fSmrg      ;;
489b042e37fSmrg    $object)
490b042e37fSmrg      shift
491b042e37fSmrg      ;;
492b042e37fSmrg    *)
493b042e37fSmrg      set fnord "$@" "$arg"
494b042e37fSmrg      shift # fnord
495b042e37fSmrg      shift # $arg
496b042e37fSmrg      ;;
497b042e37fSmrg    esac
498b042e37fSmrg  done
499b042e37fSmrg
500b042e37fSmrg  test -z "$dashmflag" && dashmflag=-M
501b042e37fSmrg  # Require at least two characters before searching for `:'
502b042e37fSmrg  # in the target name.  This is to cope with DOS-style filenames:
503b042e37fSmrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
504b042e37fSmrg  "$@" $dashmflag |
505b042e37fSmrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
506b042e37fSmrg  rm -f "$depfile"
507b042e37fSmrg  cat < "$tmpdepfile" > "$depfile"
508b042e37fSmrg  tr ' ' '
509b042e37fSmrg' < "$tmpdepfile" | \
510b042e37fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
511b042e37fSmrg## correctly.  Breaking it into two sed invocations is a workaround.
512b042e37fSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
513b042e37fSmrg  rm -f "$tmpdepfile"
514b042e37fSmrg  ;;
515b042e37fSmrg
516b042e37fSmrgdashXmstdout)
517b042e37fSmrg  # This case only exists to satisfy depend.m4.  It is never actually
518b042e37fSmrg  # run, as this mode is specially recognized in the preamble.
519b042e37fSmrg  exit 1
520b042e37fSmrg  ;;
521b042e37fSmrg
522b042e37fSmrgmakedepend)
523b042e37fSmrg  "$@" || exit $?
524b042e37fSmrg  # Remove any Libtool call
525b042e37fSmrg  if test "$libtool" = yes; then
526706b6b52Smrg    while test "X$1" != 'X--mode=compile'; do
527b042e37fSmrg      shift
528b042e37fSmrg    done
529b042e37fSmrg    shift
530b042e37fSmrg  fi
531b042e37fSmrg  # X makedepend
532b042e37fSmrg  shift
533706b6b52Smrg  cleared=no eat=no
534706b6b52Smrg  for arg
535706b6b52Smrg  do
536b042e37fSmrg    case $cleared in
537b042e37fSmrg    no)
538b042e37fSmrg      set ""; shift
539b042e37fSmrg      cleared=yes ;;
540b042e37fSmrg    esac
541706b6b52Smrg    if test $eat = yes; then
542706b6b52Smrg      eat=no
543706b6b52Smrg      continue
544706b6b52Smrg    fi
545b042e37fSmrg    case "$arg" in
546b042e37fSmrg    -D*|-I*)
547b042e37fSmrg      set fnord "$@" "$arg"; shift ;;
548b042e37fSmrg    # Strip any option that makedepend may not understand.  Remove
549b042e37fSmrg    # the object too, otherwise makedepend will parse it as a source file.
550706b6b52Smrg    -arch)
551706b6b52Smrg      eat=yes ;;
552b042e37fSmrg    -*|$object)
553b042e37fSmrg      ;;
554b042e37fSmrg    *)
555b042e37fSmrg      set fnord "$@" "$arg"; shift ;;
556b042e37fSmrg    esac
557b042e37fSmrg  done
558706b6b52Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
559b042e37fSmrg  touch "$tmpdepfile"
560b042e37fSmrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
561b042e37fSmrg  rm -f "$depfile"
5620597fb56Smrg  # makedepend may prepend the VPATH from the source file name to the object.
5630597fb56Smrg  # No need to regex-escape $object, excess matching of '.' is harmless.
5640597fb56Smrg  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
565b042e37fSmrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
566b042e37fSmrg' | \
567b042e37fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
568b042e37fSmrg## correctly.  Breaking it into two sed invocations is a workaround.
569b042e37fSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
570b042e37fSmrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
571b042e37fSmrg  ;;
572b042e37fSmrg
573b042e37fSmrgcpp)
574b042e37fSmrg  # Important note: in order to support this mode, a compiler *must*
575b042e37fSmrg  # always write the preprocessed file to stdout.
576b042e37fSmrg  "$@" || exit $?
577b042e37fSmrg
578b042e37fSmrg  # Remove the call to Libtool.
579b042e37fSmrg  if test "$libtool" = yes; then
580706b6b52Smrg    while test "X$1" != 'X--mode=compile'; do
581b042e37fSmrg      shift
582b042e37fSmrg    done
583b042e37fSmrg    shift
584b042e37fSmrg  fi
585b042e37fSmrg
586b042e37fSmrg  # Remove `-o $object'.
587b042e37fSmrg  IFS=" "
588b042e37fSmrg  for arg
589b042e37fSmrg  do
590b042e37fSmrg    case $arg in
591b042e37fSmrg    -o)
592b042e37fSmrg      shift
593b042e37fSmrg      ;;
594b042e37fSmrg    $object)
595b042e37fSmrg      shift
596b042e37fSmrg      ;;
597b042e37fSmrg    *)
598b042e37fSmrg      set fnord "$@" "$arg"
599b042e37fSmrg      shift # fnord
600b042e37fSmrg      shift # $arg
601b042e37fSmrg      ;;
602b042e37fSmrg    esac
603b042e37fSmrg  done
604b042e37fSmrg
605b042e37fSmrg  "$@" -E |
606b042e37fSmrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
607b042e37fSmrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
608b042e37fSmrg    sed '$ s: \\$::' > "$tmpdepfile"
609b042e37fSmrg  rm -f "$depfile"
610b042e37fSmrg  echo "$object : \\" > "$depfile"
611b042e37fSmrg  cat < "$tmpdepfile" >> "$depfile"
612b042e37fSmrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
613b042e37fSmrg  rm -f "$tmpdepfile"
614b042e37fSmrg  ;;
615b042e37fSmrg
616b042e37fSmrgmsvisualcpp)
617b042e37fSmrg  # Important note: in order to support this mode, a compiler *must*
618706b6b52Smrg  # always write the preprocessed file to stdout.
619b042e37fSmrg  "$@" || exit $?
620706b6b52Smrg
621706b6b52Smrg  # Remove the call to Libtool.
622706b6b52Smrg  if test "$libtool" = yes; then
623706b6b52Smrg    while test "X$1" != 'X--mode=compile'; do
624706b6b52Smrg      shift
625706b6b52Smrg    done
626706b6b52Smrg    shift
627706b6b52Smrg  fi
628706b6b52Smrg
629b042e37fSmrg  IFS=" "
630b042e37fSmrg  for arg
631b042e37fSmrg  do
632b042e37fSmrg    case "$arg" in
633706b6b52Smrg    -o)
634706b6b52Smrg      shift
635706b6b52Smrg      ;;
636706b6b52Smrg    $object)
637706b6b52Smrg      shift
638706b6b52Smrg      ;;
639b042e37fSmrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
640b042e37fSmrg	set fnord "$@"
641b042e37fSmrg	shift
642b042e37fSmrg	shift
643b042e37fSmrg	;;
644b042e37fSmrg    *)
645b042e37fSmrg	set fnord "$@" "$arg"
646b042e37fSmrg	shift
647b042e37fSmrg	shift
648b042e37fSmrg	;;
649b042e37fSmrg    esac
650b042e37fSmrg  done
651706b6b52Smrg  "$@" -E 2>/dev/null |
652706b6b52Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
653b042e37fSmrg  rm -f "$depfile"
654b042e37fSmrg  echo "$object : \\" > "$depfile"
655706b6b52Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
656b042e37fSmrg  echo "	" >> "$depfile"
657706b6b52Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
658b042e37fSmrg  rm -f "$tmpdepfile"
659b042e37fSmrg  ;;
660b042e37fSmrg
661706b6b52Smrgmsvcmsys)
662706b6b52Smrg  # This case exists only to let depend.m4 do its work.  It works by
663706b6b52Smrg  # looking at the text of this script.  This case will never be run,
664706b6b52Smrg  # since it is checked for above.
665706b6b52Smrg  exit 1
666706b6b52Smrg  ;;
667706b6b52Smrg
668b042e37fSmrgnone)
669b042e37fSmrg  exec "$@"
670b042e37fSmrg  ;;
671b042e37fSmrg
672b042e37fSmrg*)
673b042e37fSmrg  echo "Unknown depmode $depmode" 1>&2
674b042e37fSmrg  exit 1
675b042e37fSmrg  ;;
676b042e37fSmrgesac
677b042e37fSmrg
678b042e37fSmrgexit 0
679b042e37fSmrg
680b042e37fSmrg# Local Variables:
681b042e37fSmrg# mode: shell-script
682b042e37fSmrg# sh-indentation: 2
683b042e37fSmrg# eval: (add-hook 'write-file-hooks 'time-stamp)
684b042e37fSmrg# time-stamp-start: "scriptversion="
685b042e37fSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
686706b6b52Smrg# time-stamp-time-zone: "UTC"
687706b6b52Smrg# time-stamp-end: "; # UTC"
688b042e37fSmrg# End:
689