depcomp revision 7d17d341
1c06b6b69Smrg#! /bin/sh
2c06b6b69Smrg# depcomp - compile a program generating dependencies as side-effects
3c06b6b69Smrg
47d17d341Smrgscriptversion=2009-04-28.21; # UTC
5c06b6b69Smrg
67d17d341Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
77d17d341Smrg# 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.
47c06b6b69Smrg  tmpdepfile  Temporary file to use when outputing 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
937d17d341Smrg   cygpath_u="sed s,\\\\\\\\,/,g"
947d17d341Smrg   depmode=msvisualcpp
957d17d341Smrgfi
967d17d341Smrg
97c06b6b69Smrgcase "$depmode" in
98c06b6b69Smrggcc3)
99c06b6b69Smrg## gcc 3 implements dependency tracking that does exactly what
100c06b6b69Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
101c06b6b69Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
1029f4658d1Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
1039f4658d1Smrg## the command line argument order; so add the flags where they
1049f4658d1Smrg## appear in depend2.am.  Note that the slowdown incurred here
1059f4658d1Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
1069f4658d1Smrg  for arg
1079f4658d1Smrg  do
1089f4658d1Smrg    case $arg in
1099f4658d1Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
1109f4658d1Smrg    *)  set fnord "$@" "$arg" ;;
1119f4658d1Smrg    esac
1129f4658d1Smrg    shift # fnord
1139f4658d1Smrg    shift # $arg
1149f4658d1Smrg  done
1159f4658d1Smrg  "$@"
116c06b6b69Smrg  stat=$?
117c06b6b69Smrg  if test $stat -eq 0; then :
118c06b6b69Smrg  else
119c06b6b69Smrg    rm -f "$tmpdepfile"
120c06b6b69Smrg    exit $stat
121c06b6b69Smrg  fi
122c06b6b69Smrg  mv "$tmpdepfile" "$depfile"
123c06b6b69Smrg  ;;
124c06b6b69Smrg
125c06b6b69Smrggcc)
126c06b6b69Smrg## There are various ways to get dependency output from gcc.  Here's
127c06b6b69Smrg## why we pick this rather obscure method:
128c06b6b69Smrg## - Don't want to use -MD because we'd like the dependencies to end
129c06b6b69Smrg##   up in a subdir.  Having to rename by hand is ugly.
130c06b6b69Smrg##   (We might end up doing this anyway to support other compilers.)
131c06b6b69Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
132c06b6b69Smrg##   -MM, not -M (despite what the docs say).
133c06b6b69Smrg## - Using -M directly means running the compiler twice (even worse
134c06b6b69Smrg##   than renaming).
135c06b6b69Smrg  if test -z "$gccflag"; then
136c06b6b69Smrg    gccflag=-MD,
137c06b6b69Smrg  fi
138c06b6b69Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
139c06b6b69Smrg  stat=$?
140c06b6b69Smrg  if test $stat -eq 0; then :
141c06b6b69Smrg  else
142c06b6b69Smrg    rm -f "$tmpdepfile"
143c06b6b69Smrg    exit $stat
144c06b6b69Smrg  fi
145c06b6b69Smrg  rm -f "$depfile"
146c06b6b69Smrg  echo "$object : \\" > "$depfile"
147c06b6b69Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
148c06b6b69Smrg## The second -e expression handles DOS-style file names with drive letters.
149c06b6b69Smrg  sed -e 's/^[^:]*: / /' \
150c06b6b69Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
151c06b6b69Smrg## This next piece of magic avoids the `deleted header file' problem.
152c06b6b69Smrg## The problem is that when a header file which appears in a .P file
153c06b6b69Smrg## is deleted, the dependency causes make to die (because there is
154c06b6b69Smrg## typically no way to rebuild the header).  We avoid this by adding
155c06b6b69Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
156c06b6b69Smrg## this for us directly.
157c06b6b69Smrg  tr ' ' '
158c06b6b69Smrg' < "$tmpdepfile" |
159c06b6b69Smrg## Some versions of gcc put a space before the `:'.  On the theory
160c06b6b69Smrg## that the space means something, we add a space to the output as
161c06b6b69Smrg## well.
162c06b6b69Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
163c06b6b69Smrg## correctly.  Breaking it into two sed invocations is a workaround.
164c06b6b69Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
165c06b6b69Smrg  rm -f "$tmpdepfile"
166c06b6b69Smrg  ;;
167c06b6b69Smrg
168c06b6b69Smrghp)
169c06b6b69Smrg  # This case exists only to let depend.m4 do its work.  It works by
170c06b6b69Smrg  # looking at the text of this script.  This case will never be run,
171c06b6b69Smrg  # since it is checked for above.
172c06b6b69Smrg  exit 1
173c06b6b69Smrg  ;;
174c06b6b69Smrg
175c06b6b69Smrgsgi)
176c06b6b69Smrg  if test "$libtool" = yes; then
177c06b6b69Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
178c06b6b69Smrg  else
179c06b6b69Smrg    "$@" -MDupdate "$tmpdepfile"
180c06b6b69Smrg  fi
181c06b6b69Smrg  stat=$?
182c06b6b69Smrg  if test $stat -eq 0; then :
183c06b6b69Smrg  else
184c06b6b69Smrg    rm -f "$tmpdepfile"
185c06b6b69Smrg    exit $stat
186c06b6b69Smrg  fi
187c06b6b69Smrg  rm -f "$depfile"
188c06b6b69Smrg
189c06b6b69Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
190c06b6b69Smrg    echo "$object : \\" > "$depfile"
191c06b6b69Smrg
192c06b6b69Smrg    # Clip off the initial element (the dependent).  Don't try to be
193c06b6b69Smrg    # clever and replace this with sed code, as IRIX sed won't handle
194c06b6b69Smrg    # lines with more than a fixed number of characters (4096 in
195c06b6b69Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
196c06b6b69Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
197c06b6b69Smrg    # dependency line.
198c06b6b69Smrg    tr ' ' '
199c06b6b69Smrg' < "$tmpdepfile" \
200c06b6b69Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
201c06b6b69Smrg    tr '
2027d17d341Smrg' ' ' >> "$depfile"
2037d17d341Smrg    echo >> "$depfile"
204c06b6b69Smrg
205c06b6b69Smrg    # The second pass generates a dummy entry for each header file.
206c06b6b69Smrg    tr ' ' '
207c06b6b69Smrg' < "$tmpdepfile" \
208c06b6b69Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
2097d17d341Smrg   >> "$depfile"
210c06b6b69Smrg  else
211c06b6b69Smrg    # The sourcefile does not contain any dependencies, so just
212c06b6b69Smrg    # store a dummy comment line, to avoid errors with the Makefile
213c06b6b69Smrg    # "include basename.Plo" scheme.
214c06b6b69Smrg    echo "#dummy" > "$depfile"
215c06b6b69Smrg  fi
216c06b6b69Smrg  rm -f "$tmpdepfile"
217c06b6b69Smrg  ;;
218c06b6b69Smrg
219c06b6b69Smrgaix)
220c06b6b69Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
221c06b6b69Smrg  # in a .u file.  In older versions, this file always lives in the
222c06b6b69Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
223c06b6b69Smrg  # start of each line; $object doesn't have directory information.
224c06b6b69Smrg  # Version 6 uses the directory in both cases.
2259f4658d1Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
2269f4658d1Smrg  test "x$dir" = "x$object" && dir=
2279f4658d1Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
228c06b6b69Smrg  if test "$libtool" = yes; then
2299f4658d1Smrg    tmpdepfile1=$dir$base.u
2309f4658d1Smrg    tmpdepfile2=$base.u
2319f4658d1Smrg    tmpdepfile3=$dir.libs/$base.u
232c06b6b69Smrg    "$@" -Wc,-M
233c06b6b69Smrg  else
2349f4658d1Smrg    tmpdepfile1=$dir$base.u
2359f4658d1Smrg    tmpdepfile2=$dir$base.u
2369f4658d1Smrg    tmpdepfile3=$dir$base.u
237c06b6b69Smrg    "$@" -M
238c06b6b69Smrg  fi
239c06b6b69Smrg  stat=$?
240c06b6b69Smrg
241c06b6b69Smrg  if test $stat -eq 0; then :
242c06b6b69Smrg  else
2439f4658d1Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
244c06b6b69Smrg    exit $stat
245c06b6b69Smrg  fi
246c06b6b69Smrg
2479f4658d1Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2489f4658d1Smrg  do
2499f4658d1Smrg    test -f "$tmpdepfile" && break
2509f4658d1Smrg  done
251c06b6b69Smrg  if test -f "$tmpdepfile"; then
252c06b6b69Smrg    # Each line is of the form `foo.o: dependent.h'.
253c06b6b69Smrg    # Do two passes, one to just change these to
254c06b6b69Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
2559f4658d1Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
2569f4658d1Smrg    # That's a tab and a space in the [].
2579f4658d1Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
258c06b6b69Smrg  else
259c06b6b69Smrg    # The sourcefile does not contain any dependencies, so just
260c06b6b69Smrg    # store a dummy comment line, to avoid errors with the Makefile
261c06b6b69Smrg    # "include basename.Plo" scheme.
262c06b6b69Smrg    echo "#dummy" > "$depfile"
263c06b6b69Smrg  fi
264c06b6b69Smrg  rm -f "$tmpdepfile"
265c06b6b69Smrg  ;;
266c06b6b69Smrg
267c06b6b69Smrgicc)
268c06b6b69Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
269c06b6b69Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
270c06b6b69Smrg  # ICC 7.0 will fill foo.d with something like
271c06b6b69Smrg  #    foo.o: sub/foo.c
272c06b6b69Smrg  #    foo.o: sub/foo.h
273c06b6b69Smrg  # which is wrong.  We want:
274c06b6b69Smrg  #    sub/foo.o: sub/foo.c
275c06b6b69Smrg  #    sub/foo.o: sub/foo.h
276c06b6b69Smrg  #    sub/foo.c:
277c06b6b69Smrg  #    sub/foo.h:
278c06b6b69Smrg  # ICC 7.1 will output
279c06b6b69Smrg  #    foo.o: sub/foo.c sub/foo.h
280c06b6b69Smrg  # and will wrap long lines using \ :
281c06b6b69Smrg  #    foo.o: sub/foo.c ... \
282c06b6b69Smrg  #     sub/foo.h ... \
283c06b6b69Smrg  #     ...
284c06b6b69Smrg
285c06b6b69Smrg  "$@" -MD -MF "$tmpdepfile"
286c06b6b69Smrg  stat=$?
287c06b6b69Smrg  if test $stat -eq 0; then :
288c06b6b69Smrg  else
289c06b6b69Smrg    rm -f "$tmpdepfile"
290c06b6b69Smrg    exit $stat
291c06b6b69Smrg  fi
292c06b6b69Smrg  rm -f "$depfile"
293c06b6b69Smrg  # Each line is of the form `foo.o: dependent.h',
294c06b6b69Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
295c06b6b69Smrg  # Do two passes, one to just change these to
296c06b6b69Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
297c06b6b69Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
298c06b6b69Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
299c06b6b69Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
300c06b6b69Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
301c06b6b69Smrg    sed -e 's/$/ :/' >> "$depfile"
302c06b6b69Smrg  rm -f "$tmpdepfile"
303c06b6b69Smrg  ;;
304c06b6b69Smrg
3059f4658d1Smrghp2)
3069f4658d1Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
3079f4658d1Smrg  # compilers, which have integrated preprocessors.  The correct option
3089f4658d1Smrg  # to use with these is +Maked; it writes dependencies to a file named
3099f4658d1Smrg  # 'foo.d', which lands next to the object file, wherever that
3109f4658d1Smrg  # happens to be.
3119f4658d1Smrg  # Much of this is similar to the tru64 case; see comments there.
3129f4658d1Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3139f4658d1Smrg  test "x$dir" = "x$object" && dir=
3149f4658d1Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3159f4658d1Smrg  if test "$libtool" = yes; then
3169f4658d1Smrg    tmpdepfile1=$dir$base.d
3179f4658d1Smrg    tmpdepfile2=$dir.libs/$base.d
3189f4658d1Smrg    "$@" -Wc,+Maked
3199f4658d1Smrg  else
3209f4658d1Smrg    tmpdepfile1=$dir$base.d
3219f4658d1Smrg    tmpdepfile2=$dir$base.d
3229f4658d1Smrg    "$@" +Maked
3239f4658d1Smrg  fi
3249f4658d1Smrg  stat=$?
3259f4658d1Smrg  if test $stat -eq 0; then :
3269f4658d1Smrg  else
3279f4658d1Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
3289f4658d1Smrg     exit $stat
3299f4658d1Smrg  fi
3309f4658d1Smrg
3319f4658d1Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
3329f4658d1Smrg  do
3339f4658d1Smrg    test -f "$tmpdepfile" && break
3349f4658d1Smrg  done
3359f4658d1Smrg  if test -f "$tmpdepfile"; then
3369f4658d1Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
3379f4658d1Smrg    # Add `dependent.h:' lines.
3387d17d341Smrg    sed -ne '2,${
3397d17d341Smrg	       s/^ *//
3407d17d341Smrg	       s/ \\*$//
3417d17d341Smrg	       s/$/:/
3427d17d341Smrg	       p
3437d17d341Smrg	     }' "$tmpdepfile" >> "$depfile"
3449f4658d1Smrg  else
3459f4658d1Smrg    echo "#dummy" > "$depfile"
3469f4658d1Smrg  fi
3479f4658d1Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
3489f4658d1Smrg  ;;
3499f4658d1Smrg
350c06b6b69Smrgtru64)
351c06b6b69Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
352c06b6b69Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
353c06b6b69Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
354c06b6b69Smrg   # dependencies in `foo.d' instead, so we check for that too.
355c06b6b69Smrg   # Subdirectories are respected.
356c06b6b69Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
357c06b6b69Smrg   test "x$dir" = "x$object" && dir=
358c06b6b69Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
359c06b6b69Smrg
360c06b6b69Smrg   if test "$libtool" = yes; then
361c06b6b69Smrg      # With Tru64 cc, shared objects can also be used to make a
3629f4658d1Smrg      # static library.  This mechanism is used in libtool 1.4 series to
363c06b6b69Smrg      # handle both shared and static libraries in a single compilation.
364c06b6b69Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
365c06b6b69Smrg      #
366c06b6b69Smrg      # With libtool 1.5 this exception was removed, and libtool now
367c06b6b69Smrg      # generates 2 separate objects for the 2 libraries.  These two
3689f4658d1Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
369c06b6b69Smrg      # in $dir$base.o.d.  We have to check for both files, because
370c06b6b69Smrg      # one of the two compilations can be disabled.  We should prefer
371c06b6b69Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
372c06b6b69Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
373c06b6b69Smrg      # the former would cause a distcleancheck panic.
374c06b6b69Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
375c06b6b69Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
376c06b6b69Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
377c06b6b69Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
378c06b6b69Smrg      "$@" -Wc,-MD
379c06b6b69Smrg   else
380c06b6b69Smrg      tmpdepfile1=$dir$base.o.d
381c06b6b69Smrg      tmpdepfile2=$dir$base.d
382c06b6b69Smrg      tmpdepfile3=$dir$base.d
383c06b6b69Smrg      tmpdepfile4=$dir$base.d
384c06b6b69Smrg      "$@" -MD
385c06b6b69Smrg   fi
386c06b6b69Smrg
387c06b6b69Smrg   stat=$?
388c06b6b69Smrg   if test $stat -eq 0; then :
389c06b6b69Smrg   else
390c06b6b69Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
391c06b6b69Smrg      exit $stat
392c06b6b69Smrg   fi
393c06b6b69Smrg
394c06b6b69Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
395c06b6b69Smrg   do
396c06b6b69Smrg     test -f "$tmpdepfile" && break
397c06b6b69Smrg   done
398c06b6b69Smrg   if test -f "$tmpdepfile"; then
399c06b6b69Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
400c06b6b69Smrg      # That's a tab and a space in the [].
401c06b6b69Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
402c06b6b69Smrg   else
403c06b6b69Smrg      echo "#dummy" > "$depfile"
404c06b6b69Smrg   fi
405c06b6b69Smrg   rm -f "$tmpdepfile"
406c06b6b69Smrg   ;;
407c06b6b69Smrg
408c06b6b69Smrg#nosideeffect)
409c06b6b69Smrg  # This comment above is used by automake to tell side-effect
410c06b6b69Smrg  # dependency tracking mechanisms from slower ones.
411c06b6b69Smrg
412c06b6b69Smrgdashmstdout)
413c06b6b69Smrg  # Important note: in order to support this mode, a compiler *must*
414c06b6b69Smrg  # always write the preprocessed file to stdout, regardless of -o.
415c06b6b69Smrg  "$@" || exit $?
416c06b6b69Smrg
417c06b6b69Smrg  # Remove the call to Libtool.
418c06b6b69Smrg  if test "$libtool" = yes; then
4197d17d341Smrg    while test "X$1" != 'X--mode=compile'; do
420c06b6b69Smrg      shift
421c06b6b69Smrg    done
422c06b6b69Smrg    shift
423c06b6b69Smrg  fi
424c06b6b69Smrg
425c06b6b69Smrg  # Remove `-o $object'.
426c06b6b69Smrg  IFS=" "
427c06b6b69Smrg  for arg
428c06b6b69Smrg  do
429c06b6b69Smrg    case $arg in
430c06b6b69Smrg    -o)
431c06b6b69Smrg      shift
432c06b6b69Smrg      ;;
433c06b6b69Smrg    $object)
434c06b6b69Smrg      shift
435c06b6b69Smrg      ;;
436c06b6b69Smrg    *)
437c06b6b69Smrg      set fnord "$@" "$arg"
438c06b6b69Smrg      shift # fnord
439c06b6b69Smrg      shift # $arg
440c06b6b69Smrg      ;;
441c06b6b69Smrg    esac
442c06b6b69Smrg  done
443c06b6b69Smrg
444c06b6b69Smrg  test -z "$dashmflag" && dashmflag=-M
445c06b6b69Smrg  # Require at least two characters before searching for `:'
446c06b6b69Smrg  # in the target name.  This is to cope with DOS-style filenames:
447c06b6b69Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
448c06b6b69Smrg  "$@" $dashmflag |
449c06b6b69Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
450c06b6b69Smrg  rm -f "$depfile"
451c06b6b69Smrg  cat < "$tmpdepfile" > "$depfile"
452c06b6b69Smrg  tr ' ' '
453c06b6b69Smrg' < "$tmpdepfile" | \
454c06b6b69Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
455c06b6b69Smrg## correctly.  Breaking it into two sed invocations is a workaround.
456c06b6b69Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
457c06b6b69Smrg  rm -f "$tmpdepfile"
458c06b6b69Smrg  ;;
459c06b6b69Smrg
460c06b6b69SmrgdashXmstdout)
461c06b6b69Smrg  # This case only exists to satisfy depend.m4.  It is never actually
462c06b6b69Smrg  # run, as this mode is specially recognized in the preamble.
463c06b6b69Smrg  exit 1
464c06b6b69Smrg  ;;
465c06b6b69Smrg
466c06b6b69Smrgmakedepend)
467c06b6b69Smrg  "$@" || exit $?
468c06b6b69Smrg  # Remove any Libtool call
469c06b6b69Smrg  if test "$libtool" = yes; then
4707d17d341Smrg    while test "X$1" != 'X--mode=compile'; do
471c06b6b69Smrg      shift
472c06b6b69Smrg    done
473c06b6b69Smrg    shift
474c06b6b69Smrg  fi
475c06b6b69Smrg  # X makedepend
476c06b6b69Smrg  shift
4777d17d341Smrg  cleared=no eat=no
4787d17d341Smrg  for arg
4797d17d341Smrg  do
480c06b6b69Smrg    case $cleared in
481c06b6b69Smrg    no)
482c06b6b69Smrg      set ""; shift
483c06b6b69Smrg      cleared=yes ;;
484c06b6b69Smrg    esac
4857d17d341Smrg    if test $eat = yes; then
4867d17d341Smrg      eat=no
4877d17d341Smrg      continue
4887d17d341Smrg    fi
489c06b6b69Smrg    case "$arg" in
490c06b6b69Smrg    -D*|-I*)
491c06b6b69Smrg      set fnord "$@" "$arg"; shift ;;
492c06b6b69Smrg    # Strip any option that makedepend may not understand.  Remove
493c06b6b69Smrg    # the object too, otherwise makedepend will parse it as a source file.
4947d17d341Smrg    -arch)
4957d17d341Smrg      eat=yes ;;
496c06b6b69Smrg    -*|$object)
497c06b6b69Smrg      ;;
498c06b6b69Smrg    *)
499c06b6b69Smrg      set fnord "$@" "$arg"; shift ;;
500c06b6b69Smrg    esac
501c06b6b69Smrg  done
5027d17d341Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
503c06b6b69Smrg  touch "$tmpdepfile"
504c06b6b69Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
505c06b6b69Smrg  rm -f "$depfile"
506c06b6b69Smrg  cat < "$tmpdepfile" > "$depfile"
507c06b6b69Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
508c06b6b69Smrg' | \
509c06b6b69Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
510c06b6b69Smrg## correctly.  Breaking it into two sed invocations is a workaround.
511c06b6b69Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
512c06b6b69Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
513c06b6b69Smrg  ;;
514c06b6b69Smrg
515c06b6b69Smrgcpp)
516c06b6b69Smrg  # Important note: in order to support this mode, a compiler *must*
517c06b6b69Smrg  # always write the preprocessed file to stdout.
518c06b6b69Smrg  "$@" || exit $?
519c06b6b69Smrg
520c06b6b69Smrg  # Remove the call to Libtool.
521c06b6b69Smrg  if test "$libtool" = yes; then
5227d17d341Smrg    while test "X$1" != 'X--mode=compile'; do
523c06b6b69Smrg      shift
524c06b6b69Smrg    done
525c06b6b69Smrg    shift
526c06b6b69Smrg  fi
527c06b6b69Smrg
528c06b6b69Smrg  # Remove `-o $object'.
529c06b6b69Smrg  IFS=" "
530c06b6b69Smrg  for arg
531c06b6b69Smrg  do
532c06b6b69Smrg    case $arg in
533c06b6b69Smrg    -o)
534c06b6b69Smrg      shift
535c06b6b69Smrg      ;;
536c06b6b69Smrg    $object)
537c06b6b69Smrg      shift
538c06b6b69Smrg      ;;
539c06b6b69Smrg    *)
540c06b6b69Smrg      set fnord "$@" "$arg"
541c06b6b69Smrg      shift # fnord
542c06b6b69Smrg      shift # $arg
543c06b6b69Smrg      ;;
544c06b6b69Smrg    esac
545c06b6b69Smrg  done
546c06b6b69Smrg
547c06b6b69Smrg  "$@" -E |
548c06b6b69Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
549c06b6b69Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
550c06b6b69Smrg    sed '$ s: \\$::' > "$tmpdepfile"
551c06b6b69Smrg  rm -f "$depfile"
552c06b6b69Smrg  echo "$object : \\" > "$depfile"
553c06b6b69Smrg  cat < "$tmpdepfile" >> "$depfile"
554c06b6b69Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
555c06b6b69Smrg  rm -f "$tmpdepfile"
556c06b6b69Smrg  ;;
557c06b6b69Smrg
558c06b6b69Smrgmsvisualcpp)
559c06b6b69Smrg  # Important note: in order to support this mode, a compiler *must*
5607d17d341Smrg  # always write the preprocessed file to stdout.
561c06b6b69Smrg  "$@" || exit $?
5627d17d341Smrg
5637d17d341Smrg  # Remove the call to Libtool.
5647d17d341Smrg  if test "$libtool" = yes; then
5657d17d341Smrg    while test "X$1" != 'X--mode=compile'; do
5667d17d341Smrg      shift
5677d17d341Smrg    done
5687d17d341Smrg    shift
5697d17d341Smrg  fi
5707d17d341Smrg
571c06b6b69Smrg  IFS=" "
572c06b6b69Smrg  for arg
573c06b6b69Smrg  do
574c06b6b69Smrg    case "$arg" in
5757d17d341Smrg    -o)
5767d17d341Smrg      shift
5777d17d341Smrg      ;;
5787d17d341Smrg    $object)
5797d17d341Smrg      shift
5807d17d341Smrg      ;;
581c06b6b69Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
582c06b6b69Smrg	set fnord "$@"
583c06b6b69Smrg	shift
584c06b6b69Smrg	shift
585c06b6b69Smrg	;;
586c06b6b69Smrg    *)
587c06b6b69Smrg	set fnord "$@" "$arg"
588c06b6b69Smrg	shift
589c06b6b69Smrg	shift
590c06b6b69Smrg	;;
591c06b6b69Smrg    esac
592c06b6b69Smrg  done
5937d17d341Smrg  "$@" -E 2>/dev/null |
5947d17d341Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
595c06b6b69Smrg  rm -f "$depfile"
596c06b6b69Smrg  echo "$object : \\" > "$depfile"
5977d17d341Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
598c06b6b69Smrg  echo "	" >> "$depfile"
5997d17d341Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
600c06b6b69Smrg  rm -f "$tmpdepfile"
601c06b6b69Smrg  ;;
602c06b6b69Smrg
6037d17d341Smrgmsvcmsys)
6047d17d341Smrg  # This case exists only to let depend.m4 do its work.  It works by
6057d17d341Smrg  # looking at the text of this script.  This case will never be run,
6067d17d341Smrg  # since it is checked for above.
6077d17d341Smrg  exit 1
6087d17d341Smrg  ;;
6097d17d341Smrg
610c06b6b69Smrgnone)
611c06b6b69Smrg  exec "$@"
612c06b6b69Smrg  ;;
613c06b6b69Smrg
614c06b6b69Smrg*)
615c06b6b69Smrg  echo "Unknown depmode $depmode" 1>&2
616c06b6b69Smrg  exit 1
617c06b6b69Smrg  ;;
618c06b6b69Smrgesac
619c06b6b69Smrg
620c06b6b69Smrgexit 0
621c06b6b69Smrg
622c06b6b69Smrg# Local Variables:
623c06b6b69Smrg# mode: shell-script
624c06b6b69Smrg# sh-indentation: 2
625c06b6b69Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
626c06b6b69Smrg# time-stamp-start: "scriptversion="
627c06b6b69Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
6287d17d341Smrg# time-stamp-time-zone: "UTC"
6297d17d341Smrg# time-stamp-end: "; # UTC"
630c06b6b69Smrg# End:
631