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