depcomp revision 7a2631fc
13e747e6dSmrg#! /bin/sh
23e747e6dSmrg# depcomp - compile a program generating dependencies as side-effects
33e747e6dSmrg
47a2631fcSmrgscriptversion=2009-04-28.21; # UTC
53e747e6dSmrg
67a2631fcSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
77a2631fcSmrg# Software Foundation, Inc.
83e747e6dSmrg
93e747e6dSmrg# This program is free software; you can redistribute it and/or modify
103e747e6dSmrg# it under the terms of the GNU General Public License as published by
113e747e6dSmrg# the Free Software Foundation; either version 2, or (at your option)
123e747e6dSmrg# any later version.
133e747e6dSmrg
143e747e6dSmrg# This program is distributed in the hope that it will be useful,
153e747e6dSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
163e747e6dSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
173e747e6dSmrg# GNU General Public License for more details.
183e747e6dSmrg
193e747e6dSmrg# You should have received a copy of the GNU General Public License
207a2631fcSmrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
213e747e6dSmrg
223e747e6dSmrg# As a special exception to the GNU General Public License, if you
233e747e6dSmrg# distribute this file as part of a program that contains a
243e747e6dSmrg# configuration script generated by Autoconf, you may include it under
253e747e6dSmrg# the same distribution terms that you use for the rest of that program.
263e747e6dSmrg
273e747e6dSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
283e747e6dSmrg
293e747e6dSmrgcase $1 in
303e747e6dSmrg  '')
313e747e6dSmrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
323e747e6dSmrg     exit 1;
333e747e6dSmrg     ;;
343e747e6dSmrg  -h | --h*)
353e747e6dSmrg    cat <<\EOF
363e747e6dSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
373e747e6dSmrg
383e747e6dSmrgRun PROGRAMS ARGS to compile a file, generating dependencies
393e747e6dSmrgas side-effects.
403e747e6dSmrg
413e747e6dSmrgEnvironment variables:
423e747e6dSmrg  depmode     Dependency tracking mode.
433e747e6dSmrg  source      Source file read by `PROGRAMS ARGS'.
443e747e6dSmrg  object      Object file output by `PROGRAMS ARGS'.
453e747e6dSmrg  DEPDIR      directory where to store dependencies.
463e747e6dSmrg  depfile     Dependency file to output.
473e747e6dSmrg  tmpdepfile  Temporary file to use when outputing dependencies.
483e747e6dSmrg  libtool     Whether libtool is used (yes/no).
493e747e6dSmrg
503e747e6dSmrgReport bugs to <bug-automake@gnu.org>.
513e747e6dSmrgEOF
523e747e6dSmrg    exit $?
533e747e6dSmrg    ;;
543e747e6dSmrg  -v | --v*)
553e747e6dSmrg    echo "depcomp $scriptversion"
563e747e6dSmrg    exit $?
573e747e6dSmrg    ;;
583e747e6dSmrgesac
593e747e6dSmrg
603e747e6dSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
613e747e6dSmrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
623e747e6dSmrg  exit 1
633e747e6dSmrgfi
643e747e6dSmrg
653e747e6dSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
663e747e6dSmrgdepfile=${depfile-`echo "$object" |
673e747e6dSmrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
683e747e6dSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
693e747e6dSmrg
703e747e6dSmrgrm -f "$tmpdepfile"
713e747e6dSmrg
723e747e6dSmrg# Some modes work just like other modes, but use different flags.  We
733e747e6dSmrg# parameterize here, but still list the modes in the big case below,
743e747e6dSmrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
753e747e6dSmrg# here, because this file can only contain one case statement.
763e747e6dSmrgif test "$depmode" = hp; then
773e747e6dSmrg  # HP compiler uses -M and no extra arg.
783e747e6dSmrg  gccflag=-M
793e747e6dSmrg  depmode=gcc
803e747e6dSmrgfi
813e747e6dSmrg
823e747e6dSmrgif test "$depmode" = dashXmstdout; then
833e747e6dSmrg   # This is just like dashmstdout with a different argument.
843e747e6dSmrg   dashmflag=-xM
853e747e6dSmrg   depmode=dashmstdout
863e747e6dSmrgfi
873e747e6dSmrg
887a2631fcSmrgcygpath_u="cygpath -u -f -"
897a2631fcSmrgif test "$depmode" = msvcmsys; then
907a2631fcSmrg   # This is just like msvisualcpp but w/o cygpath translation.
917a2631fcSmrg   # Just convert the backslash-escaped backslashes to single forward
927a2631fcSmrg   # slashes to satisfy depend.m4
937a2631fcSmrg   cygpath_u="sed s,\\\\\\\\,/,g"
947a2631fcSmrg   depmode=msvisualcpp
957a2631fcSmrgfi
967a2631fcSmrg
973e747e6dSmrgcase "$depmode" in
983e747e6dSmrggcc3)
993e747e6dSmrg## gcc 3 implements dependency tracking that does exactly what
1003e747e6dSmrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
1013e747e6dSmrg## it if -MD -MP comes after the -MF stuff.  Hmm.
1023e747e6dSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
1033e747e6dSmrg## the command line argument order; so add the flags where they
1043e747e6dSmrg## appear in depend2.am.  Note that the slowdown incurred here
1053e747e6dSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
1063e747e6dSmrg  for arg
1073e747e6dSmrg  do
1083e747e6dSmrg    case $arg in
1093e747e6dSmrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
1103e747e6dSmrg    *)  set fnord "$@" "$arg" ;;
1113e747e6dSmrg    esac
1123e747e6dSmrg    shift # fnord
1133e747e6dSmrg    shift # $arg
1143e747e6dSmrg  done
1153e747e6dSmrg  "$@"
1163e747e6dSmrg  stat=$?
1173e747e6dSmrg  if test $stat -eq 0; then :
1183e747e6dSmrg  else
1193e747e6dSmrg    rm -f "$tmpdepfile"
1203e747e6dSmrg    exit $stat
1213e747e6dSmrg  fi
1223e747e6dSmrg  mv "$tmpdepfile" "$depfile"
1233e747e6dSmrg  ;;
1243e747e6dSmrg
1253e747e6dSmrggcc)
1263e747e6dSmrg## There are various ways to get dependency output from gcc.  Here's
1273e747e6dSmrg## why we pick this rather obscure method:
1283e747e6dSmrg## - Don't want to use -MD because we'd like the dependencies to end
1293e747e6dSmrg##   up in a subdir.  Having to rename by hand is ugly.
1303e747e6dSmrg##   (We might end up doing this anyway to support other compilers.)
1313e747e6dSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
1323e747e6dSmrg##   -MM, not -M (despite what the docs say).
1333e747e6dSmrg## - Using -M directly means running the compiler twice (even worse
1343e747e6dSmrg##   than renaming).
1353e747e6dSmrg  if test -z "$gccflag"; then
1363e747e6dSmrg    gccflag=-MD,
1373e747e6dSmrg  fi
1383e747e6dSmrg  "$@" -Wp,"$gccflag$tmpdepfile"
1393e747e6dSmrg  stat=$?
1403e747e6dSmrg  if test $stat -eq 0; then :
1413e747e6dSmrg  else
1423e747e6dSmrg    rm -f "$tmpdepfile"
1433e747e6dSmrg    exit $stat
1443e747e6dSmrg  fi
1453e747e6dSmrg  rm -f "$depfile"
1463e747e6dSmrg  echo "$object : \\" > "$depfile"
1473e747e6dSmrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
1483e747e6dSmrg## The second -e expression handles DOS-style file names with drive letters.
1493e747e6dSmrg  sed -e 's/^[^:]*: / /' \
1503e747e6dSmrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
1513e747e6dSmrg## This next piece of magic avoids the `deleted header file' problem.
1523e747e6dSmrg## The problem is that when a header file which appears in a .P file
1533e747e6dSmrg## is deleted, the dependency causes make to die (because there is
1543e747e6dSmrg## typically no way to rebuild the header).  We avoid this by adding
1553e747e6dSmrg## dummy dependencies for each header file.  Too bad gcc doesn't do
1563e747e6dSmrg## this for us directly.
1573e747e6dSmrg  tr ' ' '
1583e747e6dSmrg' < "$tmpdepfile" |
1593e747e6dSmrg## Some versions of gcc put a space before the `:'.  On the theory
1603e747e6dSmrg## that the space means something, we add a space to the output as
1613e747e6dSmrg## well.
1623e747e6dSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
1633e747e6dSmrg## correctly.  Breaking it into two sed invocations is a workaround.
1643e747e6dSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
1653e747e6dSmrg  rm -f "$tmpdepfile"
1663e747e6dSmrg  ;;
1673e747e6dSmrg
1683e747e6dSmrghp)
1693e747e6dSmrg  # This case exists only to let depend.m4 do its work.  It works by
1703e747e6dSmrg  # looking at the text of this script.  This case will never be run,
1713e747e6dSmrg  # since it is checked for above.
1723e747e6dSmrg  exit 1
1733e747e6dSmrg  ;;
1743e747e6dSmrg
1753e747e6dSmrgsgi)
1763e747e6dSmrg  if test "$libtool" = yes; then
1773e747e6dSmrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
1783e747e6dSmrg  else
1793e747e6dSmrg    "$@" -MDupdate "$tmpdepfile"
1803e747e6dSmrg  fi
1813e747e6dSmrg  stat=$?
1823e747e6dSmrg  if test $stat -eq 0; then :
1833e747e6dSmrg  else
1843e747e6dSmrg    rm -f "$tmpdepfile"
1853e747e6dSmrg    exit $stat
1863e747e6dSmrg  fi
1873e747e6dSmrg  rm -f "$depfile"
1883e747e6dSmrg
1893e747e6dSmrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
1903e747e6dSmrg    echo "$object : \\" > "$depfile"
1913e747e6dSmrg
1923e747e6dSmrg    # Clip off the initial element (the dependent).  Don't try to be
1933e747e6dSmrg    # clever and replace this with sed code, as IRIX sed won't handle
1943e747e6dSmrg    # lines with more than a fixed number of characters (4096 in
1953e747e6dSmrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
1963e747e6dSmrg    # the IRIX cc adds comments like `#:fec' to the end of the
1973e747e6dSmrg    # dependency line.
1983e747e6dSmrg    tr ' ' '
1993e747e6dSmrg' < "$tmpdepfile" \
2003e747e6dSmrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
2013e747e6dSmrg    tr '
2027a2631fcSmrg' ' ' >> "$depfile"
2037a2631fcSmrg    echo >> "$depfile"
2043e747e6dSmrg
2053e747e6dSmrg    # The second pass generates a dummy entry for each header file.
2063e747e6dSmrg    tr ' ' '
2073e747e6dSmrg' < "$tmpdepfile" \
2083e747e6dSmrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
2097a2631fcSmrg   >> "$depfile"
2103e747e6dSmrg  else
2113e747e6dSmrg    # The sourcefile does not contain any dependencies, so just
2123e747e6dSmrg    # store a dummy comment line, to avoid errors with the Makefile
2133e747e6dSmrg    # "include basename.Plo" scheme.
2143e747e6dSmrg    echo "#dummy" > "$depfile"
2153e747e6dSmrg  fi
2163e747e6dSmrg  rm -f "$tmpdepfile"
2173e747e6dSmrg  ;;
2183e747e6dSmrg
2193e747e6dSmrgaix)
2203e747e6dSmrg  # The C for AIX Compiler uses -M and outputs the dependencies
2213e747e6dSmrg  # in a .u file.  In older versions, this file always lives in the
2223e747e6dSmrg  # current directory.  Also, the AIX compiler puts `$object:' at the
2233e747e6dSmrg  # start of each line; $object doesn't have directory information.
2243e747e6dSmrg  # Version 6 uses the directory in both cases.
2253e747e6dSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
2263e747e6dSmrg  test "x$dir" = "x$object" && dir=
2273e747e6dSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
2283e747e6dSmrg  if test "$libtool" = yes; then
2293e747e6dSmrg    tmpdepfile1=$dir$base.u
2303e747e6dSmrg    tmpdepfile2=$base.u
2313e747e6dSmrg    tmpdepfile3=$dir.libs/$base.u
2323e747e6dSmrg    "$@" -Wc,-M
2333e747e6dSmrg  else
2343e747e6dSmrg    tmpdepfile1=$dir$base.u
2353e747e6dSmrg    tmpdepfile2=$dir$base.u
2363e747e6dSmrg    tmpdepfile3=$dir$base.u
2373e747e6dSmrg    "$@" -M
2383e747e6dSmrg  fi
2393e747e6dSmrg  stat=$?
2403e747e6dSmrg
2413e747e6dSmrg  if test $stat -eq 0; then :
2423e747e6dSmrg  else
2433e747e6dSmrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2443e747e6dSmrg    exit $stat
2453e747e6dSmrg  fi
2463e747e6dSmrg
2473e747e6dSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2483e747e6dSmrg  do
2493e747e6dSmrg    test -f "$tmpdepfile" && break
2503e747e6dSmrg  done
2513e747e6dSmrg  if test -f "$tmpdepfile"; then
2523e747e6dSmrg    # Each line is of the form `foo.o: dependent.h'.
2533e747e6dSmrg    # Do two passes, one to just change these to
2543e747e6dSmrg    # `$object: dependent.h' and one to simply `dependent.h:'.
2553e747e6dSmrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
2563e747e6dSmrg    # That's a tab and a space in the [].
2573e747e6dSmrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
2583e747e6dSmrg  else
2593e747e6dSmrg    # The sourcefile does not contain any dependencies, so just
2603e747e6dSmrg    # store a dummy comment line, to avoid errors with the Makefile
2613e747e6dSmrg    # "include basename.Plo" scheme.
2623e747e6dSmrg    echo "#dummy" > "$depfile"
2633e747e6dSmrg  fi
2643e747e6dSmrg  rm -f "$tmpdepfile"
2653e747e6dSmrg  ;;
2663e747e6dSmrg
2673e747e6dSmrgicc)
2683e747e6dSmrg  # Intel's C compiler understands `-MD -MF file'.  However on
2693e747e6dSmrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
2703e747e6dSmrg  # ICC 7.0 will fill foo.d with something like
2713e747e6dSmrg  #    foo.o: sub/foo.c
2723e747e6dSmrg  #    foo.o: sub/foo.h
2733e747e6dSmrg  # which is wrong.  We want:
2743e747e6dSmrg  #    sub/foo.o: sub/foo.c
2753e747e6dSmrg  #    sub/foo.o: sub/foo.h
2763e747e6dSmrg  #    sub/foo.c:
2773e747e6dSmrg  #    sub/foo.h:
2783e747e6dSmrg  # ICC 7.1 will output
2793e747e6dSmrg  #    foo.o: sub/foo.c sub/foo.h
2803e747e6dSmrg  # and will wrap long lines using \ :
2813e747e6dSmrg  #    foo.o: sub/foo.c ... \
2823e747e6dSmrg  #     sub/foo.h ... \
2833e747e6dSmrg  #     ...
2843e747e6dSmrg
2853e747e6dSmrg  "$@" -MD -MF "$tmpdepfile"
2863e747e6dSmrg  stat=$?
2873e747e6dSmrg  if test $stat -eq 0; then :
2883e747e6dSmrg  else
2893e747e6dSmrg    rm -f "$tmpdepfile"
2903e747e6dSmrg    exit $stat
2913e747e6dSmrg  fi
2923e747e6dSmrg  rm -f "$depfile"
2933e747e6dSmrg  # Each line is of the form `foo.o: dependent.h',
2943e747e6dSmrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
2953e747e6dSmrg  # Do two passes, one to just change these to
2963e747e6dSmrg  # `$object: dependent.h' and one to simply `dependent.h:'.
2973e747e6dSmrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
2983e747e6dSmrg  # Some versions of the HPUX 10.20 sed can't process this invocation
2993e747e6dSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
3003e747e6dSmrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
3013e747e6dSmrg    sed -e 's/$/ :/' >> "$depfile"
3023e747e6dSmrg  rm -f "$tmpdepfile"
3033e747e6dSmrg  ;;
3043e747e6dSmrg
3053e747e6dSmrghp2)
3063e747e6dSmrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
3073e747e6dSmrg  # compilers, which have integrated preprocessors.  The correct option
3083e747e6dSmrg  # to use with these is +Maked; it writes dependencies to a file named
3093e747e6dSmrg  # 'foo.d', which lands next to the object file, wherever that
3103e747e6dSmrg  # happens to be.
3113e747e6dSmrg  # Much of this is similar to the tru64 case; see comments there.
3123e747e6dSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3133e747e6dSmrg  test "x$dir" = "x$object" && dir=
3143e747e6dSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3153e747e6dSmrg  if test "$libtool" = yes; then
3163e747e6dSmrg    tmpdepfile1=$dir$base.d
3173e747e6dSmrg    tmpdepfile2=$dir.libs/$base.d
3183e747e6dSmrg    "$@" -Wc,+Maked
3193e747e6dSmrg  else
3203e747e6dSmrg    tmpdepfile1=$dir$base.d
3213e747e6dSmrg    tmpdepfile2=$dir$base.d
3223e747e6dSmrg    "$@" +Maked
3233e747e6dSmrg  fi
3243e747e6dSmrg  stat=$?
3253e747e6dSmrg  if test $stat -eq 0; then :
3263e747e6dSmrg  else
3273e747e6dSmrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
3283e747e6dSmrg     exit $stat
3293e747e6dSmrg  fi
3303e747e6dSmrg
3313e747e6dSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
3323e747e6dSmrg  do
3333e747e6dSmrg    test -f "$tmpdepfile" && break
3343e747e6dSmrg  done
3353e747e6dSmrg  if test -f "$tmpdepfile"; then
3363e747e6dSmrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
3373e747e6dSmrg    # Add `dependent.h:' lines.
3387a2631fcSmrg    sed -ne '2,${
3397a2631fcSmrg	       s/^ *//
3407a2631fcSmrg	       s/ \\*$//
3417a2631fcSmrg	       s/$/:/
3427a2631fcSmrg	       p
3437a2631fcSmrg	     }' "$tmpdepfile" >> "$depfile"
3443e747e6dSmrg  else
3453e747e6dSmrg    echo "#dummy" > "$depfile"
3463e747e6dSmrg  fi
3473e747e6dSmrg  rm -f "$tmpdepfile" "$tmpdepfile2"
3483e747e6dSmrg  ;;
3493e747e6dSmrg
3503e747e6dSmrgtru64)
3513e747e6dSmrg   # The Tru64 compiler uses -MD to generate dependencies as a side
3523e747e6dSmrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
3533e747e6dSmrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
3543e747e6dSmrg   # dependencies in `foo.d' instead, so we check for that too.
3553e747e6dSmrg   # Subdirectories are respected.
3563e747e6dSmrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3573e747e6dSmrg   test "x$dir" = "x$object" && dir=
3583e747e6dSmrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3593e747e6dSmrg
3603e747e6dSmrg   if test "$libtool" = yes; then
3613e747e6dSmrg      # With Tru64 cc, shared objects can also be used to make a
3623e747e6dSmrg      # static library.  This mechanism is used in libtool 1.4 series to
3633e747e6dSmrg      # handle both shared and static libraries in a single compilation.
3643e747e6dSmrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
3653e747e6dSmrg      #
3663e747e6dSmrg      # With libtool 1.5 this exception was removed, and libtool now
3673e747e6dSmrg      # generates 2 separate objects for the 2 libraries.  These two
3683e747e6dSmrg      # compilations output dependencies in $dir.libs/$base.o.d and
3693e747e6dSmrg      # in $dir$base.o.d.  We have to check for both files, because
3703e747e6dSmrg      # one of the two compilations can be disabled.  We should prefer
3713e747e6dSmrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
3723e747e6dSmrg      # automatically cleaned when .libs/ is deleted, while ignoring
3733e747e6dSmrg      # the former would cause a distcleancheck panic.
3743e747e6dSmrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
3753e747e6dSmrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
3763e747e6dSmrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
3773e747e6dSmrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
3783e747e6dSmrg      "$@" -Wc,-MD
3793e747e6dSmrg   else
3803e747e6dSmrg      tmpdepfile1=$dir$base.o.d
3813e747e6dSmrg      tmpdepfile2=$dir$base.d
3823e747e6dSmrg      tmpdepfile3=$dir$base.d
3833e747e6dSmrg      tmpdepfile4=$dir$base.d
3843e747e6dSmrg      "$@" -MD
3853e747e6dSmrg   fi
3863e747e6dSmrg
3873e747e6dSmrg   stat=$?
3883e747e6dSmrg   if test $stat -eq 0; then :
3893e747e6dSmrg   else
3903e747e6dSmrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3913e747e6dSmrg      exit $stat
3923e747e6dSmrg   fi
3933e747e6dSmrg
3943e747e6dSmrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3953e747e6dSmrg   do
3963e747e6dSmrg     test -f "$tmpdepfile" && break
3973e747e6dSmrg   done
3983e747e6dSmrg   if test -f "$tmpdepfile"; then
3993e747e6dSmrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
4003e747e6dSmrg      # That's a tab and a space in the [].
4013e747e6dSmrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
4023e747e6dSmrg   else
4033e747e6dSmrg      echo "#dummy" > "$depfile"
4043e747e6dSmrg   fi
4053e747e6dSmrg   rm -f "$tmpdepfile"
4063e747e6dSmrg   ;;
4073e747e6dSmrg
4083e747e6dSmrg#nosideeffect)
4093e747e6dSmrg  # This comment above is used by automake to tell side-effect
4103e747e6dSmrg  # dependency tracking mechanisms from slower ones.
4113e747e6dSmrg
4123e747e6dSmrgdashmstdout)
4133e747e6dSmrg  # Important note: in order to support this mode, a compiler *must*
4143e747e6dSmrg  # always write the preprocessed file to stdout, regardless of -o.
4153e747e6dSmrg  "$@" || exit $?
4163e747e6dSmrg
4173e747e6dSmrg  # Remove the call to Libtool.
4183e747e6dSmrg  if test "$libtool" = yes; then
4197a2631fcSmrg    while test "X$1" != 'X--mode=compile'; do
4203e747e6dSmrg      shift
4213e747e6dSmrg    done
4223e747e6dSmrg    shift
4233e747e6dSmrg  fi
4243e747e6dSmrg
4253e747e6dSmrg  # Remove `-o $object'.
4263e747e6dSmrg  IFS=" "
4273e747e6dSmrg  for arg
4283e747e6dSmrg  do
4293e747e6dSmrg    case $arg in
4303e747e6dSmrg    -o)
4313e747e6dSmrg      shift
4323e747e6dSmrg      ;;
4333e747e6dSmrg    $object)
4343e747e6dSmrg      shift
4353e747e6dSmrg      ;;
4363e747e6dSmrg    *)
4373e747e6dSmrg      set fnord "$@" "$arg"
4383e747e6dSmrg      shift # fnord
4393e747e6dSmrg      shift # $arg
4403e747e6dSmrg      ;;
4413e747e6dSmrg    esac
4423e747e6dSmrg  done
4433e747e6dSmrg
4443e747e6dSmrg  test -z "$dashmflag" && dashmflag=-M
4453e747e6dSmrg  # Require at least two characters before searching for `:'
4463e747e6dSmrg  # in the target name.  This is to cope with DOS-style filenames:
4473e747e6dSmrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
4483e747e6dSmrg  "$@" $dashmflag |
4493e747e6dSmrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
4503e747e6dSmrg  rm -f "$depfile"
4513e747e6dSmrg  cat < "$tmpdepfile" > "$depfile"
4523e747e6dSmrg  tr ' ' '
4533e747e6dSmrg' < "$tmpdepfile" | \
4543e747e6dSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
4553e747e6dSmrg## correctly.  Breaking it into two sed invocations is a workaround.
4563e747e6dSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
4573e747e6dSmrg  rm -f "$tmpdepfile"
4583e747e6dSmrg  ;;
4593e747e6dSmrg
4603e747e6dSmrgdashXmstdout)
4613e747e6dSmrg  # This case only exists to satisfy depend.m4.  It is never actually
4623e747e6dSmrg  # run, as this mode is specially recognized in the preamble.
4633e747e6dSmrg  exit 1
4643e747e6dSmrg  ;;
4653e747e6dSmrg
4663e747e6dSmrgmakedepend)
4673e747e6dSmrg  "$@" || exit $?
4683e747e6dSmrg  # Remove any Libtool call
4693e747e6dSmrg  if test "$libtool" = yes; then
4707a2631fcSmrg    while test "X$1" != 'X--mode=compile'; do
4713e747e6dSmrg      shift
4723e747e6dSmrg    done
4733e747e6dSmrg    shift
4743e747e6dSmrg  fi
4753e747e6dSmrg  # X makedepend
4763e747e6dSmrg  shift
4777a2631fcSmrg  cleared=no eat=no
4787a2631fcSmrg  for arg
4797a2631fcSmrg  do
4803e747e6dSmrg    case $cleared in
4813e747e6dSmrg    no)
4823e747e6dSmrg      set ""; shift
4833e747e6dSmrg      cleared=yes ;;
4843e747e6dSmrg    esac
4857a2631fcSmrg    if test $eat = yes; then
4867a2631fcSmrg      eat=no
4877a2631fcSmrg      continue
4887a2631fcSmrg    fi
4893e747e6dSmrg    case "$arg" in
4903e747e6dSmrg    -D*|-I*)
4913e747e6dSmrg      set fnord "$@" "$arg"; shift ;;
4923e747e6dSmrg    # Strip any option that makedepend may not understand.  Remove
4933e747e6dSmrg    # the object too, otherwise makedepend will parse it as a source file.
4947a2631fcSmrg    -arch)
4957a2631fcSmrg      eat=yes ;;
4963e747e6dSmrg    -*|$object)
4973e747e6dSmrg      ;;
4983e747e6dSmrg    *)
4993e747e6dSmrg      set fnord "$@" "$arg"; shift ;;
5003e747e6dSmrg    esac
5013e747e6dSmrg  done
5027a2631fcSmrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
5033e747e6dSmrg  touch "$tmpdepfile"
5043e747e6dSmrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
5053e747e6dSmrg  rm -f "$depfile"
5063e747e6dSmrg  cat < "$tmpdepfile" > "$depfile"
5073e747e6dSmrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
5083e747e6dSmrg' | \
5093e747e6dSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
5103e747e6dSmrg## correctly.  Breaking it into two sed invocations is a workaround.
5113e747e6dSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
5123e747e6dSmrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
5133e747e6dSmrg  ;;
5143e747e6dSmrg
5153e747e6dSmrgcpp)
5163e747e6dSmrg  # Important note: in order to support this mode, a compiler *must*
5173e747e6dSmrg  # always write the preprocessed file to stdout.
5183e747e6dSmrg  "$@" || exit $?
5193e747e6dSmrg
5203e747e6dSmrg  # Remove the call to Libtool.
5213e747e6dSmrg  if test "$libtool" = yes; then
5227a2631fcSmrg    while test "X$1" != 'X--mode=compile'; do
5233e747e6dSmrg      shift
5243e747e6dSmrg    done
5253e747e6dSmrg    shift
5263e747e6dSmrg  fi
5273e747e6dSmrg
5283e747e6dSmrg  # Remove `-o $object'.
5293e747e6dSmrg  IFS=" "
5303e747e6dSmrg  for arg
5313e747e6dSmrg  do
5323e747e6dSmrg    case $arg in
5333e747e6dSmrg    -o)
5343e747e6dSmrg      shift
5353e747e6dSmrg      ;;
5363e747e6dSmrg    $object)
5373e747e6dSmrg      shift
5383e747e6dSmrg      ;;
5393e747e6dSmrg    *)
5403e747e6dSmrg      set fnord "$@" "$arg"
5413e747e6dSmrg      shift # fnord
5423e747e6dSmrg      shift # $arg
5433e747e6dSmrg      ;;
5443e747e6dSmrg    esac
5453e747e6dSmrg  done
5463e747e6dSmrg
5473e747e6dSmrg  "$@" -E |
5483e747e6dSmrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
5493e747e6dSmrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
5503e747e6dSmrg    sed '$ s: \\$::' > "$tmpdepfile"
5513e747e6dSmrg  rm -f "$depfile"
5523e747e6dSmrg  echo "$object : \\" > "$depfile"
5533e747e6dSmrg  cat < "$tmpdepfile" >> "$depfile"
5543e747e6dSmrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
5553e747e6dSmrg  rm -f "$tmpdepfile"
5563e747e6dSmrg  ;;
5573e747e6dSmrg
5583e747e6dSmrgmsvisualcpp)
5593e747e6dSmrg  # Important note: in order to support this mode, a compiler *must*
5607a2631fcSmrg  # always write the preprocessed file to stdout.
5613e747e6dSmrg  "$@" || exit $?
5627a2631fcSmrg
5637a2631fcSmrg  # Remove the call to Libtool.
5647a2631fcSmrg  if test "$libtool" = yes; then
5657a2631fcSmrg    while test "X$1" != 'X--mode=compile'; do
5667a2631fcSmrg      shift
5677a2631fcSmrg    done
5687a2631fcSmrg    shift
5697a2631fcSmrg  fi
5707a2631fcSmrg
5713e747e6dSmrg  IFS=" "
5723e747e6dSmrg  for arg
5733e747e6dSmrg  do
5743e747e6dSmrg    case "$arg" in
5757a2631fcSmrg    -o)
5767a2631fcSmrg      shift
5777a2631fcSmrg      ;;
5787a2631fcSmrg    $object)
5797a2631fcSmrg      shift
5807a2631fcSmrg      ;;
5813e747e6dSmrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
5823e747e6dSmrg	set fnord "$@"
5833e747e6dSmrg	shift
5843e747e6dSmrg	shift
5853e747e6dSmrg	;;
5863e747e6dSmrg    *)
5873e747e6dSmrg	set fnord "$@" "$arg"
5883e747e6dSmrg	shift
5893e747e6dSmrg	shift
5903e747e6dSmrg	;;
5913e747e6dSmrg    esac
5923e747e6dSmrg  done
5937a2631fcSmrg  "$@" -E 2>/dev/null |
5947a2631fcSmrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
5953e747e6dSmrg  rm -f "$depfile"
5963e747e6dSmrg  echo "$object : \\" > "$depfile"
5977a2631fcSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
5983e747e6dSmrg  echo "	" >> "$depfile"
5997a2631fcSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
6003e747e6dSmrg  rm -f "$tmpdepfile"
6013e747e6dSmrg  ;;
6023e747e6dSmrg
6037a2631fcSmrgmsvcmsys)
6047a2631fcSmrg  # This case exists only to let depend.m4 do its work.  It works by
6057a2631fcSmrg  # looking at the text of this script.  This case will never be run,
6067a2631fcSmrg  # since it is checked for above.
6077a2631fcSmrg  exit 1
6087a2631fcSmrg  ;;
6097a2631fcSmrg
6103e747e6dSmrgnone)
6113e747e6dSmrg  exec "$@"
6123e747e6dSmrg  ;;
6133e747e6dSmrg
6143e747e6dSmrg*)
6153e747e6dSmrg  echo "Unknown depmode $depmode" 1>&2
6163e747e6dSmrg  exit 1
6173e747e6dSmrg  ;;
6183e747e6dSmrgesac
6193e747e6dSmrg
6203e747e6dSmrgexit 0
6213e747e6dSmrg
6223e747e6dSmrg# Local Variables:
6233e747e6dSmrg# mode: shell-script
6243e747e6dSmrg# sh-indentation: 2
6253e747e6dSmrg# eval: (add-hook 'write-file-hooks 'time-stamp)
6263e747e6dSmrg# time-stamp-start: "scriptversion="
6273e747e6dSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
6287a2631fcSmrg# time-stamp-time-zone: "UTC"
6297a2631fcSmrg# time-stamp-end: "; # UTC"
6303e747e6dSmrg# End:
631