depcomp revision ec713c28
11d54945dSmrg#! /bin/sh
21d54945dSmrg# depcomp - compile a program generating dependencies as side-effects
31d54945dSmrg
4ec713c28Smrgscriptversion=2009-04-28.21; # UTC
51d54945dSmrg
6ec713c28Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
7ec713c28Smrg# Software Foundation, Inc.
81d54945dSmrg
91d54945dSmrg# This program is free software; you can redistribute it and/or modify
101d54945dSmrg# it under the terms of the GNU General Public License as published by
111d54945dSmrg# the Free Software Foundation; either version 2, or (at your option)
121d54945dSmrg# any later version.
131d54945dSmrg
141d54945dSmrg# This program is distributed in the hope that it will be useful,
151d54945dSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
161d54945dSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
171d54945dSmrg# GNU General Public License for more details.
181d54945dSmrg
191d54945dSmrg# You should have received a copy of the GNU General Public License
20ec713c28Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
211d54945dSmrg
221d54945dSmrg# As a special exception to the GNU General Public License, if you
231d54945dSmrg# distribute this file as part of a program that contains a
241d54945dSmrg# configuration script generated by Autoconf, you may include it under
251d54945dSmrg# the same distribution terms that you use for the rest of that program.
261d54945dSmrg
271d54945dSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
281d54945dSmrg
291d54945dSmrgcase $1 in
301d54945dSmrg  '')
311d54945dSmrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
321d54945dSmrg     exit 1;
331d54945dSmrg     ;;
341d54945dSmrg  -h | --h*)
351d54945dSmrg    cat <<\EOF
361d54945dSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
371d54945dSmrg
381d54945dSmrgRun PROGRAMS ARGS to compile a file, generating dependencies
391d54945dSmrgas side-effects.
401d54945dSmrg
411d54945dSmrgEnvironment variables:
421d54945dSmrg  depmode     Dependency tracking mode.
431d54945dSmrg  source      Source file read by `PROGRAMS ARGS'.
441d54945dSmrg  object      Object file output by `PROGRAMS ARGS'.
451d54945dSmrg  DEPDIR      directory where to store dependencies.
461d54945dSmrg  depfile     Dependency file to output.
471d54945dSmrg  tmpdepfile  Temporary file to use when outputing dependencies.
481d54945dSmrg  libtool     Whether libtool is used (yes/no).
491d54945dSmrg
501d54945dSmrgReport bugs to <bug-automake@gnu.org>.
511d54945dSmrgEOF
521d54945dSmrg    exit $?
531d54945dSmrg    ;;
541d54945dSmrg  -v | --v*)
551d54945dSmrg    echo "depcomp $scriptversion"
561d54945dSmrg    exit $?
571d54945dSmrg    ;;
581d54945dSmrgesac
591d54945dSmrg
601d54945dSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
611d54945dSmrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
621d54945dSmrg  exit 1
631d54945dSmrgfi
641d54945dSmrg
651d54945dSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
661d54945dSmrgdepfile=${depfile-`echo "$object" |
671d54945dSmrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
681d54945dSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
691d54945dSmrg
701d54945dSmrgrm -f "$tmpdepfile"
711d54945dSmrg
721d54945dSmrg# Some modes work just like other modes, but use different flags.  We
731d54945dSmrg# parameterize here, but still list the modes in the big case below,
741d54945dSmrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
751d54945dSmrg# here, because this file can only contain one case statement.
761d54945dSmrgif test "$depmode" = hp; then
771d54945dSmrg  # HP compiler uses -M and no extra arg.
781d54945dSmrg  gccflag=-M
791d54945dSmrg  depmode=gcc
801d54945dSmrgfi
811d54945dSmrg
821d54945dSmrgif test "$depmode" = dashXmstdout; then
831d54945dSmrg   # This is just like dashmstdout with a different argument.
841d54945dSmrg   dashmflag=-xM
851d54945dSmrg   depmode=dashmstdout
861d54945dSmrgfi
871d54945dSmrg
88ec713c28Smrgcygpath_u="cygpath -u -f -"
89ec713c28Smrgif test "$depmode" = msvcmsys; then
90ec713c28Smrg   # This is just like msvisualcpp but w/o cygpath translation.
91ec713c28Smrg   # Just convert the backslash-escaped backslashes to single forward
92ec713c28Smrg   # slashes to satisfy depend.m4
93ec713c28Smrg   cygpath_u="sed s,\\\\\\\\,/,g"
94ec713c28Smrg   depmode=msvisualcpp
95ec713c28Smrgfi
96ec713c28Smrg
971d54945dSmrgcase "$depmode" in
981d54945dSmrggcc3)
991d54945dSmrg## gcc 3 implements dependency tracking that does exactly what
1001d54945dSmrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
1011d54945dSmrg## it if -MD -MP comes after the -MF stuff.  Hmm.
102ba85709eSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
103ba85709eSmrg## the command line argument order; so add the flags where they
104ba85709eSmrg## appear in depend2.am.  Note that the slowdown incurred here
105ba85709eSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
106ba85709eSmrg  for arg
107ba85709eSmrg  do
108ba85709eSmrg    case $arg in
109ba85709eSmrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
110ba85709eSmrg    *)  set fnord "$@" "$arg" ;;
111ba85709eSmrg    esac
112ba85709eSmrg    shift # fnord
113ba85709eSmrg    shift # $arg
114ba85709eSmrg  done
115ba85709eSmrg  "$@"
1161d54945dSmrg  stat=$?
1171d54945dSmrg  if test $stat -eq 0; then :
1181d54945dSmrg  else
1191d54945dSmrg    rm -f "$tmpdepfile"
1201d54945dSmrg    exit $stat
1211d54945dSmrg  fi
1221d54945dSmrg  mv "$tmpdepfile" "$depfile"
1231d54945dSmrg  ;;
1241d54945dSmrg
1251d54945dSmrggcc)
1261d54945dSmrg## There are various ways to get dependency output from gcc.  Here's
1271d54945dSmrg## why we pick this rather obscure method:
1281d54945dSmrg## - Don't want to use -MD because we'd like the dependencies to end
1291d54945dSmrg##   up in a subdir.  Having to rename by hand is ugly.
1301d54945dSmrg##   (We might end up doing this anyway to support other compilers.)
1311d54945dSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
1321d54945dSmrg##   -MM, not -M (despite what the docs say).
1331d54945dSmrg## - Using -M directly means running the compiler twice (even worse
1341d54945dSmrg##   than renaming).
1351d54945dSmrg  if test -z "$gccflag"; then
1361d54945dSmrg    gccflag=-MD,
1371d54945dSmrg  fi
1381d54945dSmrg  "$@" -Wp,"$gccflag$tmpdepfile"
1391d54945dSmrg  stat=$?
1401d54945dSmrg  if test $stat -eq 0; then :
1411d54945dSmrg  else
1421d54945dSmrg    rm -f "$tmpdepfile"
1431d54945dSmrg    exit $stat
1441d54945dSmrg  fi
1451d54945dSmrg  rm -f "$depfile"
1461d54945dSmrg  echo "$object : \\" > "$depfile"
1471d54945dSmrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
1481d54945dSmrg## The second -e expression handles DOS-style file names with drive letters.
1491d54945dSmrg  sed -e 's/^[^:]*: / /' \
1501d54945dSmrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
1511d54945dSmrg## This next piece of magic avoids the `deleted header file' problem.
1521d54945dSmrg## The problem is that when a header file which appears in a .P file
1531d54945dSmrg## is deleted, the dependency causes make to die (because there is
1541d54945dSmrg## typically no way to rebuild the header).  We avoid this by adding
1551d54945dSmrg## dummy dependencies for each header file.  Too bad gcc doesn't do
1561d54945dSmrg## this for us directly.
1571d54945dSmrg  tr ' ' '
1581d54945dSmrg' < "$tmpdepfile" |
1591d54945dSmrg## Some versions of gcc put a space before the `:'.  On the theory
1601d54945dSmrg## that the space means something, we add a space to the output as
1611d54945dSmrg## well.
1621d54945dSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
1631d54945dSmrg## correctly.  Breaking it into two sed invocations is a workaround.
1641d54945dSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
1651d54945dSmrg  rm -f "$tmpdepfile"
1661d54945dSmrg  ;;
1671d54945dSmrg
1681d54945dSmrghp)
1691d54945dSmrg  # This case exists only to let depend.m4 do its work.  It works by
1701d54945dSmrg  # looking at the text of this script.  This case will never be run,
1711d54945dSmrg  # since it is checked for above.
1721d54945dSmrg  exit 1
1731d54945dSmrg  ;;
1741d54945dSmrg
1751d54945dSmrgsgi)
1761d54945dSmrg  if test "$libtool" = yes; then
1771d54945dSmrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
1781d54945dSmrg  else
1791d54945dSmrg    "$@" -MDupdate "$tmpdepfile"
1801d54945dSmrg  fi
1811d54945dSmrg  stat=$?
1821d54945dSmrg  if test $stat -eq 0; then :
1831d54945dSmrg  else
1841d54945dSmrg    rm -f "$tmpdepfile"
1851d54945dSmrg    exit $stat
1861d54945dSmrg  fi
1871d54945dSmrg  rm -f "$depfile"
1881d54945dSmrg
1891d54945dSmrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
1901d54945dSmrg    echo "$object : \\" > "$depfile"
1911d54945dSmrg
1921d54945dSmrg    # Clip off the initial element (the dependent).  Don't try to be
1931d54945dSmrg    # clever and replace this with sed code, as IRIX sed won't handle
1941d54945dSmrg    # lines with more than a fixed number of characters (4096 in
1951d54945dSmrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
1961d54945dSmrg    # the IRIX cc adds comments like `#:fec' to the end of the
1971d54945dSmrg    # dependency line.
1981d54945dSmrg    tr ' ' '
1991d54945dSmrg' < "$tmpdepfile" \
2001d54945dSmrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
2011d54945dSmrg    tr '
202ec713c28Smrg' ' ' >> "$depfile"
203ec713c28Smrg    echo >> "$depfile"
2041d54945dSmrg
2051d54945dSmrg    # The second pass generates a dummy entry for each header file.
2061d54945dSmrg    tr ' ' '
2071d54945dSmrg' < "$tmpdepfile" \
2081d54945dSmrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
209ec713c28Smrg   >> "$depfile"
2101d54945dSmrg  else
2111d54945dSmrg    # The sourcefile does not contain any dependencies, so just
2121d54945dSmrg    # store a dummy comment line, to avoid errors with the Makefile
2131d54945dSmrg    # "include basename.Plo" scheme.
2141d54945dSmrg    echo "#dummy" > "$depfile"
2151d54945dSmrg  fi
2161d54945dSmrg  rm -f "$tmpdepfile"
2171d54945dSmrg  ;;
2181d54945dSmrg
2191d54945dSmrgaix)
2201d54945dSmrg  # The C for AIX Compiler uses -M and outputs the dependencies
2211d54945dSmrg  # in a .u file.  In older versions, this file always lives in the
2221d54945dSmrg  # current directory.  Also, the AIX compiler puts `$object:' at the
2231d54945dSmrg  # start of each line; $object doesn't have directory information.
2241d54945dSmrg  # Version 6 uses the directory in both cases.
225786a6f21Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
226786a6f21Smrg  test "x$dir" = "x$object" && dir=
227786a6f21Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
2281d54945dSmrg  if test "$libtool" = yes; then
229786a6f21Smrg    tmpdepfile1=$dir$base.u
230786a6f21Smrg    tmpdepfile2=$base.u
231786a6f21Smrg    tmpdepfile3=$dir.libs/$base.u
2321d54945dSmrg    "$@" -Wc,-M
2331d54945dSmrg  else
234786a6f21Smrg    tmpdepfile1=$dir$base.u
235786a6f21Smrg    tmpdepfile2=$dir$base.u
236786a6f21Smrg    tmpdepfile3=$dir$base.u
2371d54945dSmrg    "$@" -M
2381d54945dSmrg  fi
2391d54945dSmrg  stat=$?
2401d54945dSmrg
2411d54945dSmrg  if test $stat -eq 0; then :
2421d54945dSmrg  else
243786a6f21Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2441d54945dSmrg    exit $stat
2451d54945dSmrg  fi
2461d54945dSmrg
247786a6f21Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
248786a6f21Smrg  do
249786a6f21Smrg    test -f "$tmpdepfile" && break
250786a6f21Smrg  done
2511d54945dSmrg  if test -f "$tmpdepfile"; then
2521d54945dSmrg    # Each line is of the form `foo.o: dependent.h'.
2531d54945dSmrg    # Do two passes, one to just change these to
2541d54945dSmrg    # `$object: dependent.h' and one to simply `dependent.h:'.
255786a6f21Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
256786a6f21Smrg    # That's a tab and a space in the [].
257786a6f21Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
2581d54945dSmrg  else
2591d54945dSmrg    # The sourcefile does not contain any dependencies, so just
2601d54945dSmrg    # store a dummy comment line, to avoid errors with the Makefile
2611d54945dSmrg    # "include basename.Plo" scheme.
2621d54945dSmrg    echo "#dummy" > "$depfile"
2631d54945dSmrg  fi
2641d54945dSmrg  rm -f "$tmpdepfile"
2651d54945dSmrg  ;;
2661d54945dSmrg
2671d54945dSmrgicc)
2681d54945dSmrg  # Intel's C compiler understands `-MD -MF file'.  However on
2691d54945dSmrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
2701d54945dSmrg  # ICC 7.0 will fill foo.d with something like
2711d54945dSmrg  #    foo.o: sub/foo.c
2721d54945dSmrg  #    foo.o: sub/foo.h
2731d54945dSmrg  # which is wrong.  We want:
2741d54945dSmrg  #    sub/foo.o: sub/foo.c
2751d54945dSmrg  #    sub/foo.o: sub/foo.h
2761d54945dSmrg  #    sub/foo.c:
2771d54945dSmrg  #    sub/foo.h:
2781d54945dSmrg  # ICC 7.1 will output
2791d54945dSmrg  #    foo.o: sub/foo.c sub/foo.h
2801d54945dSmrg  # and will wrap long lines using \ :
2811d54945dSmrg  #    foo.o: sub/foo.c ... \
2821d54945dSmrg  #     sub/foo.h ... \
2831d54945dSmrg  #     ...
2841d54945dSmrg
2851d54945dSmrg  "$@" -MD -MF "$tmpdepfile"
2861d54945dSmrg  stat=$?
2871d54945dSmrg  if test $stat -eq 0; then :
2881d54945dSmrg  else
2891d54945dSmrg    rm -f "$tmpdepfile"
2901d54945dSmrg    exit $stat
2911d54945dSmrg  fi
2921d54945dSmrg  rm -f "$depfile"
2931d54945dSmrg  # Each line is of the form `foo.o: dependent.h',
2941d54945dSmrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
2951d54945dSmrg  # Do two passes, one to just change these to
2961d54945dSmrg  # `$object: dependent.h' and one to simply `dependent.h:'.
2971d54945dSmrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
2981d54945dSmrg  # Some versions of the HPUX 10.20 sed can't process this invocation
2991d54945dSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
3001d54945dSmrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
3011d54945dSmrg    sed -e 's/$/ :/' >> "$depfile"
3021d54945dSmrg  rm -f "$tmpdepfile"
3031d54945dSmrg  ;;
3041d54945dSmrg
305ba85709eSmrghp2)
306ba85709eSmrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
307ba85709eSmrg  # compilers, which have integrated preprocessors.  The correct option
308ba85709eSmrg  # to use with these is +Maked; it writes dependencies to a file named
309ba85709eSmrg  # 'foo.d', which lands next to the object file, wherever that
310ba85709eSmrg  # happens to be.
311ba85709eSmrg  # Much of this is similar to the tru64 case; see comments there.
312ba85709eSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
313ba85709eSmrg  test "x$dir" = "x$object" && dir=
314ba85709eSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
315ba85709eSmrg  if test "$libtool" = yes; then
316ba85709eSmrg    tmpdepfile1=$dir$base.d
317ba85709eSmrg    tmpdepfile2=$dir.libs/$base.d
318ba85709eSmrg    "$@" -Wc,+Maked
319ba85709eSmrg  else
320ba85709eSmrg    tmpdepfile1=$dir$base.d
321ba85709eSmrg    tmpdepfile2=$dir$base.d
322ba85709eSmrg    "$@" +Maked
323ba85709eSmrg  fi
324ba85709eSmrg  stat=$?
325ba85709eSmrg  if test $stat -eq 0; then :
326ba85709eSmrg  else
327ba85709eSmrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
328ba85709eSmrg     exit $stat
329ba85709eSmrg  fi
330ba85709eSmrg
331ba85709eSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
332ba85709eSmrg  do
333ba85709eSmrg    test -f "$tmpdepfile" && break
334ba85709eSmrg  done
335ba85709eSmrg  if test -f "$tmpdepfile"; then
336ba85709eSmrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
337ba85709eSmrg    # Add `dependent.h:' lines.
338ec713c28Smrg    sed -ne '2,${
339ec713c28Smrg	       s/^ *//
340ec713c28Smrg	       s/ \\*$//
341ec713c28Smrg	       s/$/:/
342ec713c28Smrg	       p
343ec713c28Smrg	     }' "$tmpdepfile" >> "$depfile"
344ba85709eSmrg  else
345ba85709eSmrg    echo "#dummy" > "$depfile"
346ba85709eSmrg  fi
347ba85709eSmrg  rm -f "$tmpdepfile" "$tmpdepfile2"
348ba85709eSmrg  ;;
349ba85709eSmrg
3501d54945dSmrgtru64)
3511d54945dSmrg   # The Tru64 compiler uses -MD to generate dependencies as a side
3521d54945dSmrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
3531d54945dSmrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
3541d54945dSmrg   # dependencies in `foo.d' instead, so we check for that too.
3551d54945dSmrg   # Subdirectories are respected.
3561d54945dSmrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3571d54945dSmrg   test "x$dir" = "x$object" && dir=
3581d54945dSmrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3591d54945dSmrg
3601d54945dSmrg   if test "$libtool" = yes; then
3611d54945dSmrg      # With Tru64 cc, shared objects can also be used to make a
362ba85709eSmrg      # static library.  This mechanism is used in libtool 1.4 series to
3631d54945dSmrg      # handle both shared and static libraries in a single compilation.
3641d54945dSmrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
3651d54945dSmrg      #
3661d54945dSmrg      # With libtool 1.5 this exception was removed, and libtool now
3671d54945dSmrg      # generates 2 separate objects for the 2 libraries.  These two
368ba85709eSmrg      # compilations output dependencies in $dir.libs/$base.o.d and
3691d54945dSmrg      # in $dir$base.o.d.  We have to check for both files, because
3701d54945dSmrg      # one of the two compilations can be disabled.  We should prefer
3711d54945dSmrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
3721d54945dSmrg      # automatically cleaned when .libs/ is deleted, while ignoring
3731d54945dSmrg      # the former would cause a distcleancheck panic.
3741d54945dSmrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
3751d54945dSmrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
3761d54945dSmrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
3771d54945dSmrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
3781d54945dSmrg      "$@" -Wc,-MD
3791d54945dSmrg   else
3801d54945dSmrg      tmpdepfile1=$dir$base.o.d
3811d54945dSmrg      tmpdepfile2=$dir$base.d
3821d54945dSmrg      tmpdepfile3=$dir$base.d
3831d54945dSmrg      tmpdepfile4=$dir$base.d
3841d54945dSmrg      "$@" -MD
3851d54945dSmrg   fi
3861d54945dSmrg
3871d54945dSmrg   stat=$?
3881d54945dSmrg   if test $stat -eq 0; then :
3891d54945dSmrg   else
3901d54945dSmrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3911d54945dSmrg      exit $stat
3921d54945dSmrg   fi
3931d54945dSmrg
3941d54945dSmrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3951d54945dSmrg   do
3961d54945dSmrg     test -f "$tmpdepfile" && break
3971d54945dSmrg   done
3981d54945dSmrg   if test -f "$tmpdepfile"; then
3991d54945dSmrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
4001d54945dSmrg      # That's a tab and a space in the [].
4011d54945dSmrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
4021d54945dSmrg   else
4031d54945dSmrg      echo "#dummy" > "$depfile"
4041d54945dSmrg   fi
4051d54945dSmrg   rm -f "$tmpdepfile"
4061d54945dSmrg   ;;
4071d54945dSmrg
4081d54945dSmrg#nosideeffect)
4091d54945dSmrg  # This comment above is used by automake to tell side-effect
4101d54945dSmrg  # dependency tracking mechanisms from slower ones.
4111d54945dSmrg
4121d54945dSmrgdashmstdout)
4131d54945dSmrg  # Important note: in order to support this mode, a compiler *must*
4141d54945dSmrg  # always write the preprocessed file to stdout, regardless of -o.
4151d54945dSmrg  "$@" || exit $?
4161d54945dSmrg
4171d54945dSmrg  # Remove the call to Libtool.
4181d54945dSmrg  if test "$libtool" = yes; then
419ec713c28Smrg    while test "X$1" != 'X--mode=compile'; do
4201d54945dSmrg      shift
4211d54945dSmrg    done
4221d54945dSmrg    shift
4231d54945dSmrg  fi
4241d54945dSmrg
4251d54945dSmrg  # Remove `-o $object'.
4261d54945dSmrg  IFS=" "
4271d54945dSmrg  for arg
4281d54945dSmrg  do
4291d54945dSmrg    case $arg in
4301d54945dSmrg    -o)
4311d54945dSmrg      shift
4321d54945dSmrg      ;;
4331d54945dSmrg    $object)
4341d54945dSmrg      shift
4351d54945dSmrg      ;;
4361d54945dSmrg    *)
4371d54945dSmrg      set fnord "$@" "$arg"
4381d54945dSmrg      shift # fnord
4391d54945dSmrg      shift # $arg
4401d54945dSmrg      ;;
4411d54945dSmrg    esac
4421d54945dSmrg  done
4431d54945dSmrg
4441d54945dSmrg  test -z "$dashmflag" && dashmflag=-M
4451d54945dSmrg  # Require at least two characters before searching for `:'
4461d54945dSmrg  # in the target name.  This is to cope with DOS-style filenames:
4471d54945dSmrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
4481d54945dSmrg  "$@" $dashmflag |
4491d54945dSmrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
4501d54945dSmrg  rm -f "$depfile"
4511d54945dSmrg  cat < "$tmpdepfile" > "$depfile"
4521d54945dSmrg  tr ' ' '
4531d54945dSmrg' < "$tmpdepfile" | \
4541d54945dSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
4551d54945dSmrg## correctly.  Breaking it into two sed invocations is a workaround.
4561d54945dSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
4571d54945dSmrg  rm -f "$tmpdepfile"
4581d54945dSmrg  ;;
4591d54945dSmrg
4601d54945dSmrgdashXmstdout)
4611d54945dSmrg  # This case only exists to satisfy depend.m4.  It is never actually
4621d54945dSmrg  # run, as this mode is specially recognized in the preamble.
4631d54945dSmrg  exit 1
4641d54945dSmrg  ;;
4651d54945dSmrg
4661d54945dSmrgmakedepend)
4671d54945dSmrg  "$@" || exit $?
4681d54945dSmrg  # Remove any Libtool call
4691d54945dSmrg  if test "$libtool" = yes; then
470ec713c28Smrg    while test "X$1" != 'X--mode=compile'; do
4711d54945dSmrg      shift
4721d54945dSmrg    done
4731d54945dSmrg    shift
4741d54945dSmrg  fi
4751d54945dSmrg  # X makedepend
4761d54945dSmrg  shift
477ec713c28Smrg  cleared=no eat=no
478ec713c28Smrg  for arg
479ec713c28Smrg  do
4801d54945dSmrg    case $cleared in
4811d54945dSmrg    no)
4821d54945dSmrg      set ""; shift
4831d54945dSmrg      cleared=yes ;;
4841d54945dSmrg    esac
485ec713c28Smrg    if test $eat = yes; then
486ec713c28Smrg      eat=no
487ec713c28Smrg      continue
488ec713c28Smrg    fi
4891d54945dSmrg    case "$arg" in
4901d54945dSmrg    -D*|-I*)
4911d54945dSmrg      set fnord "$@" "$arg"; shift ;;
4921d54945dSmrg    # Strip any option that makedepend may not understand.  Remove
4931d54945dSmrg    # the object too, otherwise makedepend will parse it as a source file.
494ec713c28Smrg    -arch)
495ec713c28Smrg      eat=yes ;;
4961d54945dSmrg    -*|$object)
4971d54945dSmrg      ;;
4981d54945dSmrg    *)
4991d54945dSmrg      set fnord "$@" "$arg"; shift ;;
5001d54945dSmrg    esac
5011d54945dSmrg  done
502ec713c28Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
5031d54945dSmrg  touch "$tmpdepfile"
5041d54945dSmrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
5051d54945dSmrg  rm -f "$depfile"
5061d54945dSmrg  cat < "$tmpdepfile" > "$depfile"
5071d54945dSmrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
5081d54945dSmrg' | \
5091d54945dSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
5101d54945dSmrg## correctly.  Breaking it into two sed invocations is a workaround.
5111d54945dSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
5121d54945dSmrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
5131d54945dSmrg  ;;
5141d54945dSmrg
5151d54945dSmrgcpp)
5161d54945dSmrg  # Important note: in order to support this mode, a compiler *must*
5171d54945dSmrg  # always write the preprocessed file to stdout.
5181d54945dSmrg  "$@" || exit $?
5191d54945dSmrg
5201d54945dSmrg  # Remove the call to Libtool.
5211d54945dSmrg  if test "$libtool" = yes; then
522ec713c28Smrg    while test "X$1" != 'X--mode=compile'; do
5231d54945dSmrg      shift
5241d54945dSmrg    done
5251d54945dSmrg    shift
5261d54945dSmrg  fi
5271d54945dSmrg
5281d54945dSmrg  # Remove `-o $object'.
5291d54945dSmrg  IFS=" "
5301d54945dSmrg  for arg
5311d54945dSmrg  do
5321d54945dSmrg    case $arg in
5331d54945dSmrg    -o)
5341d54945dSmrg      shift
5351d54945dSmrg      ;;
5361d54945dSmrg    $object)
5371d54945dSmrg      shift
5381d54945dSmrg      ;;
5391d54945dSmrg    *)
5401d54945dSmrg      set fnord "$@" "$arg"
5411d54945dSmrg      shift # fnord
5421d54945dSmrg      shift # $arg
5431d54945dSmrg      ;;
5441d54945dSmrg    esac
5451d54945dSmrg  done
5461d54945dSmrg
5471d54945dSmrg  "$@" -E |
5481d54945dSmrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
5491d54945dSmrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
5501d54945dSmrg    sed '$ s: \\$::' > "$tmpdepfile"
5511d54945dSmrg  rm -f "$depfile"
5521d54945dSmrg  echo "$object : \\" > "$depfile"
5531d54945dSmrg  cat < "$tmpdepfile" >> "$depfile"
5541d54945dSmrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
5551d54945dSmrg  rm -f "$tmpdepfile"
5561d54945dSmrg  ;;
5571d54945dSmrg
5581d54945dSmrgmsvisualcpp)
5591d54945dSmrg  # Important note: in order to support this mode, a compiler *must*
560ec713c28Smrg  # always write the preprocessed file to stdout.
5611d54945dSmrg  "$@" || exit $?
562ec713c28Smrg
563ec713c28Smrg  # Remove the call to Libtool.
564ec713c28Smrg  if test "$libtool" = yes; then
565ec713c28Smrg    while test "X$1" != 'X--mode=compile'; do
566ec713c28Smrg      shift
567ec713c28Smrg    done
568ec713c28Smrg    shift
569ec713c28Smrg  fi
570ec713c28Smrg
5711d54945dSmrg  IFS=" "
5721d54945dSmrg  for arg
5731d54945dSmrg  do
5741d54945dSmrg    case "$arg" in
575ec713c28Smrg    -o)
576ec713c28Smrg      shift
577ec713c28Smrg      ;;
578ec713c28Smrg    $object)
579ec713c28Smrg      shift
580ec713c28Smrg      ;;
5811d54945dSmrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
5821d54945dSmrg	set fnord "$@"
5831d54945dSmrg	shift
5841d54945dSmrg	shift
5851d54945dSmrg	;;
5861d54945dSmrg    *)
5871d54945dSmrg	set fnord "$@" "$arg"
5881d54945dSmrg	shift
5891d54945dSmrg	shift
5901d54945dSmrg	;;
5911d54945dSmrg    esac
5921d54945dSmrg  done
593ec713c28Smrg  "$@" -E 2>/dev/null |
594ec713c28Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
5951d54945dSmrg  rm -f "$depfile"
5961d54945dSmrg  echo "$object : \\" > "$depfile"
597ec713c28Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
5981d54945dSmrg  echo "	" >> "$depfile"
599ec713c28Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
6001d54945dSmrg  rm -f "$tmpdepfile"
6011d54945dSmrg  ;;
6021d54945dSmrg
603ec713c28Smrgmsvcmsys)
604ec713c28Smrg  # This case exists only to let depend.m4 do its work.  It works by
605ec713c28Smrg  # looking at the text of this script.  This case will never be run,
606ec713c28Smrg  # since it is checked for above.
607ec713c28Smrg  exit 1
608ec713c28Smrg  ;;
609ec713c28Smrg
6101d54945dSmrgnone)
6111d54945dSmrg  exec "$@"
6121d54945dSmrg  ;;
6131d54945dSmrg
6141d54945dSmrg*)
6151d54945dSmrg  echo "Unknown depmode $depmode" 1>&2
6161d54945dSmrg  exit 1
6171d54945dSmrg  ;;
6181d54945dSmrgesac
6191d54945dSmrg
6201d54945dSmrgexit 0
6211d54945dSmrg
6221d54945dSmrg# Local Variables:
6231d54945dSmrg# mode: shell-script
6241d54945dSmrg# sh-indentation: 2
6251d54945dSmrg# eval: (add-hook 'write-file-hooks 'time-stamp)
6261d54945dSmrg# time-stamp-start: "scriptversion="
6271d54945dSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
628ec713c28Smrg# time-stamp-time-zone: "UTC"
629ec713c28Smrg# time-stamp-end: "; # UTC"
6301d54945dSmrg# End:
631