depcomp revision a1d73b4b
1c06b6b69Smrg#! /bin/sh
2c06b6b69Smrg# depcomp - compile a program generating dependencies as side-effects
3c06b6b69Smrg
4a1d73b4bSmrgscriptversion=2011-12-04.11; # UTC
5c06b6b69Smrg
6a1d73b4bSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
7a1d73b4bSmrg# 2011 Free Software Foundation, Inc.
8c06b6b69Smrg
9c06b6b69Smrg# This program is free software; you can redistribute it and/or modify
10c06b6b69Smrg# it under the terms of the GNU General Public License as published by
11c06b6b69Smrg# the Free Software Foundation; either version 2, or (at your option)
12c06b6b69Smrg# any later version.
13c06b6b69Smrg
14c06b6b69Smrg# This program is distributed in the hope that it will be useful,
15c06b6b69Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
16c06b6b69Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17c06b6b69Smrg# GNU General Public License for more details.
18c06b6b69Smrg
19c06b6b69Smrg# You should have received a copy of the GNU General Public License
207d17d341Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
21c06b6b69Smrg
22c06b6b69Smrg# As a special exception to the GNU General Public License, if you
23c06b6b69Smrg# distribute this file as part of a program that contains a
24c06b6b69Smrg# configuration script generated by Autoconf, you may include it under
25c06b6b69Smrg# the same distribution terms that you use for the rest of that program.
26c06b6b69Smrg
27c06b6b69Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
28c06b6b69Smrg
29c06b6b69Smrgcase $1 in
30c06b6b69Smrg  '')
31c06b6b69Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
32c06b6b69Smrg     exit 1;
33c06b6b69Smrg     ;;
34c06b6b69Smrg  -h | --h*)
35c06b6b69Smrg    cat <<\EOF
36c06b6b69SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
37c06b6b69Smrg
38c06b6b69SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
39c06b6b69Smrgas side-effects.
40c06b6b69Smrg
41c06b6b69SmrgEnvironment variables:
42c06b6b69Smrg  depmode     Dependency tracking mode.
43c06b6b69Smrg  source      Source file read by `PROGRAMS ARGS'.
44c06b6b69Smrg  object      Object file output by `PROGRAMS ARGS'.
45c06b6b69Smrg  DEPDIR      directory where to store dependencies.
46c06b6b69Smrg  depfile     Dependency file to output.
47a1d73b4bSmrg  tmpdepfile  Temporary file to use when outputting dependencies.
48c06b6b69Smrg  libtool     Whether libtool is used (yes/no).
49c06b6b69Smrg
50c06b6b69SmrgReport bugs to <bug-automake@gnu.org>.
51c06b6b69SmrgEOF
52c06b6b69Smrg    exit $?
53c06b6b69Smrg    ;;
54c06b6b69Smrg  -v | --v*)
55c06b6b69Smrg    echo "depcomp $scriptversion"
56c06b6b69Smrg    exit $?
57c06b6b69Smrg    ;;
58c06b6b69Smrgesac
59c06b6b69Smrg
60c06b6b69Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
61c06b6b69Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
62c06b6b69Smrg  exit 1
63c06b6b69Smrgfi
64c06b6b69Smrg
65c06b6b69Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
66c06b6b69Smrgdepfile=${depfile-`echo "$object" |
67c06b6b69Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
68c06b6b69Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
69c06b6b69Smrg
70c06b6b69Smrgrm -f "$tmpdepfile"
71c06b6b69Smrg
72c06b6b69Smrg# Some modes work just like other modes, but use different flags.  We
73c06b6b69Smrg# parameterize here, but still list the modes in the big case below,
74c06b6b69Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
75c06b6b69Smrg# here, because this file can only contain one case statement.
76c06b6b69Smrgif test "$depmode" = hp; then
77c06b6b69Smrg  # HP compiler uses -M and no extra arg.
78c06b6b69Smrg  gccflag=-M
79c06b6b69Smrg  depmode=gcc
80c06b6b69Smrgfi
81c06b6b69Smrg
82c06b6b69Smrgif test "$depmode" = dashXmstdout; then
83c06b6b69Smrg   # This is just like dashmstdout with a different argument.
84c06b6b69Smrg   dashmflag=-xM
85c06b6b69Smrg   depmode=dashmstdout
86c06b6b69Smrgfi
87c06b6b69Smrg
887d17d341Smrgcygpath_u="cygpath -u -f -"
897d17d341Smrgif test "$depmode" = msvcmsys; then
907d17d341Smrg   # This is just like msvisualcpp but w/o cygpath translation.
917d17d341Smrg   # Just convert the backslash-escaped backslashes to single forward
927d17d341Smrg   # slashes to satisfy depend.m4
93a1d73b4bSmrg   cygpath_u='sed s,\\\\,/,g'
947d17d341Smrg   depmode=msvisualcpp
957d17d341Smrgfi
967d17d341Smrg
97a1d73b4bSmrgif test "$depmode" = msvc7msys; then
98a1d73b4bSmrg   # This is just like msvc7 but w/o cygpath translation.
99a1d73b4bSmrg   # Just convert the backslash-escaped backslashes to single forward
100a1d73b4bSmrg   # slashes to satisfy depend.m4
101a1d73b4bSmrg   cygpath_u='sed s,\\\\,/,g'
102a1d73b4bSmrg   depmode=msvc7
103a1d73b4bSmrgfi
104a1d73b4bSmrg
105c06b6b69Smrgcase "$depmode" in
106c06b6b69Smrggcc3)
107c06b6b69Smrg## gcc 3 implements dependency tracking that does exactly what
108c06b6b69Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
109c06b6b69Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
1109f4658d1Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
1119f4658d1Smrg## the command line argument order; so add the flags where they
1129f4658d1Smrg## appear in depend2.am.  Note that the slowdown incurred here
1139f4658d1Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
1149f4658d1Smrg  for arg
1159f4658d1Smrg  do
1169f4658d1Smrg    case $arg in
1179f4658d1Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
1189f4658d1Smrg    *)  set fnord "$@" "$arg" ;;
1199f4658d1Smrg    esac
1209f4658d1Smrg    shift # fnord
1219f4658d1Smrg    shift # $arg
1229f4658d1Smrg  done
1239f4658d1Smrg  "$@"
124c06b6b69Smrg  stat=$?
125c06b6b69Smrg  if test $stat -eq 0; then :
126c06b6b69Smrg  else
127c06b6b69Smrg    rm -f "$tmpdepfile"
128c06b6b69Smrg    exit $stat
129c06b6b69Smrg  fi
130c06b6b69Smrg  mv "$tmpdepfile" "$depfile"
131c06b6b69Smrg  ;;
132c06b6b69Smrg
133c06b6b69Smrggcc)
134c06b6b69Smrg## There are various ways to get dependency output from gcc.  Here's
135c06b6b69Smrg## why we pick this rather obscure method:
136c06b6b69Smrg## - Don't want to use -MD because we'd like the dependencies to end
137c06b6b69Smrg##   up in a subdir.  Having to rename by hand is ugly.
138c06b6b69Smrg##   (We might end up doing this anyway to support other compilers.)
139c06b6b69Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
140c06b6b69Smrg##   -MM, not -M (despite what the docs say).
141c06b6b69Smrg## - Using -M directly means running the compiler twice (even worse
142c06b6b69Smrg##   than renaming).
143c06b6b69Smrg  if test -z "$gccflag"; then
144c06b6b69Smrg    gccflag=-MD,
145c06b6b69Smrg  fi
146c06b6b69Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
147c06b6b69Smrg  stat=$?
148c06b6b69Smrg  if test $stat -eq 0; then :
149c06b6b69Smrg  else
150c06b6b69Smrg    rm -f "$tmpdepfile"
151c06b6b69Smrg    exit $stat
152c06b6b69Smrg  fi
153c06b6b69Smrg  rm -f "$depfile"
154c06b6b69Smrg  echo "$object : \\" > "$depfile"
155c06b6b69Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
156c06b6b69Smrg## The second -e expression handles DOS-style file names with drive letters.
157c06b6b69Smrg  sed -e 's/^[^:]*: / /' \
158c06b6b69Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
159c06b6b69Smrg## This next piece of magic avoids the `deleted header file' problem.
160c06b6b69Smrg## The problem is that when a header file which appears in a .P file
161c06b6b69Smrg## is deleted, the dependency causes make to die (because there is
162c06b6b69Smrg## typically no way to rebuild the header).  We avoid this by adding
163c06b6b69Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
164c06b6b69Smrg## this for us directly.
165c06b6b69Smrg  tr ' ' '
166c06b6b69Smrg' < "$tmpdepfile" |
167c06b6b69Smrg## Some versions of gcc put a space before the `:'.  On the theory
168c06b6b69Smrg## that the space means something, we add a space to the output as
169a1d73b4bSmrg## well.  hp depmode also adds that space, but also prefixes the VPATH
170a1d73b4bSmrg## to the object.  Take care to not repeat it in the output.
171c06b6b69Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
172c06b6b69Smrg## correctly.  Breaking it into two sed invocations is a workaround.
173a1d73b4bSmrg    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
174a1d73b4bSmrg      | sed -e 's/$/ :/' >> "$depfile"
175c06b6b69Smrg  rm -f "$tmpdepfile"
176c06b6b69Smrg  ;;
177c06b6b69Smrg
178c06b6b69Smrghp)
179c06b6b69Smrg  # This case exists only to let depend.m4 do its work.  It works by
180c06b6b69Smrg  # looking at the text of this script.  This case will never be run,
181c06b6b69Smrg  # since it is checked for above.
182c06b6b69Smrg  exit 1
183c06b6b69Smrg  ;;
184c06b6b69Smrg
185c06b6b69Smrgsgi)
186c06b6b69Smrg  if test "$libtool" = yes; then
187c06b6b69Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
188c06b6b69Smrg  else
189c06b6b69Smrg    "$@" -MDupdate "$tmpdepfile"
190c06b6b69Smrg  fi
191c06b6b69Smrg  stat=$?
192c06b6b69Smrg  if test $stat -eq 0; then :
193c06b6b69Smrg  else
194c06b6b69Smrg    rm -f "$tmpdepfile"
195c06b6b69Smrg    exit $stat
196c06b6b69Smrg  fi
197c06b6b69Smrg  rm -f "$depfile"
198c06b6b69Smrg
199c06b6b69Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
200c06b6b69Smrg    echo "$object : \\" > "$depfile"
201c06b6b69Smrg
202c06b6b69Smrg    # Clip off the initial element (the dependent).  Don't try to be
203c06b6b69Smrg    # clever and replace this with sed code, as IRIX sed won't handle
204c06b6b69Smrg    # lines with more than a fixed number of characters (4096 in
205c06b6b69Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
206c06b6b69Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
207c06b6b69Smrg    # dependency line.
208c06b6b69Smrg    tr ' ' '
209c06b6b69Smrg' < "$tmpdepfile" \
210c06b6b69Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
211c06b6b69Smrg    tr '
2127d17d341Smrg' ' ' >> "$depfile"
2137d17d341Smrg    echo >> "$depfile"
214c06b6b69Smrg
215c06b6b69Smrg    # The second pass generates a dummy entry for each header file.
216c06b6b69Smrg    tr ' ' '
217c06b6b69Smrg' < "$tmpdepfile" \
218c06b6b69Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
2197d17d341Smrg   >> "$depfile"
220c06b6b69Smrg  else
221c06b6b69Smrg    # The sourcefile does not contain any dependencies, so just
222c06b6b69Smrg    # store a dummy comment line, to avoid errors with the Makefile
223c06b6b69Smrg    # "include basename.Plo" scheme.
224c06b6b69Smrg    echo "#dummy" > "$depfile"
225c06b6b69Smrg  fi
226c06b6b69Smrg  rm -f "$tmpdepfile"
227c06b6b69Smrg  ;;
228c06b6b69Smrg
229c06b6b69Smrgaix)
230c06b6b69Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
231c06b6b69Smrg  # in a .u file.  In older versions, this file always lives in the
232c06b6b69Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
233c06b6b69Smrg  # start of each line; $object doesn't have directory information.
234c06b6b69Smrg  # Version 6 uses the directory in both cases.
2359f4658d1Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
2369f4658d1Smrg  test "x$dir" = "x$object" && dir=
2379f4658d1Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
238c06b6b69Smrg  if test "$libtool" = yes; then
2399f4658d1Smrg    tmpdepfile1=$dir$base.u
2409f4658d1Smrg    tmpdepfile2=$base.u
2419f4658d1Smrg    tmpdepfile3=$dir.libs/$base.u
242c06b6b69Smrg    "$@" -Wc,-M
243c06b6b69Smrg  else
2449f4658d1Smrg    tmpdepfile1=$dir$base.u
2459f4658d1Smrg    tmpdepfile2=$dir$base.u
2469f4658d1Smrg    tmpdepfile3=$dir$base.u
247c06b6b69Smrg    "$@" -M
248c06b6b69Smrg  fi
249c06b6b69Smrg  stat=$?
250c06b6b69Smrg
251c06b6b69Smrg  if test $stat -eq 0; then :
252c06b6b69Smrg  else
2539f4658d1Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
254c06b6b69Smrg    exit $stat
255c06b6b69Smrg  fi
256c06b6b69Smrg
2579f4658d1Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2589f4658d1Smrg  do
2599f4658d1Smrg    test -f "$tmpdepfile" && break
2609f4658d1Smrg  done
261c06b6b69Smrg  if test -f "$tmpdepfile"; then
262c06b6b69Smrg    # Each line is of the form `foo.o: dependent.h'.
263c06b6b69Smrg    # Do two passes, one to just change these to
264c06b6b69Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
2659f4658d1Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
2669f4658d1Smrg    # That's a tab and a space in the [].
2679f4658d1Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
268c06b6b69Smrg  else
269c06b6b69Smrg    # The sourcefile does not contain any dependencies, so just
270c06b6b69Smrg    # store a dummy comment line, to avoid errors with the Makefile
271c06b6b69Smrg    # "include basename.Plo" scheme.
272c06b6b69Smrg    echo "#dummy" > "$depfile"
273c06b6b69Smrg  fi
274c06b6b69Smrg  rm -f "$tmpdepfile"
275c06b6b69Smrg  ;;
276c06b6b69Smrg
277c06b6b69Smrgicc)
278c06b6b69Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
279c06b6b69Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
280c06b6b69Smrg  # ICC 7.0 will fill foo.d with something like
281c06b6b69Smrg  #    foo.o: sub/foo.c
282c06b6b69Smrg  #    foo.o: sub/foo.h
283c06b6b69Smrg  # which is wrong.  We want:
284c06b6b69Smrg  #    sub/foo.o: sub/foo.c
285c06b6b69Smrg  #    sub/foo.o: sub/foo.h
286c06b6b69Smrg  #    sub/foo.c:
287c06b6b69Smrg  #    sub/foo.h:
288c06b6b69Smrg  # ICC 7.1 will output
289c06b6b69Smrg  #    foo.o: sub/foo.c sub/foo.h
290c06b6b69Smrg  # and will wrap long lines using \ :
291c06b6b69Smrg  #    foo.o: sub/foo.c ... \
292c06b6b69Smrg  #     sub/foo.h ... \
293c06b6b69Smrg  #     ...
294c06b6b69Smrg
295c06b6b69Smrg  "$@" -MD -MF "$tmpdepfile"
296c06b6b69Smrg  stat=$?
297c06b6b69Smrg  if test $stat -eq 0; then :
298c06b6b69Smrg  else
299c06b6b69Smrg    rm -f "$tmpdepfile"
300c06b6b69Smrg    exit $stat
301c06b6b69Smrg  fi
302c06b6b69Smrg  rm -f "$depfile"
303c06b6b69Smrg  # Each line is of the form `foo.o: dependent.h',
304c06b6b69Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
305c06b6b69Smrg  # Do two passes, one to just change these to
306c06b6b69Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
307c06b6b69Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
308c06b6b69Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
309c06b6b69Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
310c06b6b69Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
311c06b6b69Smrg    sed -e 's/$/ :/' >> "$depfile"
312c06b6b69Smrg  rm -f "$tmpdepfile"
313c06b6b69Smrg  ;;
314c06b6b69Smrg
3159f4658d1Smrghp2)
3169f4658d1Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
3179f4658d1Smrg  # compilers, which have integrated preprocessors.  The correct option
3189f4658d1Smrg  # to use with these is +Maked; it writes dependencies to a file named
3199f4658d1Smrg  # 'foo.d', which lands next to the object file, wherever that
3209f4658d1Smrg  # happens to be.
3219f4658d1Smrg  # Much of this is similar to the tru64 case; see comments there.
3229f4658d1Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3239f4658d1Smrg  test "x$dir" = "x$object" && dir=
3249f4658d1Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3259f4658d1Smrg  if test "$libtool" = yes; then
3269f4658d1Smrg    tmpdepfile1=$dir$base.d
3279f4658d1Smrg    tmpdepfile2=$dir.libs/$base.d
3289f4658d1Smrg    "$@" -Wc,+Maked
3299f4658d1Smrg  else
3309f4658d1Smrg    tmpdepfile1=$dir$base.d
3319f4658d1Smrg    tmpdepfile2=$dir$base.d
3329f4658d1Smrg    "$@" +Maked
3339f4658d1Smrg  fi
3349f4658d1Smrg  stat=$?
3359f4658d1Smrg  if test $stat -eq 0; then :
3369f4658d1Smrg  else
3379f4658d1Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
3389f4658d1Smrg     exit $stat
3399f4658d1Smrg  fi
3409f4658d1Smrg
3419f4658d1Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
3429f4658d1Smrg  do
3439f4658d1Smrg    test -f "$tmpdepfile" && break
3449f4658d1Smrg  done
3459f4658d1Smrg  if test -f "$tmpdepfile"; then
3469f4658d1Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
3479f4658d1Smrg    # Add `dependent.h:' lines.
3487d17d341Smrg    sed -ne '2,${
3497d17d341Smrg	       s/^ *//
3507d17d341Smrg	       s/ \\*$//
3517d17d341Smrg	       s/$/:/
3527d17d341Smrg	       p
3537d17d341Smrg	     }' "$tmpdepfile" >> "$depfile"
3549f4658d1Smrg  else
3559f4658d1Smrg    echo "#dummy" > "$depfile"
3569f4658d1Smrg  fi
3579f4658d1Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
3589f4658d1Smrg  ;;
3599f4658d1Smrg
360c06b6b69Smrgtru64)
361c06b6b69Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
362c06b6b69Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
363c06b6b69Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
364c06b6b69Smrg   # dependencies in `foo.d' instead, so we check for that too.
365c06b6b69Smrg   # Subdirectories are respected.
366c06b6b69Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
367c06b6b69Smrg   test "x$dir" = "x$object" && dir=
368c06b6b69Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
369c06b6b69Smrg
370c06b6b69Smrg   if test "$libtool" = yes; then
371c06b6b69Smrg      # With Tru64 cc, shared objects can also be used to make a
3729f4658d1Smrg      # static library.  This mechanism is used in libtool 1.4 series to
373c06b6b69Smrg      # handle both shared and static libraries in a single compilation.
374c06b6b69Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
375c06b6b69Smrg      #
376c06b6b69Smrg      # With libtool 1.5 this exception was removed, and libtool now
377c06b6b69Smrg      # generates 2 separate objects for the 2 libraries.  These two
3789f4658d1Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
379c06b6b69Smrg      # in $dir$base.o.d.  We have to check for both files, because
380c06b6b69Smrg      # one of the two compilations can be disabled.  We should prefer
381c06b6b69Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
382c06b6b69Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
383c06b6b69Smrg      # the former would cause a distcleancheck panic.
384c06b6b69Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
385c06b6b69Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
386c06b6b69Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
387c06b6b69Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
388c06b6b69Smrg      "$@" -Wc,-MD
389c06b6b69Smrg   else
390c06b6b69Smrg      tmpdepfile1=$dir$base.o.d
391c06b6b69Smrg      tmpdepfile2=$dir$base.d
392c06b6b69Smrg      tmpdepfile3=$dir$base.d
393c06b6b69Smrg      tmpdepfile4=$dir$base.d
394c06b6b69Smrg      "$@" -MD
395c06b6b69Smrg   fi
396c06b6b69Smrg
397c06b6b69Smrg   stat=$?
398c06b6b69Smrg   if test $stat -eq 0; then :
399c06b6b69Smrg   else
400c06b6b69Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
401c06b6b69Smrg      exit $stat
402c06b6b69Smrg   fi
403c06b6b69Smrg
404c06b6b69Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
405c06b6b69Smrg   do
406c06b6b69Smrg     test -f "$tmpdepfile" && break
407c06b6b69Smrg   done
408c06b6b69Smrg   if test -f "$tmpdepfile"; then
409c06b6b69Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
410c06b6b69Smrg      # That's a tab and a space in the [].
411c06b6b69Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
412c06b6b69Smrg   else
413c06b6b69Smrg      echo "#dummy" > "$depfile"
414c06b6b69Smrg   fi
415c06b6b69Smrg   rm -f "$tmpdepfile"
416c06b6b69Smrg   ;;
417c06b6b69Smrg
418a1d73b4bSmrgmsvc7)
419a1d73b4bSmrg  if test "$libtool" = yes; then
420a1d73b4bSmrg    showIncludes=-Wc,-showIncludes
421a1d73b4bSmrg  else
422a1d73b4bSmrg    showIncludes=-showIncludes
423a1d73b4bSmrg  fi
424a1d73b4bSmrg  "$@" $showIncludes > "$tmpdepfile"
425a1d73b4bSmrg  stat=$?
426a1d73b4bSmrg  grep -v '^Note: including file: ' "$tmpdepfile"
427a1d73b4bSmrg  if test "$stat" = 0; then :
428a1d73b4bSmrg  else
429a1d73b4bSmrg    rm -f "$tmpdepfile"
430a1d73b4bSmrg    exit $stat
431a1d73b4bSmrg  fi
432a1d73b4bSmrg  rm -f "$depfile"
433a1d73b4bSmrg  echo "$object : \\" > "$depfile"
434a1d73b4bSmrg  # The first sed program below extracts the file names and escapes
435a1d73b4bSmrg  # backslashes for cygpath.  The second sed program outputs the file
436a1d73b4bSmrg  # name when reading, but also accumulates all include files in the
437a1d73b4bSmrg  # hold buffer in order to output them again at the end.  This only
438a1d73b4bSmrg  # works with sed implementations that can handle large buffers.
439a1d73b4bSmrg  sed < "$tmpdepfile" -n '
440a1d73b4bSmrg/^Note: including file:  *\(.*\)/ {
441a1d73b4bSmrg  s//\1/
442a1d73b4bSmrg  s/\\/\\\\/g
443a1d73b4bSmrg  p
444a1d73b4bSmrg}' | $cygpath_u | sort -u | sed -n '
445a1d73b4bSmrgs/ /\\ /g
446a1d73b4bSmrgs/\(.*\)/	\1 \\/p
447a1d73b4bSmrgs/.\(.*\) \\/\1:/
448a1d73b4bSmrgH
449a1d73b4bSmrg$ {
450a1d73b4bSmrg  s/.*/	/
451a1d73b4bSmrg  G
452a1d73b4bSmrg  p
453a1d73b4bSmrg}' >> "$depfile"
454a1d73b4bSmrg  rm -f "$tmpdepfile"
455a1d73b4bSmrg  ;;
456a1d73b4bSmrg
457a1d73b4bSmrgmsvc7msys)
458a1d73b4bSmrg  # This case exists only to let depend.m4 do its work.  It works by
459a1d73b4bSmrg  # looking at the text of this script.  This case will never be run,
460a1d73b4bSmrg  # since it is checked for above.
461a1d73b4bSmrg  exit 1
462a1d73b4bSmrg  ;;
463a1d73b4bSmrg
464c06b6b69Smrg#nosideeffect)
465c06b6b69Smrg  # This comment above is used by automake to tell side-effect
466c06b6b69Smrg  # dependency tracking mechanisms from slower ones.
467c06b6b69Smrg
468c06b6b69Smrgdashmstdout)
469c06b6b69Smrg  # Important note: in order to support this mode, a compiler *must*
470c06b6b69Smrg  # always write the preprocessed file to stdout, regardless of -o.
471c06b6b69Smrg  "$@" || exit $?
472c06b6b69Smrg
473c06b6b69Smrg  # Remove the call to Libtool.
474c06b6b69Smrg  if test "$libtool" = yes; then
4757d17d341Smrg    while test "X$1" != 'X--mode=compile'; do
476c06b6b69Smrg      shift
477c06b6b69Smrg    done
478c06b6b69Smrg    shift
479c06b6b69Smrg  fi
480c06b6b69Smrg
481c06b6b69Smrg  # Remove `-o $object'.
482c06b6b69Smrg  IFS=" "
483c06b6b69Smrg  for arg
484c06b6b69Smrg  do
485c06b6b69Smrg    case $arg in
486c06b6b69Smrg    -o)
487c06b6b69Smrg      shift
488c06b6b69Smrg      ;;
489c06b6b69Smrg    $object)
490c06b6b69Smrg      shift
491c06b6b69Smrg      ;;
492c06b6b69Smrg    *)
493c06b6b69Smrg      set fnord "$@" "$arg"
494c06b6b69Smrg      shift # fnord
495c06b6b69Smrg      shift # $arg
496c06b6b69Smrg      ;;
497c06b6b69Smrg    esac
498c06b6b69Smrg  done
499c06b6b69Smrg
500c06b6b69Smrg  test -z "$dashmflag" && dashmflag=-M
501c06b6b69Smrg  # Require at least two characters before searching for `:'
502c06b6b69Smrg  # in the target name.  This is to cope with DOS-style filenames:
503c06b6b69Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
504c06b6b69Smrg  "$@" $dashmflag |
505c06b6b69Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
506c06b6b69Smrg  rm -f "$depfile"
507c06b6b69Smrg  cat < "$tmpdepfile" > "$depfile"
508c06b6b69Smrg  tr ' ' '
509c06b6b69Smrg' < "$tmpdepfile" | \
510c06b6b69Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
511c06b6b69Smrg## correctly.  Breaking it into two sed invocations is a workaround.
512c06b6b69Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
513c06b6b69Smrg  rm -f "$tmpdepfile"
514c06b6b69Smrg  ;;
515c06b6b69Smrg
516c06b6b69SmrgdashXmstdout)
517c06b6b69Smrg  # This case only exists to satisfy depend.m4.  It is never actually
518c06b6b69Smrg  # run, as this mode is specially recognized in the preamble.
519c06b6b69Smrg  exit 1
520c06b6b69Smrg  ;;
521c06b6b69Smrg
522c06b6b69Smrgmakedepend)
523c06b6b69Smrg  "$@" || exit $?
524c06b6b69Smrg  # Remove any Libtool call
525c06b6b69Smrg  if test "$libtool" = yes; then
5267d17d341Smrg    while test "X$1" != 'X--mode=compile'; do
527c06b6b69Smrg      shift
528c06b6b69Smrg    done
529c06b6b69Smrg    shift
530c06b6b69Smrg  fi
531c06b6b69Smrg  # X makedepend
532c06b6b69Smrg  shift
5337d17d341Smrg  cleared=no eat=no
5347d17d341Smrg  for arg
5357d17d341Smrg  do
536c06b6b69Smrg    case $cleared in
537c06b6b69Smrg    no)
538c06b6b69Smrg      set ""; shift
539c06b6b69Smrg      cleared=yes ;;
540c06b6b69Smrg    esac
5417d17d341Smrg    if test $eat = yes; then
5427d17d341Smrg      eat=no
5437d17d341Smrg      continue
5447d17d341Smrg    fi
545c06b6b69Smrg    case "$arg" in
546c06b6b69Smrg    -D*|-I*)
547c06b6b69Smrg      set fnord "$@" "$arg"; shift ;;
548c06b6b69Smrg    # Strip any option that makedepend may not understand.  Remove
549c06b6b69Smrg    # the object too, otherwise makedepend will parse it as a source file.
5507d17d341Smrg    -arch)
5517d17d341Smrg      eat=yes ;;
552c06b6b69Smrg    -*|$object)
553c06b6b69Smrg      ;;
554c06b6b69Smrg    *)
555c06b6b69Smrg      set fnord "$@" "$arg"; shift ;;
556c06b6b69Smrg    esac
557c06b6b69Smrg  done
5587d17d341Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
559c06b6b69Smrg  touch "$tmpdepfile"
560c06b6b69Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
561c06b6b69Smrg  rm -f "$depfile"
562a1d73b4bSmrg  # makedepend may prepend the VPATH from the source file name to the object.
563a1d73b4bSmrg  # No need to regex-escape $object, excess matching of '.' is harmless.
564a1d73b4bSmrg  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
565c06b6b69Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
566c06b6b69Smrg' | \
567c06b6b69Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
568c06b6b69Smrg## correctly.  Breaking it into two sed invocations is a workaround.
569c06b6b69Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
570c06b6b69Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
571c06b6b69Smrg  ;;
572c06b6b69Smrg
573c06b6b69Smrgcpp)
574c06b6b69Smrg  # Important note: in order to support this mode, a compiler *must*
575c06b6b69Smrg  # always write the preprocessed file to stdout.
576c06b6b69Smrg  "$@" || exit $?
577c06b6b69Smrg
578c06b6b69Smrg  # Remove the call to Libtool.
579c06b6b69Smrg  if test "$libtool" = yes; then
5807d17d341Smrg    while test "X$1" != 'X--mode=compile'; do
581c06b6b69Smrg      shift
582c06b6b69Smrg    done
583c06b6b69Smrg    shift
584c06b6b69Smrg  fi
585c06b6b69Smrg
586c06b6b69Smrg  # Remove `-o $object'.
587c06b6b69Smrg  IFS=" "
588c06b6b69Smrg  for arg
589c06b6b69Smrg  do
590c06b6b69Smrg    case $arg in
591c06b6b69Smrg    -o)
592c06b6b69Smrg      shift
593c06b6b69Smrg      ;;
594c06b6b69Smrg    $object)
595c06b6b69Smrg      shift
596c06b6b69Smrg      ;;
597c06b6b69Smrg    *)
598c06b6b69Smrg      set fnord "$@" "$arg"
599c06b6b69Smrg      shift # fnord
600c06b6b69Smrg      shift # $arg
601c06b6b69Smrg      ;;
602c06b6b69Smrg    esac
603c06b6b69Smrg  done
604c06b6b69Smrg
605c06b6b69Smrg  "$@" -E |
606c06b6b69Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
607c06b6b69Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
608c06b6b69Smrg    sed '$ s: \\$::' > "$tmpdepfile"
609c06b6b69Smrg  rm -f "$depfile"
610c06b6b69Smrg  echo "$object : \\" > "$depfile"
611c06b6b69Smrg  cat < "$tmpdepfile" >> "$depfile"
612c06b6b69Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
613c06b6b69Smrg  rm -f "$tmpdepfile"
614c06b6b69Smrg  ;;
615c06b6b69Smrg
616c06b6b69Smrgmsvisualcpp)
617c06b6b69Smrg  # Important note: in order to support this mode, a compiler *must*
6187d17d341Smrg  # always write the preprocessed file to stdout.
619c06b6b69Smrg  "$@" || exit $?
6207d17d341Smrg
6217d17d341Smrg  # Remove the call to Libtool.
6227d17d341Smrg  if test "$libtool" = yes; then
6237d17d341Smrg    while test "X$1" != 'X--mode=compile'; do
6247d17d341Smrg      shift
6257d17d341Smrg    done
6267d17d341Smrg    shift
6277d17d341Smrg  fi
6287d17d341Smrg
629c06b6b69Smrg  IFS=" "
630c06b6b69Smrg  for arg
631c06b6b69Smrg  do
632c06b6b69Smrg    case "$arg" in
6337d17d341Smrg    -o)
6347d17d341Smrg      shift
6357d17d341Smrg      ;;
6367d17d341Smrg    $object)
6377d17d341Smrg      shift
6387d17d341Smrg      ;;
639c06b6b69Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
640c06b6b69Smrg	set fnord "$@"
641c06b6b69Smrg	shift
642c06b6b69Smrg	shift
643c06b6b69Smrg	;;
644c06b6b69Smrg    *)
645c06b6b69Smrg	set fnord "$@" "$arg"
646c06b6b69Smrg	shift
647c06b6b69Smrg	shift
648c06b6b69Smrg	;;
649c06b6b69Smrg    esac
650c06b6b69Smrg  done
6517d17d341Smrg  "$@" -E 2>/dev/null |
6527d17d341Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
653c06b6b69Smrg  rm -f "$depfile"
654c06b6b69Smrg  echo "$object : \\" > "$depfile"
6557d17d341Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
656c06b6b69Smrg  echo "	" >> "$depfile"
6577d17d341Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
658c06b6b69Smrg  rm -f "$tmpdepfile"
659c06b6b69Smrg  ;;
660c06b6b69Smrg
6617d17d341Smrgmsvcmsys)
6627d17d341Smrg  # This case exists only to let depend.m4 do its work.  It works by
6637d17d341Smrg  # looking at the text of this script.  This case will never be run,
6647d17d341Smrg  # since it is checked for above.
6657d17d341Smrg  exit 1
6667d17d341Smrg  ;;
6677d17d341Smrg
668c06b6b69Smrgnone)
669c06b6b69Smrg  exec "$@"
670c06b6b69Smrg  ;;
671c06b6b69Smrg
672c06b6b69Smrg*)
673c06b6b69Smrg  echo "Unknown depmode $depmode" 1>&2
674c06b6b69Smrg  exit 1
675c06b6b69Smrg  ;;
676c06b6b69Smrgesac
677c06b6b69Smrg
678c06b6b69Smrgexit 0
679c06b6b69Smrg
680c06b6b69Smrg# Local Variables:
681c06b6b69Smrg# mode: shell-script
682c06b6b69Smrg# sh-indentation: 2
683c06b6b69Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
684c06b6b69Smrg# time-stamp-start: "scriptversion="
685c06b6b69Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
6867d17d341Smrg# time-stamp-time-zone: "UTC"
6877d17d341Smrg# time-stamp-end: "; # UTC"
688c06b6b69Smrg# End:
689