depcomp revision 1a30de1f
11a30de1fSmrg#! /bin/sh
21a30de1fSmrg# depcomp - compile a program generating dependencies as side-effects
31a30de1fSmrg
41a30de1fSmrgscriptversion=2006-10-15.18
51a30de1fSmrg
61a30de1fSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software
71a30de1fSmrg# Foundation, Inc.
81a30de1fSmrg
91a30de1fSmrg# This program is free software; you can redistribute it and/or modify
101a30de1fSmrg# it under the terms of the GNU General Public License as published by
111a30de1fSmrg# the Free Software Foundation; either version 2, or (at your option)
121a30de1fSmrg# any later version.
131a30de1fSmrg
141a30de1fSmrg# This program is distributed in the hope that it will be useful,
151a30de1fSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
161a30de1fSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
171a30de1fSmrg# GNU General Public License for more details.
181a30de1fSmrg
191a30de1fSmrg# You should have received a copy of the GNU General Public License
201a30de1fSmrg# along with this program; if not, write to the Free Software
211a30de1fSmrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
221a30de1fSmrg# 02110-1301, USA.
231a30de1fSmrg
241a30de1fSmrg# As a special exception to the GNU General Public License, if you
251a30de1fSmrg# distribute this file as part of a program that contains a
261a30de1fSmrg# configuration script generated by Autoconf, you may include it under
271a30de1fSmrg# the same distribution terms that you use for the rest of that program.
281a30de1fSmrg
291a30de1fSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
301a30de1fSmrg
311a30de1fSmrgcase $1 in
321a30de1fSmrg  '')
331a30de1fSmrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
341a30de1fSmrg     exit 1;
351a30de1fSmrg     ;;
361a30de1fSmrg  -h | --h*)
371a30de1fSmrg    cat <<\EOF
381a30de1fSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
391a30de1fSmrg
401a30de1fSmrgRun PROGRAMS ARGS to compile a file, generating dependencies
411a30de1fSmrgas side-effects.
421a30de1fSmrg
431a30de1fSmrgEnvironment variables:
441a30de1fSmrg  depmode     Dependency tracking mode.
451a30de1fSmrg  source      Source file read by `PROGRAMS ARGS'.
461a30de1fSmrg  object      Object file output by `PROGRAMS ARGS'.
471a30de1fSmrg  DEPDIR      directory where to store dependencies.
481a30de1fSmrg  depfile     Dependency file to output.
491a30de1fSmrg  tmpdepfile  Temporary file to use when outputing dependencies.
501a30de1fSmrg  libtool     Whether libtool is used (yes/no).
511a30de1fSmrg
521a30de1fSmrgReport bugs to <bug-automake@gnu.org>.
531a30de1fSmrgEOF
541a30de1fSmrg    exit $?
551a30de1fSmrg    ;;
561a30de1fSmrg  -v | --v*)
571a30de1fSmrg    echo "depcomp $scriptversion"
581a30de1fSmrg    exit $?
591a30de1fSmrg    ;;
601a30de1fSmrgesac
611a30de1fSmrg
621a30de1fSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
631a30de1fSmrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
641a30de1fSmrg  exit 1
651a30de1fSmrgfi
661a30de1fSmrg
671a30de1fSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
681a30de1fSmrgdepfile=${depfile-`echo "$object" |
691a30de1fSmrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
701a30de1fSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
711a30de1fSmrg
721a30de1fSmrgrm -f "$tmpdepfile"
731a30de1fSmrg
741a30de1fSmrg# Some modes work just like other modes, but use different flags.  We
751a30de1fSmrg# parameterize here, but still list the modes in the big case below,
761a30de1fSmrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
771a30de1fSmrg# here, because this file can only contain one case statement.
781a30de1fSmrgif test "$depmode" = hp; then
791a30de1fSmrg  # HP compiler uses -M and no extra arg.
801a30de1fSmrg  gccflag=-M
811a30de1fSmrg  depmode=gcc
821a30de1fSmrgfi
831a30de1fSmrg
841a30de1fSmrgif test "$depmode" = dashXmstdout; then
851a30de1fSmrg   # This is just like dashmstdout with a different argument.
861a30de1fSmrg   dashmflag=-xM
871a30de1fSmrg   depmode=dashmstdout
881a30de1fSmrgfi
891a30de1fSmrg
901a30de1fSmrgcase "$depmode" in
911a30de1fSmrggcc3)
921a30de1fSmrg## gcc 3 implements dependency tracking that does exactly what
931a30de1fSmrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
941a30de1fSmrg## it if -MD -MP comes after the -MF stuff.  Hmm.
951a30de1fSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
961a30de1fSmrg## the command line argument order; so add the flags where they
971a30de1fSmrg## appear in depend2.am.  Note that the slowdown incurred here
981a30de1fSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
991a30de1fSmrg  for arg
1001a30de1fSmrg  do
1011a30de1fSmrg    case $arg in
1021a30de1fSmrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
1031a30de1fSmrg    *)  set fnord "$@" "$arg" ;;
1041a30de1fSmrg    esac
1051a30de1fSmrg    shift # fnord
1061a30de1fSmrg    shift # $arg
1071a30de1fSmrg  done
1081a30de1fSmrg  "$@"
1091a30de1fSmrg  stat=$?
1101a30de1fSmrg  if test $stat -eq 0; then :
1111a30de1fSmrg  else
1121a30de1fSmrg    rm -f "$tmpdepfile"
1131a30de1fSmrg    exit $stat
1141a30de1fSmrg  fi
1151a30de1fSmrg  mv "$tmpdepfile" "$depfile"
1161a30de1fSmrg  ;;
1171a30de1fSmrg
1181a30de1fSmrggcc)
1191a30de1fSmrg## There are various ways to get dependency output from gcc.  Here's
1201a30de1fSmrg## why we pick this rather obscure method:
1211a30de1fSmrg## - Don't want to use -MD because we'd like the dependencies to end
1221a30de1fSmrg##   up in a subdir.  Having to rename by hand is ugly.
1231a30de1fSmrg##   (We might end up doing this anyway to support other compilers.)
1241a30de1fSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
1251a30de1fSmrg##   -MM, not -M (despite what the docs say).
1261a30de1fSmrg## - Using -M directly means running the compiler twice (even worse
1271a30de1fSmrg##   than renaming).
1281a30de1fSmrg  if test -z "$gccflag"; then
1291a30de1fSmrg    gccflag=-MD,
1301a30de1fSmrg  fi
1311a30de1fSmrg  "$@" -Wp,"$gccflag$tmpdepfile"
1321a30de1fSmrg  stat=$?
1331a30de1fSmrg  if test $stat -eq 0; then :
1341a30de1fSmrg  else
1351a30de1fSmrg    rm -f "$tmpdepfile"
1361a30de1fSmrg    exit $stat
1371a30de1fSmrg  fi
1381a30de1fSmrg  rm -f "$depfile"
1391a30de1fSmrg  echo "$object : \\" > "$depfile"
1401a30de1fSmrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
1411a30de1fSmrg## The second -e expression handles DOS-style file names with drive letters.
1421a30de1fSmrg  sed -e 's/^[^:]*: / /' \
1431a30de1fSmrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
1441a30de1fSmrg## This next piece of magic avoids the `deleted header file' problem.
1451a30de1fSmrg## The problem is that when a header file which appears in a .P file
1461a30de1fSmrg## is deleted, the dependency causes make to die (because there is
1471a30de1fSmrg## typically no way to rebuild the header).  We avoid this by adding
1481a30de1fSmrg## dummy dependencies for each header file.  Too bad gcc doesn't do
1491a30de1fSmrg## this for us directly.
1501a30de1fSmrg  tr ' ' '
1511a30de1fSmrg' < "$tmpdepfile" |
1521a30de1fSmrg## Some versions of gcc put a space before the `:'.  On the theory
1531a30de1fSmrg## that the space means something, we add a space to the output as
1541a30de1fSmrg## well.
1551a30de1fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
1561a30de1fSmrg## correctly.  Breaking it into two sed invocations is a workaround.
1571a30de1fSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
1581a30de1fSmrg  rm -f "$tmpdepfile"
1591a30de1fSmrg  ;;
1601a30de1fSmrg
1611a30de1fSmrghp)
1621a30de1fSmrg  # This case exists only to let depend.m4 do its work.  It works by
1631a30de1fSmrg  # looking at the text of this script.  This case will never be run,
1641a30de1fSmrg  # since it is checked for above.
1651a30de1fSmrg  exit 1
1661a30de1fSmrg  ;;
1671a30de1fSmrg
1681a30de1fSmrgsgi)
1691a30de1fSmrg  if test "$libtool" = yes; then
1701a30de1fSmrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
1711a30de1fSmrg  else
1721a30de1fSmrg    "$@" -MDupdate "$tmpdepfile"
1731a30de1fSmrg  fi
1741a30de1fSmrg  stat=$?
1751a30de1fSmrg  if test $stat -eq 0; then :
1761a30de1fSmrg  else
1771a30de1fSmrg    rm -f "$tmpdepfile"
1781a30de1fSmrg    exit $stat
1791a30de1fSmrg  fi
1801a30de1fSmrg  rm -f "$depfile"
1811a30de1fSmrg
1821a30de1fSmrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
1831a30de1fSmrg    echo "$object : \\" > "$depfile"
1841a30de1fSmrg
1851a30de1fSmrg    # Clip off the initial element (the dependent).  Don't try to be
1861a30de1fSmrg    # clever and replace this with sed code, as IRIX sed won't handle
1871a30de1fSmrg    # lines with more than a fixed number of characters (4096 in
1881a30de1fSmrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
1891a30de1fSmrg    # the IRIX cc adds comments like `#:fec' to the end of the
1901a30de1fSmrg    # dependency line.
1911a30de1fSmrg    tr ' ' '
1921a30de1fSmrg' < "$tmpdepfile" \
1931a30de1fSmrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
1941a30de1fSmrg    tr '
1951a30de1fSmrg' ' ' >> $depfile
1961a30de1fSmrg    echo >> $depfile
1971a30de1fSmrg
1981a30de1fSmrg    # The second pass generates a dummy entry for each header file.
1991a30de1fSmrg    tr ' ' '
2001a30de1fSmrg' < "$tmpdepfile" \
2011a30de1fSmrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
2021a30de1fSmrg   >> $depfile
2031a30de1fSmrg  else
2041a30de1fSmrg    # The sourcefile does not contain any dependencies, so just
2051a30de1fSmrg    # store a dummy comment line, to avoid errors with the Makefile
2061a30de1fSmrg    # "include basename.Plo" scheme.
2071a30de1fSmrg    echo "#dummy" > "$depfile"
2081a30de1fSmrg  fi
2091a30de1fSmrg  rm -f "$tmpdepfile"
2101a30de1fSmrg  ;;
2111a30de1fSmrg
2121a30de1fSmrgaix)
2131a30de1fSmrg  # The C for AIX Compiler uses -M and outputs the dependencies
2141a30de1fSmrg  # in a .u file.  In older versions, this file always lives in the
2151a30de1fSmrg  # current directory.  Also, the AIX compiler puts `$object:' at the
2161a30de1fSmrg  # start of each line; $object doesn't have directory information.
2171a30de1fSmrg  # Version 6 uses the directory in both cases.
2181a30de1fSmrg  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
2191a30de1fSmrg  tmpdepfile="$stripped.u"
2201a30de1fSmrg  if test "$libtool" = yes; then
2211a30de1fSmrg    "$@" -Wc,-M
2221a30de1fSmrg  else
2231a30de1fSmrg    "$@" -M
2241a30de1fSmrg  fi
2251a30de1fSmrg  stat=$?
2261a30de1fSmrg
2271a30de1fSmrg  if test -f "$tmpdepfile"; then :
2281a30de1fSmrg  else
2291a30de1fSmrg    stripped=`echo "$stripped" | sed 's,^.*/,,'`
2301a30de1fSmrg    tmpdepfile="$stripped.u"
2311a30de1fSmrg  fi
2321a30de1fSmrg
2331a30de1fSmrg  if test $stat -eq 0; then :
2341a30de1fSmrg  else
2351a30de1fSmrg    rm -f "$tmpdepfile"
2361a30de1fSmrg    exit $stat
2371a30de1fSmrg  fi
2381a30de1fSmrg
2391a30de1fSmrg  if test -f "$tmpdepfile"; then
2401a30de1fSmrg    outname="$stripped.o"
2411a30de1fSmrg    # Each line is of the form `foo.o: dependent.h'.
2421a30de1fSmrg    # Do two passes, one to just change these to
2431a30de1fSmrg    # `$object: dependent.h' and one to simply `dependent.h:'.
2441a30de1fSmrg    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
2451a30de1fSmrg    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
2461a30de1fSmrg  else
2471a30de1fSmrg    # The sourcefile does not contain any dependencies, so just
2481a30de1fSmrg    # store a dummy comment line, to avoid errors with the Makefile
2491a30de1fSmrg    # "include basename.Plo" scheme.
2501a30de1fSmrg    echo "#dummy" > "$depfile"
2511a30de1fSmrg  fi
2521a30de1fSmrg  rm -f "$tmpdepfile"
2531a30de1fSmrg  ;;
2541a30de1fSmrg
2551a30de1fSmrgicc)
2561a30de1fSmrg  # Intel's C compiler understands `-MD -MF file'.  However on
2571a30de1fSmrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
2581a30de1fSmrg  # ICC 7.0 will fill foo.d with something like
2591a30de1fSmrg  #    foo.o: sub/foo.c
2601a30de1fSmrg  #    foo.o: sub/foo.h
2611a30de1fSmrg  # which is wrong.  We want:
2621a30de1fSmrg  #    sub/foo.o: sub/foo.c
2631a30de1fSmrg  #    sub/foo.o: sub/foo.h
2641a30de1fSmrg  #    sub/foo.c:
2651a30de1fSmrg  #    sub/foo.h:
2661a30de1fSmrg  # ICC 7.1 will output
2671a30de1fSmrg  #    foo.o: sub/foo.c sub/foo.h
2681a30de1fSmrg  # and will wrap long lines using \ :
2691a30de1fSmrg  #    foo.o: sub/foo.c ... \
2701a30de1fSmrg  #     sub/foo.h ... \
2711a30de1fSmrg  #     ...
2721a30de1fSmrg
2731a30de1fSmrg  "$@" -MD -MF "$tmpdepfile"
2741a30de1fSmrg  stat=$?
2751a30de1fSmrg  if test $stat -eq 0; then :
2761a30de1fSmrg  else
2771a30de1fSmrg    rm -f "$tmpdepfile"
2781a30de1fSmrg    exit $stat
2791a30de1fSmrg  fi
2801a30de1fSmrg  rm -f "$depfile"
2811a30de1fSmrg  # Each line is of the form `foo.o: dependent.h',
2821a30de1fSmrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
2831a30de1fSmrg  # Do two passes, one to just change these to
2841a30de1fSmrg  # `$object: dependent.h' and one to simply `dependent.h:'.
2851a30de1fSmrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
2861a30de1fSmrg  # Some versions of the HPUX 10.20 sed can't process this invocation
2871a30de1fSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
2881a30de1fSmrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
2891a30de1fSmrg    sed -e 's/$/ :/' >> "$depfile"
2901a30de1fSmrg  rm -f "$tmpdepfile"
2911a30de1fSmrg  ;;
2921a30de1fSmrg
2931a30de1fSmrghp2)
2941a30de1fSmrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
2951a30de1fSmrg  # compilers, which have integrated preprocessors.  The correct option
2961a30de1fSmrg  # to use with these is +Maked; it writes dependencies to a file named
2971a30de1fSmrg  # 'foo.d', which lands next to the object file, wherever that
2981a30de1fSmrg  # happens to be.
2991a30de1fSmrg  # Much of this is similar to the tru64 case; see comments there.
3001a30de1fSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3011a30de1fSmrg  test "x$dir" = "x$object" && dir=
3021a30de1fSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3031a30de1fSmrg  if test "$libtool" = yes; then
3041a30de1fSmrg    tmpdepfile1=$dir$base.d
3051a30de1fSmrg    tmpdepfile2=$dir.libs/$base.d
3061a30de1fSmrg    "$@" -Wc,+Maked
3071a30de1fSmrg  else
3081a30de1fSmrg    tmpdepfile1=$dir$base.d
3091a30de1fSmrg    tmpdepfile2=$dir$base.d
3101a30de1fSmrg    "$@" +Maked
3111a30de1fSmrg  fi
3121a30de1fSmrg  stat=$?
3131a30de1fSmrg  if test $stat -eq 0; then :
3141a30de1fSmrg  else
3151a30de1fSmrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
3161a30de1fSmrg     exit $stat
3171a30de1fSmrg  fi
3181a30de1fSmrg
3191a30de1fSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
3201a30de1fSmrg  do
3211a30de1fSmrg    test -f "$tmpdepfile" && break
3221a30de1fSmrg  done
3231a30de1fSmrg  if test -f "$tmpdepfile"; then
3241a30de1fSmrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
3251a30de1fSmrg    # Add `dependent.h:' lines.
3261a30de1fSmrg    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
3271a30de1fSmrg  else
3281a30de1fSmrg    echo "#dummy" > "$depfile"
3291a30de1fSmrg  fi
3301a30de1fSmrg  rm -f "$tmpdepfile" "$tmpdepfile2"
3311a30de1fSmrg  ;;
3321a30de1fSmrg
3331a30de1fSmrgtru64)
3341a30de1fSmrg   # The Tru64 compiler uses -MD to generate dependencies as a side
3351a30de1fSmrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
3361a30de1fSmrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
3371a30de1fSmrg   # dependencies in `foo.d' instead, so we check for that too.
3381a30de1fSmrg   # Subdirectories are respected.
3391a30de1fSmrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3401a30de1fSmrg   test "x$dir" = "x$object" && dir=
3411a30de1fSmrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3421a30de1fSmrg
3431a30de1fSmrg   if test "$libtool" = yes; then
3441a30de1fSmrg      # With Tru64 cc, shared objects can also be used to make a
3451a30de1fSmrg      # static library.  This mechanism is used in libtool 1.4 series to
3461a30de1fSmrg      # handle both shared and static libraries in a single compilation.
3471a30de1fSmrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
3481a30de1fSmrg      #
3491a30de1fSmrg      # With libtool 1.5 this exception was removed, and libtool now
3501a30de1fSmrg      # generates 2 separate objects for the 2 libraries.  These two
3511a30de1fSmrg      # compilations output dependencies in $dir.libs/$base.o.d and
3521a30de1fSmrg      # in $dir$base.o.d.  We have to check for both files, because
3531a30de1fSmrg      # one of the two compilations can be disabled.  We should prefer
3541a30de1fSmrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
3551a30de1fSmrg      # automatically cleaned when .libs/ is deleted, while ignoring
3561a30de1fSmrg      # the former would cause a distcleancheck panic.
3571a30de1fSmrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
3581a30de1fSmrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
3591a30de1fSmrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
3601a30de1fSmrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
3611a30de1fSmrg      "$@" -Wc,-MD
3621a30de1fSmrg   else
3631a30de1fSmrg      tmpdepfile1=$dir$base.o.d
3641a30de1fSmrg      tmpdepfile2=$dir$base.d
3651a30de1fSmrg      tmpdepfile3=$dir$base.d
3661a30de1fSmrg      tmpdepfile4=$dir$base.d
3671a30de1fSmrg      "$@" -MD
3681a30de1fSmrg   fi
3691a30de1fSmrg
3701a30de1fSmrg   stat=$?
3711a30de1fSmrg   if test $stat -eq 0; then :
3721a30de1fSmrg   else
3731a30de1fSmrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3741a30de1fSmrg      exit $stat
3751a30de1fSmrg   fi
3761a30de1fSmrg
3771a30de1fSmrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3781a30de1fSmrg   do
3791a30de1fSmrg     test -f "$tmpdepfile" && break
3801a30de1fSmrg   done
3811a30de1fSmrg   if test -f "$tmpdepfile"; then
3821a30de1fSmrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
3831a30de1fSmrg      # That's a tab and a space in the [].
3841a30de1fSmrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
3851a30de1fSmrg   else
3861a30de1fSmrg      echo "#dummy" > "$depfile"
3871a30de1fSmrg   fi
3881a30de1fSmrg   rm -f "$tmpdepfile"
3891a30de1fSmrg   ;;
3901a30de1fSmrg
3911a30de1fSmrg#nosideeffect)
3921a30de1fSmrg  # This comment above is used by automake to tell side-effect
3931a30de1fSmrg  # dependency tracking mechanisms from slower ones.
3941a30de1fSmrg
3951a30de1fSmrgdashmstdout)
3961a30de1fSmrg  # Important note: in order to support this mode, a compiler *must*
3971a30de1fSmrg  # always write the preprocessed file to stdout, regardless of -o.
3981a30de1fSmrg  "$@" || exit $?
3991a30de1fSmrg
4001a30de1fSmrg  # Remove the call to Libtool.
4011a30de1fSmrg  if test "$libtool" = yes; then
4021a30de1fSmrg    while test $1 != '--mode=compile'; do
4031a30de1fSmrg      shift
4041a30de1fSmrg    done
4051a30de1fSmrg    shift
4061a30de1fSmrg  fi
4071a30de1fSmrg
4081a30de1fSmrg  # Remove `-o $object'.
4091a30de1fSmrg  IFS=" "
4101a30de1fSmrg  for arg
4111a30de1fSmrg  do
4121a30de1fSmrg    case $arg in
4131a30de1fSmrg    -o)
4141a30de1fSmrg      shift
4151a30de1fSmrg      ;;
4161a30de1fSmrg    $object)
4171a30de1fSmrg      shift
4181a30de1fSmrg      ;;
4191a30de1fSmrg    *)
4201a30de1fSmrg      set fnord "$@" "$arg"
4211a30de1fSmrg      shift # fnord
4221a30de1fSmrg      shift # $arg
4231a30de1fSmrg      ;;
4241a30de1fSmrg    esac
4251a30de1fSmrg  done
4261a30de1fSmrg
4271a30de1fSmrg  test -z "$dashmflag" && dashmflag=-M
4281a30de1fSmrg  # Require at least two characters before searching for `:'
4291a30de1fSmrg  # in the target name.  This is to cope with DOS-style filenames:
4301a30de1fSmrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
4311a30de1fSmrg  "$@" $dashmflag |
4321a30de1fSmrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
4331a30de1fSmrg  rm -f "$depfile"
4341a30de1fSmrg  cat < "$tmpdepfile" > "$depfile"
4351a30de1fSmrg  tr ' ' '
4361a30de1fSmrg' < "$tmpdepfile" | \
4371a30de1fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
4381a30de1fSmrg## correctly.  Breaking it into two sed invocations is a workaround.
4391a30de1fSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
4401a30de1fSmrg  rm -f "$tmpdepfile"
4411a30de1fSmrg  ;;
4421a30de1fSmrg
4431a30de1fSmrgdashXmstdout)
4441a30de1fSmrg  # This case only exists to satisfy depend.m4.  It is never actually
4451a30de1fSmrg  # run, as this mode is specially recognized in the preamble.
4461a30de1fSmrg  exit 1
4471a30de1fSmrg  ;;
4481a30de1fSmrg
4491a30de1fSmrgmakedepend)
4501a30de1fSmrg  "$@" || exit $?
4511a30de1fSmrg  # Remove any Libtool call
4521a30de1fSmrg  if test "$libtool" = yes; then
4531a30de1fSmrg    while test $1 != '--mode=compile'; do
4541a30de1fSmrg      shift
4551a30de1fSmrg    done
4561a30de1fSmrg    shift
4571a30de1fSmrg  fi
4581a30de1fSmrg  # X makedepend
4591a30de1fSmrg  shift
4601a30de1fSmrg  cleared=no
4611a30de1fSmrg  for arg in "$@"; do
4621a30de1fSmrg    case $cleared in
4631a30de1fSmrg    no)
4641a30de1fSmrg      set ""; shift
4651a30de1fSmrg      cleared=yes ;;
4661a30de1fSmrg    esac
4671a30de1fSmrg    case "$arg" in
4681a30de1fSmrg    -D*|-I*)
4691a30de1fSmrg      set fnord "$@" "$arg"; shift ;;
4701a30de1fSmrg    # Strip any option that makedepend may not understand.  Remove
4711a30de1fSmrg    # the object too, otherwise makedepend will parse it as a source file.
4721a30de1fSmrg    -*|$object)
4731a30de1fSmrg      ;;
4741a30de1fSmrg    *)
4751a30de1fSmrg      set fnord "$@" "$arg"; shift ;;
4761a30de1fSmrg    esac
4771a30de1fSmrg  done
4781a30de1fSmrg  obj_suffix="`echo $object | sed 's/^.*\././'`"
4791a30de1fSmrg  touch "$tmpdepfile"
4801a30de1fSmrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
4811a30de1fSmrg  rm -f "$depfile"
4821a30de1fSmrg  cat < "$tmpdepfile" > "$depfile"
4831a30de1fSmrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
4841a30de1fSmrg' | \
4851a30de1fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
4861a30de1fSmrg## correctly.  Breaking it into two sed invocations is a workaround.
4871a30de1fSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
4881a30de1fSmrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
4891a30de1fSmrg  ;;
4901a30de1fSmrg
4911a30de1fSmrgcpp)
4921a30de1fSmrg  # Important note: in order to support this mode, a compiler *must*
4931a30de1fSmrg  # always write the preprocessed file to stdout.
4941a30de1fSmrg  "$@" || exit $?
4951a30de1fSmrg
4961a30de1fSmrg  # Remove the call to Libtool.
4971a30de1fSmrg  if test "$libtool" = yes; then
4981a30de1fSmrg    while test $1 != '--mode=compile'; do
4991a30de1fSmrg      shift
5001a30de1fSmrg    done
5011a30de1fSmrg    shift
5021a30de1fSmrg  fi
5031a30de1fSmrg
5041a30de1fSmrg  # Remove `-o $object'.
5051a30de1fSmrg  IFS=" "
5061a30de1fSmrg  for arg
5071a30de1fSmrg  do
5081a30de1fSmrg    case $arg in
5091a30de1fSmrg    -o)
5101a30de1fSmrg      shift
5111a30de1fSmrg      ;;
5121a30de1fSmrg    $object)
5131a30de1fSmrg      shift
5141a30de1fSmrg      ;;
5151a30de1fSmrg    *)
5161a30de1fSmrg      set fnord "$@" "$arg"
5171a30de1fSmrg      shift # fnord
5181a30de1fSmrg      shift # $arg
5191a30de1fSmrg      ;;
5201a30de1fSmrg    esac
5211a30de1fSmrg  done
5221a30de1fSmrg
5231a30de1fSmrg  "$@" -E |
5241a30de1fSmrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
5251a30de1fSmrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
5261a30de1fSmrg    sed '$ s: \\$::' > "$tmpdepfile"
5271a30de1fSmrg  rm -f "$depfile"
5281a30de1fSmrg  echo "$object : \\" > "$depfile"
5291a30de1fSmrg  cat < "$tmpdepfile" >> "$depfile"
5301a30de1fSmrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
5311a30de1fSmrg  rm -f "$tmpdepfile"
5321a30de1fSmrg  ;;
5331a30de1fSmrg
5341a30de1fSmrgmsvisualcpp)
5351a30de1fSmrg  # Important note: in order to support this mode, a compiler *must*
5361a30de1fSmrg  # always write the preprocessed file to stdout, regardless of -o,
5371a30de1fSmrg  # because we must use -o when running libtool.
5381a30de1fSmrg  "$@" || exit $?
5391a30de1fSmrg  IFS=" "
5401a30de1fSmrg  for arg
5411a30de1fSmrg  do
5421a30de1fSmrg    case "$arg" in
5431a30de1fSmrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
5441a30de1fSmrg	set fnord "$@"
5451a30de1fSmrg	shift
5461a30de1fSmrg	shift
5471a30de1fSmrg	;;
5481a30de1fSmrg    *)
5491a30de1fSmrg	set fnord "$@" "$arg"
5501a30de1fSmrg	shift
5511a30de1fSmrg	shift
5521a30de1fSmrg	;;
5531a30de1fSmrg    esac
5541a30de1fSmrg  done
5551a30de1fSmrg  "$@" -E |
5561a30de1fSmrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
5571a30de1fSmrg  rm -f "$depfile"
5581a30de1fSmrg  echo "$object : \\" > "$depfile"
5591a30de1fSmrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
5601a30de1fSmrg  echo "	" >> "$depfile"
5611a30de1fSmrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
5621a30de1fSmrg  rm -f "$tmpdepfile"
5631a30de1fSmrg  ;;
5641a30de1fSmrg
5651a30de1fSmrgnone)
5661a30de1fSmrg  exec "$@"
5671a30de1fSmrg  ;;
5681a30de1fSmrg
5691a30de1fSmrg*)
5701a30de1fSmrg  echo "Unknown depmode $depmode" 1>&2
5711a30de1fSmrg  exit 1
5721a30de1fSmrg  ;;
5731a30de1fSmrgesac
5741a30de1fSmrg
5751a30de1fSmrgexit 0
5761a30de1fSmrg
5771a30de1fSmrg# Local Variables:
5781a30de1fSmrg# mode: shell-script
5791a30de1fSmrg# sh-indentation: 2
5801a30de1fSmrg# eval: (add-hook 'write-file-hooks 'time-stamp)
5811a30de1fSmrg# time-stamp-start: "scriptversion="
5821a30de1fSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
5831a30de1fSmrg# time-stamp-end: "$"
5841a30de1fSmrg# End:
585