depcomp revision 3e6697d4
10e20ee16Smrg#! /bin/sh
20e20ee16Smrg# depcomp - compile a program generating dependencies as side-effects
33e6697d4Smrg
43e6697d4Smrgscriptversion=2009-04-28.21; # UTC
53e6697d4Smrg
63e6697d4Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
73e6697d4Smrg# Software Foundation, Inc.
80e20ee16Smrg
90e20ee16Smrg# This program is free software; you can redistribute it and/or modify
100e20ee16Smrg# it under the terms of the GNU General Public License as published by
110e20ee16Smrg# the Free Software Foundation; either version 2, or (at your option)
120e20ee16Smrg# any later version.
130e20ee16Smrg
140e20ee16Smrg# This program is distributed in the hope that it will be useful,
150e20ee16Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
160e20ee16Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
170e20ee16Smrg# GNU General Public License for more details.
180e20ee16Smrg
190e20ee16Smrg# You should have received a copy of the GNU General Public License
203e6697d4Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
210e20ee16Smrg
220e20ee16Smrg# As a special exception to the GNU General Public License, if you
230e20ee16Smrg# distribute this file as part of a program that contains a
240e20ee16Smrg# configuration script generated by Autoconf, you may include it under
250e20ee16Smrg# the same distribution terms that you use for the rest of that program.
260e20ee16Smrg
270e20ee16Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
280e20ee16Smrg
293e6697d4Smrgcase $1 in
303e6697d4Smrg  '')
313e6697d4Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
323e6697d4Smrg     exit 1;
333e6697d4Smrg     ;;
343e6697d4Smrg  -h | --h*)
353e6697d4Smrg    cat <<\EOF
363e6697d4SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
373e6697d4Smrg
383e6697d4SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
393e6697d4Smrgas side-effects.
403e6697d4Smrg
413e6697d4SmrgEnvironment variables:
423e6697d4Smrg  depmode     Dependency tracking mode.
433e6697d4Smrg  source      Source file read by `PROGRAMS ARGS'.
443e6697d4Smrg  object      Object file output by `PROGRAMS ARGS'.
453e6697d4Smrg  DEPDIR      directory where to store dependencies.
463e6697d4Smrg  depfile     Dependency file to output.
473e6697d4Smrg  tmpdepfile  Temporary file to use when outputing dependencies.
483e6697d4Smrg  libtool     Whether libtool is used (yes/no).
493e6697d4Smrg
503e6697d4SmrgReport bugs to <bug-automake@gnu.org>.
513e6697d4SmrgEOF
523e6697d4Smrg    exit $?
533e6697d4Smrg    ;;
543e6697d4Smrg  -v | --v*)
553e6697d4Smrg    echo "depcomp $scriptversion"
563e6697d4Smrg    exit $?
573e6697d4Smrg    ;;
583e6697d4Smrgesac
593e6697d4Smrg
600e20ee16Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
610e20ee16Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
620e20ee16Smrg  exit 1
630e20ee16Smrgfi
640e20ee16Smrg
653e6697d4Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
663e6697d4Smrgdepfile=${depfile-`echo "$object" |
673e6697d4Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
680e20ee16Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
690e20ee16Smrg
700e20ee16Smrgrm -f "$tmpdepfile"
710e20ee16Smrg
720e20ee16Smrg# Some modes work just like other modes, but use different flags.  We
730e20ee16Smrg# parameterize here, but still list the modes in the big case below,
740e20ee16Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
750e20ee16Smrg# here, because this file can only contain one case statement.
760e20ee16Smrgif test "$depmode" = hp; then
770e20ee16Smrg  # HP compiler uses -M and no extra arg.
780e20ee16Smrg  gccflag=-M
790e20ee16Smrg  depmode=gcc
800e20ee16Smrgfi
810e20ee16Smrg
820e20ee16Smrgif test "$depmode" = dashXmstdout; then
830e20ee16Smrg   # This is just like dashmstdout with a different argument.
840e20ee16Smrg   dashmflag=-xM
850e20ee16Smrg   depmode=dashmstdout
860e20ee16Smrgfi
870e20ee16Smrg
883e6697d4Smrgcygpath_u="cygpath -u -f -"
893e6697d4Smrgif test "$depmode" = msvcmsys; then
903e6697d4Smrg   # This is just like msvisualcpp but w/o cygpath translation.
913e6697d4Smrg   # Just convert the backslash-escaped backslashes to single forward
923e6697d4Smrg   # slashes to satisfy depend.m4
933e6697d4Smrg   cygpath_u="sed s,\\\\\\\\,/,g"
943e6697d4Smrg   depmode=msvisualcpp
953e6697d4Smrgfi
963e6697d4Smrg
970e20ee16Smrgcase "$depmode" in
980e20ee16Smrggcc3)
990e20ee16Smrg## gcc 3 implements dependency tracking that does exactly what
1000e20ee16Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
1010e20ee16Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
1023e6697d4Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
1033e6697d4Smrg## the command line argument order; so add the flags where they
1043e6697d4Smrg## appear in depend2.am.  Note that the slowdown incurred here
1053e6697d4Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
1063e6697d4Smrg  for arg
1073e6697d4Smrg  do
1083e6697d4Smrg    case $arg in
1093e6697d4Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
1103e6697d4Smrg    *)  set fnord "$@" "$arg" ;;
1113e6697d4Smrg    esac
1123e6697d4Smrg    shift # fnord
1133e6697d4Smrg    shift # $arg
1143e6697d4Smrg  done
1153e6697d4Smrg  "$@"
1160e20ee16Smrg  stat=$?
1170e20ee16Smrg  if test $stat -eq 0; then :
1180e20ee16Smrg  else
1190e20ee16Smrg    rm -f "$tmpdepfile"
1200e20ee16Smrg    exit $stat
1210e20ee16Smrg  fi
1220e20ee16Smrg  mv "$tmpdepfile" "$depfile"
1230e20ee16Smrg  ;;
1240e20ee16Smrg
1250e20ee16Smrggcc)
1260e20ee16Smrg## There are various ways to get dependency output from gcc.  Here's
1270e20ee16Smrg## why we pick this rather obscure method:
1280e20ee16Smrg## - Don't want to use -MD because we'd like the dependencies to end
1290e20ee16Smrg##   up in a subdir.  Having to rename by hand is ugly.
1300e20ee16Smrg##   (We might end up doing this anyway to support other compilers.)
1310e20ee16Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
1320e20ee16Smrg##   -MM, not -M (despite what the docs say).
1330e20ee16Smrg## - Using -M directly means running the compiler twice (even worse
1340e20ee16Smrg##   than renaming).
1350e20ee16Smrg  if test -z "$gccflag"; then
1360e20ee16Smrg    gccflag=-MD,
1370e20ee16Smrg  fi
1380e20ee16Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
1390e20ee16Smrg  stat=$?
1400e20ee16Smrg  if test $stat -eq 0; then :
1410e20ee16Smrg  else
1420e20ee16Smrg    rm -f "$tmpdepfile"
1430e20ee16Smrg    exit $stat
1440e20ee16Smrg  fi
1450e20ee16Smrg  rm -f "$depfile"
1460e20ee16Smrg  echo "$object : \\" > "$depfile"
1470e20ee16Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
1480e20ee16Smrg## The second -e expression handles DOS-style file names with drive letters.
1490e20ee16Smrg  sed -e 's/^[^:]*: / /' \
1500e20ee16Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
1510e20ee16Smrg## This next piece of magic avoids the `deleted header file' problem.
1520e20ee16Smrg## The problem is that when a header file which appears in a .P file
1530e20ee16Smrg## is deleted, the dependency causes make to die (because there is
1540e20ee16Smrg## typically no way to rebuild the header).  We avoid this by adding
1550e20ee16Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
1560e20ee16Smrg## this for us directly.
1570e20ee16Smrg  tr ' ' '
1580e20ee16Smrg' < "$tmpdepfile" |
1590e20ee16Smrg## Some versions of gcc put a space before the `:'.  On the theory
1600e20ee16Smrg## that the space means something, we add a space to the output as
1610e20ee16Smrg## well.
1620e20ee16Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
1630e20ee16Smrg## correctly.  Breaking it into two sed invocations is a workaround.
1640e20ee16Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
1650e20ee16Smrg  rm -f "$tmpdepfile"
1660e20ee16Smrg  ;;
1670e20ee16Smrg
1680e20ee16Smrghp)
1690e20ee16Smrg  # This case exists only to let depend.m4 do its work.  It works by
1700e20ee16Smrg  # looking at the text of this script.  This case will never be run,
1710e20ee16Smrg  # since it is checked for above.
1720e20ee16Smrg  exit 1
1730e20ee16Smrg  ;;
1740e20ee16Smrg
1750e20ee16Smrgsgi)
1760e20ee16Smrg  if test "$libtool" = yes; then
1770e20ee16Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
1780e20ee16Smrg  else
1790e20ee16Smrg    "$@" -MDupdate "$tmpdepfile"
1800e20ee16Smrg  fi
1810e20ee16Smrg  stat=$?
1820e20ee16Smrg  if test $stat -eq 0; then :
1830e20ee16Smrg  else
1840e20ee16Smrg    rm -f "$tmpdepfile"
1850e20ee16Smrg    exit $stat
1860e20ee16Smrg  fi
1870e20ee16Smrg  rm -f "$depfile"
1880e20ee16Smrg
1890e20ee16Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
1900e20ee16Smrg    echo "$object : \\" > "$depfile"
1910e20ee16Smrg
1920e20ee16Smrg    # Clip off the initial element (the dependent).  Don't try to be
1930e20ee16Smrg    # clever and replace this with sed code, as IRIX sed won't handle
1940e20ee16Smrg    # lines with more than a fixed number of characters (4096 in
1950e20ee16Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
1960e20ee16Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
1970e20ee16Smrg    # dependency line.
1980e20ee16Smrg    tr ' ' '
1990e20ee16Smrg' < "$tmpdepfile" \
2000e20ee16Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
2010e20ee16Smrg    tr '
2023e6697d4Smrg' ' ' >> "$depfile"
2033e6697d4Smrg    echo >> "$depfile"
2040e20ee16Smrg
2050e20ee16Smrg    # The second pass generates a dummy entry for each header file.
2060e20ee16Smrg    tr ' ' '
2070e20ee16Smrg' < "$tmpdepfile" \
2080e20ee16Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
2093e6697d4Smrg   >> "$depfile"
2100e20ee16Smrg  else
2110e20ee16Smrg    # The sourcefile does not contain any dependencies, so just
2120e20ee16Smrg    # store a dummy comment line, to avoid errors with the Makefile
2130e20ee16Smrg    # "include basename.Plo" scheme.
2140e20ee16Smrg    echo "#dummy" > "$depfile"
2150e20ee16Smrg  fi
2160e20ee16Smrg  rm -f "$tmpdepfile"
2170e20ee16Smrg  ;;
2180e20ee16Smrg
2190e20ee16Smrgaix)
2200e20ee16Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
2210e20ee16Smrg  # in a .u file.  In older versions, this file always lives in the
2220e20ee16Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
2230e20ee16Smrg  # start of each line; $object doesn't have directory information.
2240e20ee16Smrg  # Version 6 uses the directory in both cases.
2253e6697d4Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
2263e6697d4Smrg  test "x$dir" = "x$object" && dir=
2273e6697d4Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
2280e20ee16Smrg  if test "$libtool" = yes; then
2293e6697d4Smrg    tmpdepfile1=$dir$base.u
2303e6697d4Smrg    tmpdepfile2=$base.u
2313e6697d4Smrg    tmpdepfile3=$dir.libs/$base.u
2320e20ee16Smrg    "$@" -Wc,-M
2330e20ee16Smrg  else
2343e6697d4Smrg    tmpdepfile1=$dir$base.u
2353e6697d4Smrg    tmpdepfile2=$dir$base.u
2363e6697d4Smrg    tmpdepfile3=$dir$base.u
2370e20ee16Smrg    "$@" -M
2380e20ee16Smrg  fi
2390e20ee16Smrg  stat=$?
2400e20ee16Smrg
2410e20ee16Smrg  if test $stat -eq 0; then :
2420e20ee16Smrg  else
2433e6697d4Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2440e20ee16Smrg    exit $stat
2450e20ee16Smrg  fi
2460e20ee16Smrg
2473e6697d4Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2483e6697d4Smrg  do
2493e6697d4Smrg    test -f "$tmpdepfile" && break
2503e6697d4Smrg  done
2510e20ee16Smrg  if test -f "$tmpdepfile"; then
2520e20ee16Smrg    # Each line is of the form `foo.o: dependent.h'.
2530e20ee16Smrg    # Do two passes, one to just change these to
2540e20ee16Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
2553e6697d4Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
2563e6697d4Smrg    # That's a tab and a space in the [].
2573e6697d4Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
2580e20ee16Smrg  else
2590e20ee16Smrg    # The sourcefile does not contain any dependencies, so just
2600e20ee16Smrg    # store a dummy comment line, to avoid errors with the Makefile
2610e20ee16Smrg    # "include basename.Plo" scheme.
2620e20ee16Smrg    echo "#dummy" > "$depfile"
2630e20ee16Smrg  fi
2640e20ee16Smrg  rm -f "$tmpdepfile"
2650e20ee16Smrg  ;;
2660e20ee16Smrg
2670e20ee16Smrgicc)
2680e20ee16Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
2690e20ee16Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
2700e20ee16Smrg  # ICC 7.0 will fill foo.d with something like
2710e20ee16Smrg  #    foo.o: sub/foo.c
2720e20ee16Smrg  #    foo.o: sub/foo.h
2730e20ee16Smrg  # which is wrong.  We want:
2740e20ee16Smrg  #    sub/foo.o: sub/foo.c
2750e20ee16Smrg  #    sub/foo.o: sub/foo.h
2760e20ee16Smrg  #    sub/foo.c:
2770e20ee16Smrg  #    sub/foo.h:
2780e20ee16Smrg  # ICC 7.1 will output
2790e20ee16Smrg  #    foo.o: sub/foo.c sub/foo.h
2800e20ee16Smrg  # and will wrap long lines using \ :
2810e20ee16Smrg  #    foo.o: sub/foo.c ... \
2820e20ee16Smrg  #     sub/foo.h ... \
2830e20ee16Smrg  #     ...
2840e20ee16Smrg
2850e20ee16Smrg  "$@" -MD -MF "$tmpdepfile"
2860e20ee16Smrg  stat=$?
2870e20ee16Smrg  if test $stat -eq 0; then :
2880e20ee16Smrg  else
2890e20ee16Smrg    rm -f "$tmpdepfile"
2900e20ee16Smrg    exit $stat
2910e20ee16Smrg  fi
2920e20ee16Smrg  rm -f "$depfile"
2930e20ee16Smrg  # Each line is of the form `foo.o: dependent.h',
2940e20ee16Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
2950e20ee16Smrg  # Do two passes, one to just change these to
2960e20ee16Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
2970e20ee16Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
2980e20ee16Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
2990e20ee16Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
3000e20ee16Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
3010e20ee16Smrg    sed -e 's/$/ :/' >> "$depfile"
3020e20ee16Smrg  rm -f "$tmpdepfile"
3030e20ee16Smrg  ;;
3040e20ee16Smrg
3053e6697d4Smrghp2)
3063e6697d4Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
3073e6697d4Smrg  # compilers, which have integrated preprocessors.  The correct option
3083e6697d4Smrg  # to use with these is +Maked; it writes dependencies to a file named
3093e6697d4Smrg  # 'foo.d', which lands next to the object file, wherever that
3103e6697d4Smrg  # happens to be.
3113e6697d4Smrg  # Much of this is similar to the tru64 case; see comments there.
3123e6697d4Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3133e6697d4Smrg  test "x$dir" = "x$object" && dir=
3143e6697d4Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3153e6697d4Smrg  if test "$libtool" = yes; then
3163e6697d4Smrg    tmpdepfile1=$dir$base.d
3173e6697d4Smrg    tmpdepfile2=$dir.libs/$base.d
3183e6697d4Smrg    "$@" -Wc,+Maked
3193e6697d4Smrg  else
3203e6697d4Smrg    tmpdepfile1=$dir$base.d
3213e6697d4Smrg    tmpdepfile2=$dir$base.d
3223e6697d4Smrg    "$@" +Maked
3233e6697d4Smrg  fi
3243e6697d4Smrg  stat=$?
3253e6697d4Smrg  if test $stat -eq 0; then :
3263e6697d4Smrg  else
3273e6697d4Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
3283e6697d4Smrg     exit $stat
3293e6697d4Smrg  fi
3303e6697d4Smrg
3313e6697d4Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
3323e6697d4Smrg  do
3333e6697d4Smrg    test -f "$tmpdepfile" && break
3343e6697d4Smrg  done
3353e6697d4Smrg  if test -f "$tmpdepfile"; then
3363e6697d4Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
3373e6697d4Smrg    # Add `dependent.h:' lines.
3383e6697d4Smrg    sed -ne '2,${
3393e6697d4Smrg	       s/^ *//
3403e6697d4Smrg	       s/ \\*$//
3413e6697d4Smrg	       s/$/:/
3423e6697d4Smrg	       p
3433e6697d4Smrg	     }' "$tmpdepfile" >> "$depfile"
3443e6697d4Smrg  else
3453e6697d4Smrg    echo "#dummy" > "$depfile"
3463e6697d4Smrg  fi
3473e6697d4Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
3483e6697d4Smrg  ;;
3493e6697d4Smrg
3500e20ee16Smrgtru64)
3510e20ee16Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
3520e20ee16Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
3530e20ee16Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
3540e20ee16Smrg   # dependencies in `foo.d' instead, so we check for that too.
3550e20ee16Smrg   # Subdirectories are respected.
3560e20ee16Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3570e20ee16Smrg   test "x$dir" = "x$object" && dir=
3580e20ee16Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3590e20ee16Smrg
3600e20ee16Smrg   if test "$libtool" = yes; then
3613e6697d4Smrg      # With Tru64 cc, shared objects can also be used to make a
3623e6697d4Smrg      # static library.  This mechanism is used in libtool 1.4 series to
3633e6697d4Smrg      # handle both shared and static libraries in a single compilation.
3643e6697d4Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
3653e6697d4Smrg      #
3663e6697d4Smrg      # With libtool 1.5 this exception was removed, and libtool now
3673e6697d4Smrg      # generates 2 separate objects for the 2 libraries.  These two
3683e6697d4Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
3693e6697d4Smrg      # in $dir$base.o.d.  We have to check for both files, because
3703e6697d4Smrg      # one of the two compilations can be disabled.  We should prefer
3713e6697d4Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
3723e6697d4Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
3733e6697d4Smrg      # the former would cause a distcleancheck panic.
3743e6697d4Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
3753e6697d4Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
3763e6697d4Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
3773e6697d4Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
3780e20ee16Smrg      "$@" -Wc,-MD
3790e20ee16Smrg   else
3803e6697d4Smrg      tmpdepfile1=$dir$base.o.d
3813e6697d4Smrg      tmpdepfile2=$dir$base.d
3823e6697d4Smrg      tmpdepfile3=$dir$base.d
3833e6697d4Smrg      tmpdepfile4=$dir$base.d
3840e20ee16Smrg      "$@" -MD
3850e20ee16Smrg   fi
3860e20ee16Smrg
3870e20ee16Smrg   stat=$?
3880e20ee16Smrg   if test $stat -eq 0; then :
3890e20ee16Smrg   else
3903e6697d4Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3910e20ee16Smrg      exit $stat
3920e20ee16Smrg   fi
3930e20ee16Smrg
3943e6697d4Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3953e6697d4Smrg   do
3963e6697d4Smrg     test -f "$tmpdepfile" && break
3973e6697d4Smrg   done
3980e20ee16Smrg   if test -f "$tmpdepfile"; then
3990e20ee16Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
4000e20ee16Smrg      # That's a tab and a space in the [].
4010e20ee16Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
4020e20ee16Smrg   else
4030e20ee16Smrg      echo "#dummy" > "$depfile"
4040e20ee16Smrg   fi
4050e20ee16Smrg   rm -f "$tmpdepfile"
4060e20ee16Smrg   ;;
4070e20ee16Smrg
4080e20ee16Smrg#nosideeffect)
4090e20ee16Smrg  # This comment above is used by automake to tell side-effect
4100e20ee16Smrg  # dependency tracking mechanisms from slower ones.
4110e20ee16Smrg
4120e20ee16Smrgdashmstdout)
4130e20ee16Smrg  # Important note: in order to support this mode, a compiler *must*
4140e20ee16Smrg  # always write the preprocessed file to stdout, regardless of -o.
4150e20ee16Smrg  "$@" || exit $?
4160e20ee16Smrg
4170e20ee16Smrg  # Remove the call to Libtool.
4180e20ee16Smrg  if test "$libtool" = yes; then
4193e6697d4Smrg    while test "X$1" != 'X--mode=compile'; do
4200e20ee16Smrg      shift
4210e20ee16Smrg    done
4220e20ee16Smrg    shift
4230e20ee16Smrg  fi
4240e20ee16Smrg
4250e20ee16Smrg  # Remove `-o $object'.
4260e20ee16Smrg  IFS=" "
4270e20ee16Smrg  for arg
4280e20ee16Smrg  do
4290e20ee16Smrg    case $arg in
4300e20ee16Smrg    -o)
4310e20ee16Smrg      shift
4320e20ee16Smrg      ;;
4330e20ee16Smrg    $object)
4340e20ee16Smrg      shift
4350e20ee16Smrg      ;;
4360e20ee16Smrg    *)
4370e20ee16Smrg      set fnord "$@" "$arg"
4380e20ee16Smrg      shift # fnord
4390e20ee16Smrg      shift # $arg
4400e20ee16Smrg      ;;
4410e20ee16Smrg    esac
4420e20ee16Smrg  done
4430e20ee16Smrg
4440e20ee16Smrg  test -z "$dashmflag" && dashmflag=-M
4450e20ee16Smrg  # Require at least two characters before searching for `:'
4460e20ee16Smrg  # in the target name.  This is to cope with DOS-style filenames:
4470e20ee16Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
4480e20ee16Smrg  "$@" $dashmflag |
4490e20ee16Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
4500e20ee16Smrg  rm -f "$depfile"
4510e20ee16Smrg  cat < "$tmpdepfile" > "$depfile"
4520e20ee16Smrg  tr ' ' '
4530e20ee16Smrg' < "$tmpdepfile" | \
4540e20ee16Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
4550e20ee16Smrg## correctly.  Breaking it into two sed invocations is a workaround.
4560e20ee16Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
4570e20ee16Smrg  rm -f "$tmpdepfile"
4580e20ee16Smrg  ;;
4590e20ee16Smrg
4600e20ee16SmrgdashXmstdout)
4610e20ee16Smrg  # This case only exists to satisfy depend.m4.  It is never actually
4620e20ee16Smrg  # run, as this mode is specially recognized in the preamble.
4630e20ee16Smrg  exit 1
4640e20ee16Smrg  ;;
4650e20ee16Smrg
4660e20ee16Smrgmakedepend)
4670e20ee16Smrg  "$@" || exit $?
4680e20ee16Smrg  # Remove any Libtool call
4690e20ee16Smrg  if test "$libtool" = yes; then
4703e6697d4Smrg    while test "X$1" != 'X--mode=compile'; do
4710e20ee16Smrg      shift
4720e20ee16Smrg    done
4730e20ee16Smrg    shift
4740e20ee16Smrg  fi
4750e20ee16Smrg  # X makedepend
4760e20ee16Smrg  shift
4773e6697d4Smrg  cleared=no eat=no
4783e6697d4Smrg  for arg
4793e6697d4Smrg  do
4800e20ee16Smrg    case $cleared in
4810e20ee16Smrg    no)
4820e20ee16Smrg      set ""; shift
4830e20ee16Smrg      cleared=yes ;;
4840e20ee16Smrg    esac
4853e6697d4Smrg    if test $eat = yes; then
4863e6697d4Smrg      eat=no
4873e6697d4Smrg      continue
4883e6697d4Smrg    fi
4890e20ee16Smrg    case "$arg" in
4900e20ee16Smrg    -D*|-I*)
4910e20ee16Smrg      set fnord "$@" "$arg"; shift ;;
4920e20ee16Smrg    # Strip any option that makedepend may not understand.  Remove
4930e20ee16Smrg    # the object too, otherwise makedepend will parse it as a source file.
4943e6697d4Smrg    -arch)
4953e6697d4Smrg      eat=yes ;;
4960e20ee16Smrg    -*|$object)
4970e20ee16Smrg      ;;
4980e20ee16Smrg    *)
4990e20ee16Smrg      set fnord "$@" "$arg"; shift ;;
5000e20ee16Smrg    esac
5010e20ee16Smrg  done
5023e6697d4Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
5030e20ee16Smrg  touch "$tmpdepfile"
5040e20ee16Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
5050e20ee16Smrg  rm -f "$depfile"
5060e20ee16Smrg  cat < "$tmpdepfile" > "$depfile"
5070e20ee16Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
5080e20ee16Smrg' | \
5090e20ee16Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
5100e20ee16Smrg## correctly.  Breaking it into two sed invocations is a workaround.
5110e20ee16Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
5120e20ee16Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
5130e20ee16Smrg  ;;
5140e20ee16Smrg
5150e20ee16Smrgcpp)
5160e20ee16Smrg  # Important note: in order to support this mode, a compiler *must*
5170e20ee16Smrg  # always write the preprocessed file to stdout.
5180e20ee16Smrg  "$@" || exit $?
5190e20ee16Smrg
5200e20ee16Smrg  # Remove the call to Libtool.
5210e20ee16Smrg  if test "$libtool" = yes; then
5223e6697d4Smrg    while test "X$1" != 'X--mode=compile'; do
5230e20ee16Smrg      shift
5240e20ee16Smrg    done
5250e20ee16Smrg    shift
5260e20ee16Smrg  fi
5270e20ee16Smrg
5280e20ee16Smrg  # Remove `-o $object'.
5290e20ee16Smrg  IFS=" "
5300e20ee16Smrg  for arg
5310e20ee16Smrg  do
5320e20ee16Smrg    case $arg in
5330e20ee16Smrg    -o)
5340e20ee16Smrg      shift
5350e20ee16Smrg      ;;
5360e20ee16Smrg    $object)
5370e20ee16Smrg      shift
5380e20ee16Smrg      ;;
5390e20ee16Smrg    *)
5400e20ee16Smrg      set fnord "$@" "$arg"
5410e20ee16Smrg      shift # fnord
5420e20ee16Smrg      shift # $arg
5430e20ee16Smrg      ;;
5440e20ee16Smrg    esac
5450e20ee16Smrg  done
5460e20ee16Smrg
5470e20ee16Smrg  "$@" -E |
5483e6697d4Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
5493e6697d4Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
5500e20ee16Smrg    sed '$ s: \\$::' > "$tmpdepfile"
5510e20ee16Smrg  rm -f "$depfile"
5520e20ee16Smrg  echo "$object : \\" > "$depfile"
5530e20ee16Smrg  cat < "$tmpdepfile" >> "$depfile"
5540e20ee16Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
5550e20ee16Smrg  rm -f "$tmpdepfile"
5560e20ee16Smrg  ;;
5570e20ee16Smrg
5580e20ee16Smrgmsvisualcpp)
5590e20ee16Smrg  # Important note: in order to support this mode, a compiler *must*
5603e6697d4Smrg  # always write the preprocessed file to stdout.
5610e20ee16Smrg  "$@" || exit $?
5623e6697d4Smrg
5633e6697d4Smrg  # Remove the call to Libtool.
5643e6697d4Smrg  if test "$libtool" = yes; then
5653e6697d4Smrg    while test "X$1" != 'X--mode=compile'; do
5663e6697d4Smrg      shift
5673e6697d4Smrg    done
5683e6697d4Smrg    shift
5693e6697d4Smrg  fi
5703e6697d4Smrg
5710e20ee16Smrg  IFS=" "
5720e20ee16Smrg  for arg
5730e20ee16Smrg  do
5740e20ee16Smrg    case "$arg" in
5753e6697d4Smrg    -o)
5763e6697d4Smrg      shift
5773e6697d4Smrg      ;;
5783e6697d4Smrg    $object)
5793e6697d4Smrg      shift
5803e6697d4Smrg      ;;
5810e20ee16Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
5820e20ee16Smrg	set fnord "$@"
5830e20ee16Smrg	shift
5840e20ee16Smrg	shift
5850e20ee16Smrg	;;
5860e20ee16Smrg    *)
5870e20ee16Smrg	set fnord "$@" "$arg"
5880e20ee16Smrg	shift
5890e20ee16Smrg	shift
5900e20ee16Smrg	;;
5910e20ee16Smrg    esac
5920e20ee16Smrg  done
5933e6697d4Smrg  "$@" -E 2>/dev/null |
5943e6697d4Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
5950e20ee16Smrg  rm -f "$depfile"
5960e20ee16Smrg  echo "$object : \\" > "$depfile"
5973e6697d4Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
5980e20ee16Smrg  echo "	" >> "$depfile"
5993e6697d4Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
6000e20ee16Smrg  rm -f "$tmpdepfile"
6010e20ee16Smrg  ;;
6020e20ee16Smrg
6033e6697d4Smrgmsvcmsys)
6043e6697d4Smrg  # This case exists only to let depend.m4 do its work.  It works by
6053e6697d4Smrg  # looking at the text of this script.  This case will never be run,
6063e6697d4Smrg  # since it is checked for above.
6073e6697d4Smrg  exit 1
6083e6697d4Smrg  ;;
6093e6697d4Smrg
6100e20ee16Smrgnone)
6110e20ee16Smrg  exec "$@"
6120e20ee16Smrg  ;;
6130e20ee16Smrg
6140e20ee16Smrg*)
6150e20ee16Smrg  echo "Unknown depmode $depmode" 1>&2
6160e20ee16Smrg  exit 1
6170e20ee16Smrg  ;;
6180e20ee16Smrgesac
6190e20ee16Smrg
6200e20ee16Smrgexit 0
6213e6697d4Smrg
6223e6697d4Smrg# Local Variables:
6233e6697d4Smrg# mode: shell-script
6243e6697d4Smrg# sh-indentation: 2
6253e6697d4Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
6263e6697d4Smrg# time-stamp-start: "scriptversion="
6273e6697d4Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
6283e6697d4Smrg# time-stamp-time-zone: "UTC"
6293e6697d4Smrg# time-stamp-end: "; # UTC"
6303e6697d4Smrg# End:
631