depcomp revision 9ef7378b
1c19de146Smrg#! /bin/sh
2c19de146Smrg# depcomp - compile a program generating dependencies as side-effects
39ef7378bSmrg
49ef7378bSmrgscriptversion=2009-04-28.21; # UTC
59ef7378bSmrg
69ef7378bSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
79ef7378bSmrg# Software Foundation, Inc.
8c19de146Smrg
9c19de146Smrg# This program is free software; you can redistribute it and/or modify
10c19de146Smrg# it under the terms of the GNU General Public License as published by
11c19de146Smrg# the Free Software Foundation; either version 2, or (at your option)
12c19de146Smrg# any later version.
13c19de146Smrg
14c19de146Smrg# This program is distributed in the hope that it will be useful,
15c19de146Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
16c19de146Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17c19de146Smrg# GNU General Public License for more details.
18c19de146Smrg
19c19de146Smrg# You should have received a copy of the GNU General Public License
209ef7378bSmrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
21c19de146Smrg
22c19de146Smrg# As a special exception to the GNU General Public License, if you
23c19de146Smrg# distribute this file as part of a program that contains a
24c19de146Smrg# configuration script generated by Autoconf, you may include it under
25c19de146Smrg# the same distribution terms that you use for the rest of that program.
26c19de146Smrg
27c19de146Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
28c19de146Smrg
299ef7378bSmrgcase $1 in
309ef7378bSmrg  '')
319ef7378bSmrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
329ef7378bSmrg     exit 1;
339ef7378bSmrg     ;;
349ef7378bSmrg  -h | --h*)
359ef7378bSmrg    cat <<\EOF
369ef7378bSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
379ef7378bSmrg
389ef7378bSmrgRun PROGRAMS ARGS to compile a file, generating dependencies
399ef7378bSmrgas side-effects.
409ef7378bSmrg
419ef7378bSmrgEnvironment variables:
429ef7378bSmrg  depmode     Dependency tracking mode.
439ef7378bSmrg  source      Source file read by `PROGRAMS ARGS'.
449ef7378bSmrg  object      Object file output by `PROGRAMS ARGS'.
459ef7378bSmrg  DEPDIR      directory where to store dependencies.
469ef7378bSmrg  depfile     Dependency file to output.
479ef7378bSmrg  tmpdepfile  Temporary file to use when outputing dependencies.
489ef7378bSmrg  libtool     Whether libtool is used (yes/no).
499ef7378bSmrg
509ef7378bSmrgReport bugs to <bug-automake@gnu.org>.
519ef7378bSmrgEOF
529ef7378bSmrg    exit $?
539ef7378bSmrg    ;;
549ef7378bSmrg  -v | --v*)
559ef7378bSmrg    echo "depcomp $scriptversion"
569ef7378bSmrg    exit $?
579ef7378bSmrg    ;;
589ef7378bSmrgesac
599ef7378bSmrg
60c19de146Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
61c19de146Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
62c19de146Smrg  exit 1
63c19de146Smrgfi
64c19de146Smrg
659ef7378bSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
669ef7378bSmrgdepfile=${depfile-`echo "$object" |
679ef7378bSmrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
68c19de146Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
69c19de146Smrg
70c19de146Smrgrm -f "$tmpdepfile"
71c19de146Smrg
72c19de146Smrg# Some modes work just like other modes, but use different flags.  We
73c19de146Smrg# parameterize here, but still list the modes in the big case below,
74c19de146Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
75c19de146Smrg# here, because this file can only contain one case statement.
76c19de146Smrgif test "$depmode" = hp; then
77c19de146Smrg  # HP compiler uses -M and no extra arg.
78c19de146Smrg  gccflag=-M
79c19de146Smrg  depmode=gcc
80c19de146Smrgfi
81c19de146Smrg
82c19de146Smrgif test "$depmode" = dashXmstdout; then
83c19de146Smrg   # This is just like dashmstdout with a different argument.
84c19de146Smrg   dashmflag=-xM
85c19de146Smrg   depmode=dashmstdout
86c19de146Smrgfi
87c19de146Smrg
889ef7378bSmrgcygpath_u="cygpath -u -f -"
899ef7378bSmrgif test "$depmode" = msvcmsys; then
909ef7378bSmrg   # This is just like msvisualcpp but w/o cygpath translation.
919ef7378bSmrg   # Just convert the backslash-escaped backslashes to single forward
929ef7378bSmrg   # slashes to satisfy depend.m4
939ef7378bSmrg   cygpath_u="sed s,\\\\\\\\,/,g"
949ef7378bSmrg   depmode=msvisualcpp
959ef7378bSmrgfi
969ef7378bSmrg
97c19de146Smrgcase "$depmode" in
98c19de146Smrggcc3)
99c19de146Smrg## gcc 3 implements dependency tracking that does exactly what
100c19de146Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
101c19de146Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
1029ef7378bSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
1039ef7378bSmrg## the command line argument order; so add the flags where they
1049ef7378bSmrg## appear in depend2.am.  Note that the slowdown incurred here
1059ef7378bSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
1069ef7378bSmrg  for arg
1079ef7378bSmrg  do
1089ef7378bSmrg    case $arg in
1099ef7378bSmrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
1109ef7378bSmrg    *)  set fnord "$@" "$arg" ;;
1119ef7378bSmrg    esac
1129ef7378bSmrg    shift # fnord
1139ef7378bSmrg    shift # $arg
1149ef7378bSmrg  done
1159ef7378bSmrg  "$@"
116c19de146Smrg  stat=$?
117c19de146Smrg  if test $stat -eq 0; then :
118c19de146Smrg  else
119c19de146Smrg    rm -f "$tmpdepfile"
120c19de146Smrg    exit $stat
121c19de146Smrg  fi
122c19de146Smrg  mv "$tmpdepfile" "$depfile"
123c19de146Smrg  ;;
124c19de146Smrg
125c19de146Smrggcc)
126c19de146Smrg## There are various ways to get dependency output from gcc.  Here's
127c19de146Smrg## why we pick this rather obscure method:
128c19de146Smrg## - Don't want to use -MD because we'd like the dependencies to end
129c19de146Smrg##   up in a subdir.  Having to rename by hand is ugly.
130c19de146Smrg##   (We might end up doing this anyway to support other compilers.)
131c19de146Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
132c19de146Smrg##   -MM, not -M (despite what the docs say).
133c19de146Smrg## - Using -M directly means running the compiler twice (even worse
134c19de146Smrg##   than renaming).
135c19de146Smrg  if test -z "$gccflag"; then
136c19de146Smrg    gccflag=-MD,
137c19de146Smrg  fi
138c19de146Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
139c19de146Smrg  stat=$?
140c19de146Smrg  if test $stat -eq 0; then :
141c19de146Smrg  else
142c19de146Smrg    rm -f "$tmpdepfile"
143c19de146Smrg    exit $stat
144c19de146Smrg  fi
145c19de146Smrg  rm -f "$depfile"
146c19de146Smrg  echo "$object : \\" > "$depfile"
147c19de146Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
148c19de146Smrg## The second -e expression handles DOS-style file names with drive letters.
149c19de146Smrg  sed -e 's/^[^:]*: / /' \
150c19de146Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
151c19de146Smrg## This next piece of magic avoids the `deleted header file' problem.
152c19de146Smrg## The problem is that when a header file which appears in a .P file
153c19de146Smrg## is deleted, the dependency causes make to die (because there is
154c19de146Smrg## typically no way to rebuild the header).  We avoid this by adding
155c19de146Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
156c19de146Smrg## this for us directly.
157c19de146Smrg  tr ' ' '
158c19de146Smrg' < "$tmpdepfile" |
159c19de146Smrg## Some versions of gcc put a space before the `:'.  On the theory
160c19de146Smrg## that the space means something, we add a space to the output as
161c19de146Smrg## well.
162c19de146Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
163c19de146Smrg## correctly.  Breaking it into two sed invocations is a workaround.
164c19de146Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
165c19de146Smrg  rm -f "$tmpdepfile"
166c19de146Smrg  ;;
167c19de146Smrg
168c19de146Smrghp)
169c19de146Smrg  # This case exists only to let depend.m4 do its work.  It works by
170c19de146Smrg  # looking at the text of this script.  This case will never be run,
171c19de146Smrg  # since it is checked for above.
172c19de146Smrg  exit 1
173c19de146Smrg  ;;
174c19de146Smrg
175c19de146Smrgsgi)
176c19de146Smrg  if test "$libtool" = yes; then
177c19de146Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
178c19de146Smrg  else
179c19de146Smrg    "$@" -MDupdate "$tmpdepfile"
180c19de146Smrg  fi
181c19de146Smrg  stat=$?
182c19de146Smrg  if test $stat -eq 0; then :
183c19de146Smrg  else
184c19de146Smrg    rm -f "$tmpdepfile"
185c19de146Smrg    exit $stat
186c19de146Smrg  fi
187c19de146Smrg  rm -f "$depfile"
188c19de146Smrg
189c19de146Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
190c19de146Smrg    echo "$object : \\" > "$depfile"
191c19de146Smrg
192c19de146Smrg    # Clip off the initial element (the dependent).  Don't try to be
193c19de146Smrg    # clever and replace this with sed code, as IRIX sed won't handle
194c19de146Smrg    # lines with more than a fixed number of characters (4096 in
195c19de146Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
196c19de146Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
197c19de146Smrg    # dependency line.
198c19de146Smrg    tr ' ' '
199c19de146Smrg' < "$tmpdepfile" \
200c19de146Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
201c19de146Smrg    tr '
2029ef7378bSmrg' ' ' >> "$depfile"
2039ef7378bSmrg    echo >> "$depfile"
204c19de146Smrg
205c19de146Smrg    # The second pass generates a dummy entry for each header file.
206c19de146Smrg    tr ' ' '
207c19de146Smrg' < "$tmpdepfile" \
208c19de146Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
2099ef7378bSmrg   >> "$depfile"
210c19de146Smrg  else
211c19de146Smrg    # The sourcefile does not contain any dependencies, so just
212c19de146Smrg    # store a dummy comment line, to avoid errors with the Makefile
213c19de146Smrg    # "include basename.Plo" scheme.
214c19de146Smrg    echo "#dummy" > "$depfile"
215c19de146Smrg  fi
216c19de146Smrg  rm -f "$tmpdepfile"
217c19de146Smrg  ;;
218c19de146Smrg
219c19de146Smrgaix)
220c19de146Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
221c19de146Smrg  # in a .u file.  In older versions, this file always lives in the
222c19de146Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
223c19de146Smrg  # start of each line; $object doesn't have directory information.
224c19de146Smrg  # Version 6 uses the directory in both cases.
2259ef7378bSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
2269ef7378bSmrg  test "x$dir" = "x$object" && dir=
2279ef7378bSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
228c19de146Smrg  if test "$libtool" = yes; then
2299ef7378bSmrg    tmpdepfile1=$dir$base.u
2309ef7378bSmrg    tmpdepfile2=$base.u
2319ef7378bSmrg    tmpdepfile3=$dir.libs/$base.u
232c19de146Smrg    "$@" -Wc,-M
233c19de146Smrg  else
2349ef7378bSmrg    tmpdepfile1=$dir$base.u
2359ef7378bSmrg    tmpdepfile2=$dir$base.u
2369ef7378bSmrg    tmpdepfile3=$dir$base.u
237c19de146Smrg    "$@" -M
238c19de146Smrg  fi
239c19de146Smrg  stat=$?
240c19de146Smrg
241c19de146Smrg  if test $stat -eq 0; then :
242c19de146Smrg  else
2439ef7378bSmrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
244c19de146Smrg    exit $stat
245c19de146Smrg  fi
246c19de146Smrg
2479ef7378bSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2489ef7378bSmrg  do
2499ef7378bSmrg    test -f "$tmpdepfile" && break
2509ef7378bSmrg  done
251c19de146Smrg  if test -f "$tmpdepfile"; then
252c19de146Smrg    # Each line is of the form `foo.o: dependent.h'.
253c19de146Smrg    # Do two passes, one to just change these to
254c19de146Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
2559ef7378bSmrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
2569ef7378bSmrg    # That's a tab and a space in the [].
2579ef7378bSmrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
258c19de146Smrg  else
259c19de146Smrg    # The sourcefile does not contain any dependencies, so just
260c19de146Smrg    # store a dummy comment line, to avoid errors with the Makefile
261c19de146Smrg    # "include basename.Plo" scheme.
262c19de146Smrg    echo "#dummy" > "$depfile"
263c19de146Smrg  fi
264c19de146Smrg  rm -f "$tmpdepfile"
265c19de146Smrg  ;;
266c19de146Smrg
267c19de146Smrgicc)
268c19de146Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
269c19de146Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
270c19de146Smrg  # ICC 7.0 will fill foo.d with something like
271c19de146Smrg  #    foo.o: sub/foo.c
272c19de146Smrg  #    foo.o: sub/foo.h
273c19de146Smrg  # which is wrong.  We want:
274c19de146Smrg  #    sub/foo.o: sub/foo.c
275c19de146Smrg  #    sub/foo.o: sub/foo.h
276c19de146Smrg  #    sub/foo.c:
277c19de146Smrg  #    sub/foo.h:
278c19de146Smrg  # ICC 7.1 will output
279c19de146Smrg  #    foo.o: sub/foo.c sub/foo.h
280c19de146Smrg  # and will wrap long lines using \ :
281c19de146Smrg  #    foo.o: sub/foo.c ... \
282c19de146Smrg  #     sub/foo.h ... \
283c19de146Smrg  #     ...
284c19de146Smrg
285c19de146Smrg  "$@" -MD -MF "$tmpdepfile"
286c19de146Smrg  stat=$?
287c19de146Smrg  if test $stat -eq 0; then :
288c19de146Smrg  else
289c19de146Smrg    rm -f "$tmpdepfile"
290c19de146Smrg    exit $stat
291c19de146Smrg  fi
292c19de146Smrg  rm -f "$depfile"
293c19de146Smrg  # Each line is of the form `foo.o: dependent.h',
294c19de146Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
295c19de146Smrg  # Do two passes, one to just change these to
296c19de146Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
297c19de146Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
298c19de146Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
299c19de146Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
300c19de146Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
301c19de146Smrg    sed -e 's/$/ :/' >> "$depfile"
302c19de146Smrg  rm -f "$tmpdepfile"
303c19de146Smrg  ;;
304c19de146Smrg
3059ef7378bSmrghp2)
3069ef7378bSmrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
3079ef7378bSmrg  # compilers, which have integrated preprocessors.  The correct option
3089ef7378bSmrg  # to use with these is +Maked; it writes dependencies to a file named
3099ef7378bSmrg  # 'foo.d', which lands next to the object file, wherever that
3109ef7378bSmrg  # happens to be.
3119ef7378bSmrg  # Much of this is similar to the tru64 case; see comments there.
3129ef7378bSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3139ef7378bSmrg  test "x$dir" = "x$object" && dir=
3149ef7378bSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3159ef7378bSmrg  if test "$libtool" = yes; then
3169ef7378bSmrg    tmpdepfile1=$dir$base.d
3179ef7378bSmrg    tmpdepfile2=$dir.libs/$base.d
3189ef7378bSmrg    "$@" -Wc,+Maked
3199ef7378bSmrg  else
3209ef7378bSmrg    tmpdepfile1=$dir$base.d
3219ef7378bSmrg    tmpdepfile2=$dir$base.d
3229ef7378bSmrg    "$@" +Maked
3239ef7378bSmrg  fi
3249ef7378bSmrg  stat=$?
3259ef7378bSmrg  if test $stat -eq 0; then :
3269ef7378bSmrg  else
3279ef7378bSmrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
3289ef7378bSmrg     exit $stat
3299ef7378bSmrg  fi
3309ef7378bSmrg
3319ef7378bSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
3329ef7378bSmrg  do
3339ef7378bSmrg    test -f "$tmpdepfile" && break
3349ef7378bSmrg  done
3359ef7378bSmrg  if test -f "$tmpdepfile"; then
3369ef7378bSmrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
3379ef7378bSmrg    # Add `dependent.h:' lines.
3389ef7378bSmrg    sed -ne '2,${
3399ef7378bSmrg	       s/^ *//
3409ef7378bSmrg	       s/ \\*$//
3419ef7378bSmrg	       s/$/:/
3429ef7378bSmrg	       p
3439ef7378bSmrg	     }' "$tmpdepfile" >> "$depfile"
3449ef7378bSmrg  else
3459ef7378bSmrg    echo "#dummy" > "$depfile"
3469ef7378bSmrg  fi
3479ef7378bSmrg  rm -f "$tmpdepfile" "$tmpdepfile2"
3489ef7378bSmrg  ;;
3499ef7378bSmrg
350c19de146Smrgtru64)
351c19de146Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
352c19de146Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
353c19de146Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
354c19de146Smrg   # dependencies in `foo.d' instead, so we check for that too.
355c19de146Smrg   # Subdirectories are respected.
356c19de146Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
357c19de146Smrg   test "x$dir" = "x$object" && dir=
358c19de146Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
359c19de146Smrg
360c19de146Smrg   if test "$libtool" = yes; then
3619ef7378bSmrg      # With Tru64 cc, shared objects can also be used to make a
3629ef7378bSmrg      # static library.  This mechanism is used in libtool 1.4 series to
3639ef7378bSmrg      # handle both shared and static libraries in a single compilation.
3649ef7378bSmrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
3659ef7378bSmrg      #
3669ef7378bSmrg      # With libtool 1.5 this exception was removed, and libtool now
3679ef7378bSmrg      # generates 2 separate objects for the 2 libraries.  These two
3689ef7378bSmrg      # compilations output dependencies in $dir.libs/$base.o.d and
3699ef7378bSmrg      # in $dir$base.o.d.  We have to check for both files, because
3709ef7378bSmrg      # one of the two compilations can be disabled.  We should prefer
3719ef7378bSmrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
3729ef7378bSmrg      # automatically cleaned when .libs/ is deleted, while ignoring
3739ef7378bSmrg      # the former would cause a distcleancheck panic.
3749ef7378bSmrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
3759ef7378bSmrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
3769ef7378bSmrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
3779ef7378bSmrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
378c19de146Smrg      "$@" -Wc,-MD
379c19de146Smrg   else
3809ef7378bSmrg      tmpdepfile1=$dir$base.o.d
3819ef7378bSmrg      tmpdepfile2=$dir$base.d
3829ef7378bSmrg      tmpdepfile3=$dir$base.d
3839ef7378bSmrg      tmpdepfile4=$dir$base.d
384c19de146Smrg      "$@" -MD
385c19de146Smrg   fi
386c19de146Smrg
387c19de146Smrg   stat=$?
388c19de146Smrg   if test $stat -eq 0; then :
389c19de146Smrg   else
3909ef7378bSmrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
391c19de146Smrg      exit $stat
392c19de146Smrg   fi
393c19de146Smrg
3949ef7378bSmrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3959ef7378bSmrg   do
3969ef7378bSmrg     test -f "$tmpdepfile" && break
3979ef7378bSmrg   done
398c19de146Smrg   if test -f "$tmpdepfile"; then
399c19de146Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
400c19de146Smrg      # That's a tab and a space in the [].
401c19de146Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
402c19de146Smrg   else
403c19de146Smrg      echo "#dummy" > "$depfile"
404c19de146Smrg   fi
405c19de146Smrg   rm -f "$tmpdepfile"
406c19de146Smrg   ;;
407c19de146Smrg
408c19de146Smrg#nosideeffect)
409c19de146Smrg  # This comment above is used by automake to tell side-effect
410c19de146Smrg  # dependency tracking mechanisms from slower ones.
411c19de146Smrg
412c19de146Smrgdashmstdout)
413c19de146Smrg  # Important note: in order to support this mode, a compiler *must*
414c19de146Smrg  # always write the preprocessed file to stdout, regardless of -o.
415c19de146Smrg  "$@" || exit $?
416c19de146Smrg
417c19de146Smrg  # Remove the call to Libtool.
418c19de146Smrg  if test "$libtool" = yes; then
4199ef7378bSmrg    while test "X$1" != 'X--mode=compile'; do
420c19de146Smrg      shift
421c19de146Smrg    done
422c19de146Smrg    shift
423c19de146Smrg  fi
424c19de146Smrg
425c19de146Smrg  # Remove `-o $object'.
426c19de146Smrg  IFS=" "
427c19de146Smrg  for arg
428c19de146Smrg  do
429c19de146Smrg    case $arg in
430c19de146Smrg    -o)
431c19de146Smrg      shift
432c19de146Smrg      ;;
433c19de146Smrg    $object)
434c19de146Smrg      shift
435c19de146Smrg      ;;
436c19de146Smrg    *)
437c19de146Smrg      set fnord "$@" "$arg"
438c19de146Smrg      shift # fnord
439c19de146Smrg      shift # $arg
440c19de146Smrg      ;;
441c19de146Smrg    esac
442c19de146Smrg  done
443c19de146Smrg
444c19de146Smrg  test -z "$dashmflag" && dashmflag=-M
445c19de146Smrg  # Require at least two characters before searching for `:'
446c19de146Smrg  # in the target name.  This is to cope with DOS-style filenames:
447c19de146Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
448c19de146Smrg  "$@" $dashmflag |
449c19de146Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
450c19de146Smrg  rm -f "$depfile"
451c19de146Smrg  cat < "$tmpdepfile" > "$depfile"
452c19de146Smrg  tr ' ' '
453c19de146Smrg' < "$tmpdepfile" | \
454c19de146Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
455c19de146Smrg## correctly.  Breaking it into two sed invocations is a workaround.
456c19de146Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
457c19de146Smrg  rm -f "$tmpdepfile"
458c19de146Smrg  ;;
459c19de146Smrg
460c19de146SmrgdashXmstdout)
461c19de146Smrg  # This case only exists to satisfy depend.m4.  It is never actually
462c19de146Smrg  # run, as this mode is specially recognized in the preamble.
463c19de146Smrg  exit 1
464c19de146Smrg  ;;
465c19de146Smrg
466c19de146Smrgmakedepend)
467c19de146Smrg  "$@" || exit $?
468c19de146Smrg  # Remove any Libtool call
469c19de146Smrg  if test "$libtool" = yes; then
4709ef7378bSmrg    while test "X$1" != 'X--mode=compile'; do
471c19de146Smrg      shift
472c19de146Smrg    done
473c19de146Smrg    shift
474c19de146Smrg  fi
475c19de146Smrg  # X makedepend
476c19de146Smrg  shift
4779ef7378bSmrg  cleared=no eat=no
4789ef7378bSmrg  for arg
4799ef7378bSmrg  do
480c19de146Smrg    case $cleared in
481c19de146Smrg    no)
482c19de146Smrg      set ""; shift
483c19de146Smrg      cleared=yes ;;
484c19de146Smrg    esac
4859ef7378bSmrg    if test $eat = yes; then
4869ef7378bSmrg      eat=no
4879ef7378bSmrg      continue
4889ef7378bSmrg    fi
489c19de146Smrg    case "$arg" in
490c19de146Smrg    -D*|-I*)
491c19de146Smrg      set fnord "$@" "$arg"; shift ;;
492c19de146Smrg    # Strip any option that makedepend may not understand.  Remove
493c19de146Smrg    # the object too, otherwise makedepend will parse it as a source file.
4949ef7378bSmrg    -arch)
4959ef7378bSmrg      eat=yes ;;
496c19de146Smrg    -*|$object)
497c19de146Smrg      ;;
498c19de146Smrg    *)
499c19de146Smrg      set fnord "$@" "$arg"; shift ;;
500c19de146Smrg    esac
501c19de146Smrg  done
5029ef7378bSmrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
503c19de146Smrg  touch "$tmpdepfile"
504c19de146Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
505c19de146Smrg  rm -f "$depfile"
506c19de146Smrg  cat < "$tmpdepfile" > "$depfile"
507c19de146Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
508c19de146Smrg' | \
509c19de146Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
510c19de146Smrg## correctly.  Breaking it into two sed invocations is a workaround.
511c19de146Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
512c19de146Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
513c19de146Smrg  ;;
514c19de146Smrg
515c19de146Smrgcpp)
516c19de146Smrg  # Important note: in order to support this mode, a compiler *must*
517c19de146Smrg  # always write the preprocessed file to stdout.
518c19de146Smrg  "$@" || exit $?
519c19de146Smrg
520c19de146Smrg  # Remove the call to Libtool.
521c19de146Smrg  if test "$libtool" = yes; then
5229ef7378bSmrg    while test "X$1" != 'X--mode=compile'; do
523c19de146Smrg      shift
524c19de146Smrg    done
525c19de146Smrg    shift
526c19de146Smrg  fi
527c19de146Smrg
528c19de146Smrg  # Remove `-o $object'.
529c19de146Smrg  IFS=" "
530c19de146Smrg  for arg
531c19de146Smrg  do
532c19de146Smrg    case $arg in
533c19de146Smrg    -o)
534c19de146Smrg      shift
535c19de146Smrg      ;;
536c19de146Smrg    $object)
537c19de146Smrg      shift
538c19de146Smrg      ;;
539c19de146Smrg    *)
540c19de146Smrg      set fnord "$@" "$arg"
541c19de146Smrg      shift # fnord
542c19de146Smrg      shift # $arg
543c19de146Smrg      ;;
544c19de146Smrg    esac
545c19de146Smrg  done
546c19de146Smrg
547c19de146Smrg  "$@" -E |
5489ef7378bSmrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
5499ef7378bSmrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
550c19de146Smrg    sed '$ s: \\$::' > "$tmpdepfile"
551c19de146Smrg  rm -f "$depfile"
552c19de146Smrg  echo "$object : \\" > "$depfile"
553c19de146Smrg  cat < "$tmpdepfile" >> "$depfile"
554c19de146Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
555c19de146Smrg  rm -f "$tmpdepfile"
556c19de146Smrg  ;;
557c19de146Smrg
558c19de146Smrgmsvisualcpp)
559c19de146Smrg  # Important note: in order to support this mode, a compiler *must*
5609ef7378bSmrg  # always write the preprocessed file to stdout.
561c19de146Smrg  "$@" || exit $?
5629ef7378bSmrg
5639ef7378bSmrg  # Remove the call to Libtool.
5649ef7378bSmrg  if test "$libtool" = yes; then
5659ef7378bSmrg    while test "X$1" != 'X--mode=compile'; do
5669ef7378bSmrg      shift
5679ef7378bSmrg    done
5689ef7378bSmrg    shift
5699ef7378bSmrg  fi
5709ef7378bSmrg
571c19de146Smrg  IFS=" "
572c19de146Smrg  for arg
573c19de146Smrg  do
574c19de146Smrg    case "$arg" in
5759ef7378bSmrg    -o)
5769ef7378bSmrg      shift
5779ef7378bSmrg      ;;
5789ef7378bSmrg    $object)
5799ef7378bSmrg      shift
5809ef7378bSmrg      ;;
581c19de146Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
582c19de146Smrg	set fnord "$@"
583c19de146Smrg	shift
584c19de146Smrg	shift
585c19de146Smrg	;;
586c19de146Smrg    *)
587c19de146Smrg	set fnord "$@" "$arg"
588c19de146Smrg	shift
589c19de146Smrg	shift
590c19de146Smrg	;;
591c19de146Smrg    esac
592c19de146Smrg  done
5939ef7378bSmrg  "$@" -E 2>/dev/null |
5949ef7378bSmrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
595c19de146Smrg  rm -f "$depfile"
596c19de146Smrg  echo "$object : \\" > "$depfile"
5979ef7378bSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
598c19de146Smrg  echo "	" >> "$depfile"
5999ef7378bSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
600c19de146Smrg  rm -f "$tmpdepfile"
601c19de146Smrg  ;;
602c19de146Smrg
6039ef7378bSmrgmsvcmsys)
6049ef7378bSmrg  # This case exists only to let depend.m4 do its work.  It works by
6059ef7378bSmrg  # looking at the text of this script.  This case will never be run,
6069ef7378bSmrg  # since it is checked for above.
6079ef7378bSmrg  exit 1
6089ef7378bSmrg  ;;
6099ef7378bSmrg
610c19de146Smrgnone)
611c19de146Smrg  exec "$@"
612c19de146Smrg  ;;
613c19de146Smrg
614c19de146Smrg*)
615c19de146Smrg  echo "Unknown depmode $depmode" 1>&2
616c19de146Smrg  exit 1
617c19de146Smrg  ;;
618c19de146Smrgesac
619c19de146Smrg
620c19de146Smrgexit 0
6219ef7378bSmrg
6229ef7378bSmrg# Local Variables:
6239ef7378bSmrg# mode: shell-script
6249ef7378bSmrg# sh-indentation: 2
6259ef7378bSmrg# eval: (add-hook 'write-file-hooks 'time-stamp)
6269ef7378bSmrg# time-stamp-start: "scriptversion="
6279ef7378bSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
6289ef7378bSmrg# time-stamp-time-zone: "UTC"
6299ef7378bSmrg# time-stamp-end: "; # UTC"
6309ef7378bSmrg# End:
631