depcomp revision 7da8b7e3
17da8b7e3Smrg#! /bin/sh
27da8b7e3Smrg# depcomp - compile a program generating dependencies as side-effects
37da8b7e3Smrg
47da8b7e3Smrgscriptversion=2005-07-09.11
57da8b7e3Smrg
67da8b7e3Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
77da8b7e3Smrg
87da8b7e3Smrg# This program is free software; you can redistribute it and/or modify
97da8b7e3Smrg# it under the terms of the GNU General Public License as published by
107da8b7e3Smrg# the Free Software Foundation; either version 2, or (at your option)
117da8b7e3Smrg# any later version.
127da8b7e3Smrg
137da8b7e3Smrg# This program is distributed in the hope that it will be useful,
147da8b7e3Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
157da8b7e3Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
167da8b7e3Smrg# GNU General Public License for more details.
177da8b7e3Smrg
187da8b7e3Smrg# You should have received a copy of the GNU General Public License
197da8b7e3Smrg# along with this program; if not, write to the Free Software
207da8b7e3Smrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
217da8b7e3Smrg# 02110-1301, USA.
227da8b7e3Smrg
237da8b7e3Smrg# As a special exception to the GNU General Public License, if you
247da8b7e3Smrg# distribute this file as part of a program that contains a
257da8b7e3Smrg# configuration script generated by Autoconf, you may include it under
267da8b7e3Smrg# the same distribution terms that you use for the rest of that program.
277da8b7e3Smrg
287da8b7e3Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
297da8b7e3Smrg
307da8b7e3Smrgcase $1 in
317da8b7e3Smrg  '')
327da8b7e3Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
337da8b7e3Smrg     exit 1;
347da8b7e3Smrg     ;;
357da8b7e3Smrg  -h | --h*)
367da8b7e3Smrg    cat <<\EOF
377da8b7e3SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
387da8b7e3Smrg
397da8b7e3SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
407da8b7e3Smrgas side-effects.
417da8b7e3Smrg
427da8b7e3SmrgEnvironment variables:
437da8b7e3Smrg  depmode     Dependency tracking mode.
447da8b7e3Smrg  source      Source file read by `PROGRAMS ARGS'.
457da8b7e3Smrg  object      Object file output by `PROGRAMS ARGS'.
467da8b7e3Smrg  DEPDIR      directory where to store dependencies.
477da8b7e3Smrg  depfile     Dependency file to output.
487da8b7e3Smrg  tmpdepfile  Temporary file to use when outputing dependencies.
497da8b7e3Smrg  libtool     Whether libtool is used (yes/no).
507da8b7e3Smrg
517da8b7e3SmrgReport bugs to <bug-automake@gnu.org>.
527da8b7e3SmrgEOF
537da8b7e3Smrg    exit $?
547da8b7e3Smrg    ;;
557da8b7e3Smrg  -v | --v*)
567da8b7e3Smrg    echo "depcomp $scriptversion"
577da8b7e3Smrg    exit $?
587da8b7e3Smrg    ;;
597da8b7e3Smrgesac
607da8b7e3Smrg
617da8b7e3Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
627da8b7e3Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
637da8b7e3Smrg  exit 1
647da8b7e3Smrgfi
657da8b7e3Smrg
667da8b7e3Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
677da8b7e3Smrgdepfile=${depfile-`echo "$object" |
687da8b7e3Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
697da8b7e3Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
707da8b7e3Smrg
717da8b7e3Smrgrm -f "$tmpdepfile"
727da8b7e3Smrg
737da8b7e3Smrg# Some modes work just like other modes, but use different flags.  We
747da8b7e3Smrg# parameterize here, but still list the modes in the big case below,
757da8b7e3Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
767da8b7e3Smrg# here, because this file can only contain one case statement.
777da8b7e3Smrgif test "$depmode" = hp; then
787da8b7e3Smrg  # HP compiler uses -M and no extra arg.
797da8b7e3Smrg  gccflag=-M
807da8b7e3Smrg  depmode=gcc
817da8b7e3Smrgfi
827da8b7e3Smrg
837da8b7e3Smrgif test "$depmode" = dashXmstdout; then
847da8b7e3Smrg   # This is just like dashmstdout with a different argument.
857da8b7e3Smrg   dashmflag=-xM
867da8b7e3Smrg   depmode=dashmstdout
877da8b7e3Smrgfi
887da8b7e3Smrg
897da8b7e3Smrgcase "$depmode" in
907da8b7e3Smrggcc3)
917da8b7e3Smrg## gcc 3 implements dependency tracking that does exactly what
927da8b7e3Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
937da8b7e3Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
947da8b7e3Smrg  "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
957da8b7e3Smrg  stat=$?
967da8b7e3Smrg  if test $stat -eq 0; then :
977da8b7e3Smrg  else
987da8b7e3Smrg    rm -f "$tmpdepfile"
997da8b7e3Smrg    exit $stat
1007da8b7e3Smrg  fi
1017da8b7e3Smrg  mv "$tmpdepfile" "$depfile"
1027da8b7e3Smrg  ;;
1037da8b7e3Smrg
1047da8b7e3Smrggcc)
1057da8b7e3Smrg## There are various ways to get dependency output from gcc.  Here's
1067da8b7e3Smrg## why we pick this rather obscure method:
1077da8b7e3Smrg## - Don't want to use -MD because we'd like the dependencies to end
1087da8b7e3Smrg##   up in a subdir.  Having to rename by hand is ugly.
1097da8b7e3Smrg##   (We might end up doing this anyway to support other compilers.)
1107da8b7e3Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
1117da8b7e3Smrg##   -MM, not -M (despite what the docs say).
1127da8b7e3Smrg## - Using -M directly means running the compiler twice (even worse
1137da8b7e3Smrg##   than renaming).
1147da8b7e3Smrg  if test -z "$gccflag"; then
1157da8b7e3Smrg    gccflag=-MD,
1167da8b7e3Smrg  fi
1177da8b7e3Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
1187da8b7e3Smrg  stat=$?
1197da8b7e3Smrg  if test $stat -eq 0; then :
1207da8b7e3Smrg  else
1217da8b7e3Smrg    rm -f "$tmpdepfile"
1227da8b7e3Smrg    exit $stat
1237da8b7e3Smrg  fi
1247da8b7e3Smrg  rm -f "$depfile"
1257da8b7e3Smrg  echo "$object : \\" > "$depfile"
1267da8b7e3Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
1277da8b7e3Smrg## The second -e expression handles DOS-style file names with drive letters.
1287da8b7e3Smrg  sed -e 's/^[^:]*: / /' \
1297da8b7e3Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
1307da8b7e3Smrg## This next piece of magic avoids the `deleted header file' problem.
1317da8b7e3Smrg## The problem is that when a header file which appears in a .P file
1327da8b7e3Smrg## is deleted, the dependency causes make to die (because there is
1337da8b7e3Smrg## typically no way to rebuild the header).  We avoid this by adding
1347da8b7e3Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
1357da8b7e3Smrg## this for us directly.
1367da8b7e3Smrg  tr ' ' '
1377da8b7e3Smrg' < "$tmpdepfile" |
1387da8b7e3Smrg## Some versions of gcc put a space before the `:'.  On the theory
1397da8b7e3Smrg## that the space means something, we add a space to the output as
1407da8b7e3Smrg## well.
1417da8b7e3Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
1427da8b7e3Smrg## correctly.  Breaking it into two sed invocations is a workaround.
1437da8b7e3Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
1447da8b7e3Smrg  rm -f "$tmpdepfile"
1457da8b7e3Smrg  ;;
1467da8b7e3Smrg
1477da8b7e3Smrghp)
1487da8b7e3Smrg  # This case exists only to let depend.m4 do its work.  It works by
1497da8b7e3Smrg  # looking at the text of this script.  This case will never be run,
1507da8b7e3Smrg  # since it is checked for above.
1517da8b7e3Smrg  exit 1
1527da8b7e3Smrg  ;;
1537da8b7e3Smrg
1547da8b7e3Smrgsgi)
1557da8b7e3Smrg  if test "$libtool" = yes; then
1567da8b7e3Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
1577da8b7e3Smrg  else
1587da8b7e3Smrg    "$@" -MDupdate "$tmpdepfile"
1597da8b7e3Smrg  fi
1607da8b7e3Smrg  stat=$?
1617da8b7e3Smrg  if test $stat -eq 0; then :
1627da8b7e3Smrg  else
1637da8b7e3Smrg    rm -f "$tmpdepfile"
1647da8b7e3Smrg    exit $stat
1657da8b7e3Smrg  fi
1667da8b7e3Smrg  rm -f "$depfile"
1677da8b7e3Smrg
1687da8b7e3Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
1697da8b7e3Smrg    echo "$object : \\" > "$depfile"
1707da8b7e3Smrg
1717da8b7e3Smrg    # Clip off the initial element (the dependent).  Don't try to be
1727da8b7e3Smrg    # clever and replace this with sed code, as IRIX sed won't handle
1737da8b7e3Smrg    # lines with more than a fixed number of characters (4096 in
1747da8b7e3Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
1757da8b7e3Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
1767da8b7e3Smrg    # dependency line.
1777da8b7e3Smrg    tr ' ' '
1787da8b7e3Smrg' < "$tmpdepfile" \
1797da8b7e3Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
1807da8b7e3Smrg    tr '
1817da8b7e3Smrg' ' ' >> $depfile
1827da8b7e3Smrg    echo >> $depfile
1837da8b7e3Smrg
1847da8b7e3Smrg    # The second pass generates a dummy entry for each header file.
1857da8b7e3Smrg    tr ' ' '
1867da8b7e3Smrg' < "$tmpdepfile" \
1877da8b7e3Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
1887da8b7e3Smrg   >> $depfile
1897da8b7e3Smrg  else
1907da8b7e3Smrg    # The sourcefile does not contain any dependencies, so just
1917da8b7e3Smrg    # store a dummy comment line, to avoid errors with the Makefile
1927da8b7e3Smrg    # "include basename.Plo" scheme.
1937da8b7e3Smrg    echo "#dummy" > "$depfile"
1947da8b7e3Smrg  fi
1957da8b7e3Smrg  rm -f "$tmpdepfile"
1967da8b7e3Smrg  ;;
1977da8b7e3Smrg
1987da8b7e3Smrgaix)
1997da8b7e3Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
2007da8b7e3Smrg  # in a .u file.  In older versions, this file always lives in the
2017da8b7e3Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
2027da8b7e3Smrg  # start of each line; $object doesn't have directory information.
2037da8b7e3Smrg  # Version 6 uses the directory in both cases.
2047da8b7e3Smrg  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
2057da8b7e3Smrg  tmpdepfile="$stripped.u"
2067da8b7e3Smrg  if test "$libtool" = yes; then
2077da8b7e3Smrg    "$@" -Wc,-M
2087da8b7e3Smrg  else
2097da8b7e3Smrg    "$@" -M
2107da8b7e3Smrg  fi
2117da8b7e3Smrg  stat=$?
2127da8b7e3Smrg
2137da8b7e3Smrg  if test -f "$tmpdepfile"; then :
2147da8b7e3Smrg  else
2157da8b7e3Smrg    stripped=`echo "$stripped" | sed 's,^.*/,,'`
2167da8b7e3Smrg    tmpdepfile="$stripped.u"
2177da8b7e3Smrg  fi
2187da8b7e3Smrg
2197da8b7e3Smrg  if test $stat -eq 0; then :
2207da8b7e3Smrg  else
2217da8b7e3Smrg    rm -f "$tmpdepfile"
2227da8b7e3Smrg    exit $stat
2237da8b7e3Smrg  fi
2247da8b7e3Smrg
2257da8b7e3Smrg  if test -f "$tmpdepfile"; then
2267da8b7e3Smrg    outname="$stripped.o"
2277da8b7e3Smrg    # Each line is of the form `foo.o: dependent.h'.
2287da8b7e3Smrg    # Do two passes, one to just change these to
2297da8b7e3Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
2307da8b7e3Smrg    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
2317da8b7e3Smrg    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
2327da8b7e3Smrg  else
2337da8b7e3Smrg    # The sourcefile does not contain any dependencies, so just
2347da8b7e3Smrg    # store a dummy comment line, to avoid errors with the Makefile
2357da8b7e3Smrg    # "include basename.Plo" scheme.
2367da8b7e3Smrg    echo "#dummy" > "$depfile"
2377da8b7e3Smrg  fi
2387da8b7e3Smrg  rm -f "$tmpdepfile"
2397da8b7e3Smrg  ;;
2407da8b7e3Smrg
2417da8b7e3Smrgicc)
2427da8b7e3Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
2437da8b7e3Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
2447da8b7e3Smrg  # ICC 7.0 will fill foo.d with something like
2457da8b7e3Smrg  #    foo.o: sub/foo.c
2467da8b7e3Smrg  #    foo.o: sub/foo.h
2477da8b7e3Smrg  # which is wrong.  We want:
2487da8b7e3Smrg  #    sub/foo.o: sub/foo.c
2497da8b7e3Smrg  #    sub/foo.o: sub/foo.h
2507da8b7e3Smrg  #    sub/foo.c:
2517da8b7e3Smrg  #    sub/foo.h:
2527da8b7e3Smrg  # ICC 7.1 will output
2537da8b7e3Smrg  #    foo.o: sub/foo.c sub/foo.h
2547da8b7e3Smrg  # and will wrap long lines using \ :
2557da8b7e3Smrg  #    foo.o: sub/foo.c ... \
2567da8b7e3Smrg  #     sub/foo.h ... \
2577da8b7e3Smrg  #     ...
2587da8b7e3Smrg
2597da8b7e3Smrg  "$@" -MD -MF "$tmpdepfile"
2607da8b7e3Smrg  stat=$?
2617da8b7e3Smrg  if test $stat -eq 0; then :
2627da8b7e3Smrg  else
2637da8b7e3Smrg    rm -f "$tmpdepfile"
2647da8b7e3Smrg    exit $stat
2657da8b7e3Smrg  fi
2667da8b7e3Smrg  rm -f "$depfile"
2677da8b7e3Smrg  # Each line is of the form `foo.o: dependent.h',
2687da8b7e3Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
2697da8b7e3Smrg  # Do two passes, one to just change these to
2707da8b7e3Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
2717da8b7e3Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
2727da8b7e3Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
2737da8b7e3Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
2747da8b7e3Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
2757da8b7e3Smrg    sed -e 's/$/ :/' >> "$depfile"
2767da8b7e3Smrg  rm -f "$tmpdepfile"
2777da8b7e3Smrg  ;;
2787da8b7e3Smrg
2797da8b7e3Smrgtru64)
2807da8b7e3Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
2817da8b7e3Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
2827da8b7e3Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
2837da8b7e3Smrg   # dependencies in `foo.d' instead, so we check for that too.
2847da8b7e3Smrg   # Subdirectories are respected.
2857da8b7e3Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
2867da8b7e3Smrg   test "x$dir" = "x$object" && dir=
2877da8b7e3Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
2887da8b7e3Smrg
2897da8b7e3Smrg   if test "$libtool" = yes; then
2907da8b7e3Smrg      # With Tru64 cc, shared objects can also be used to make a
2917da8b7e3Smrg      # static library.  This mecanism is used in libtool 1.4 series to
2927da8b7e3Smrg      # handle both shared and static libraries in a single compilation.
2937da8b7e3Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
2947da8b7e3Smrg      #
2957da8b7e3Smrg      # With libtool 1.5 this exception was removed, and libtool now
2967da8b7e3Smrg      # generates 2 separate objects for the 2 libraries.  These two
2977da8b7e3Smrg      # compilations output dependencies in in $dir.libs/$base.o.d and
2987da8b7e3Smrg      # in $dir$base.o.d.  We have to check for both files, because
2997da8b7e3Smrg      # one of the two compilations can be disabled.  We should prefer
3007da8b7e3Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
3017da8b7e3Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
3027da8b7e3Smrg      # the former would cause a distcleancheck panic.
3037da8b7e3Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
3047da8b7e3Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
3057da8b7e3Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
3067da8b7e3Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
3077da8b7e3Smrg      "$@" -Wc,-MD
3087da8b7e3Smrg   else
3097da8b7e3Smrg      tmpdepfile1=$dir$base.o.d
3107da8b7e3Smrg      tmpdepfile2=$dir$base.d
3117da8b7e3Smrg      tmpdepfile3=$dir$base.d
3127da8b7e3Smrg      tmpdepfile4=$dir$base.d
3137da8b7e3Smrg      "$@" -MD
3147da8b7e3Smrg   fi
3157da8b7e3Smrg
3167da8b7e3Smrg   stat=$?
3177da8b7e3Smrg   if test $stat -eq 0; then :
3187da8b7e3Smrg   else
3197da8b7e3Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3207da8b7e3Smrg      exit $stat
3217da8b7e3Smrg   fi
3227da8b7e3Smrg
3237da8b7e3Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3247da8b7e3Smrg   do
3257da8b7e3Smrg     test -f "$tmpdepfile" && break
3267da8b7e3Smrg   done
3277da8b7e3Smrg   if test -f "$tmpdepfile"; then
3287da8b7e3Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
3297da8b7e3Smrg      # That's a tab and a space in the [].
3307da8b7e3Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
3317da8b7e3Smrg   else
3327da8b7e3Smrg      echo "#dummy" > "$depfile"
3337da8b7e3Smrg   fi
3347da8b7e3Smrg   rm -f "$tmpdepfile"
3357da8b7e3Smrg   ;;
3367da8b7e3Smrg
3377da8b7e3Smrg#nosideeffect)
3387da8b7e3Smrg  # This comment above is used by automake to tell side-effect
3397da8b7e3Smrg  # dependency tracking mechanisms from slower ones.
3407da8b7e3Smrg
3417da8b7e3Smrgdashmstdout)
3427da8b7e3Smrg  # Important note: in order to support this mode, a compiler *must*
3437da8b7e3Smrg  # always write the preprocessed file to stdout, regardless of -o.
3447da8b7e3Smrg  "$@" || exit $?
3457da8b7e3Smrg
3467da8b7e3Smrg  # Remove the call to Libtool.
3477da8b7e3Smrg  if test "$libtool" = yes; then
3487da8b7e3Smrg    while test $1 != '--mode=compile'; do
3497da8b7e3Smrg      shift
3507da8b7e3Smrg    done
3517da8b7e3Smrg    shift
3527da8b7e3Smrg  fi
3537da8b7e3Smrg
3547da8b7e3Smrg  # Remove `-o $object'.
3557da8b7e3Smrg  IFS=" "
3567da8b7e3Smrg  for arg
3577da8b7e3Smrg  do
3587da8b7e3Smrg    case $arg in
3597da8b7e3Smrg    -o)
3607da8b7e3Smrg      shift
3617da8b7e3Smrg      ;;
3627da8b7e3Smrg    $object)
3637da8b7e3Smrg      shift
3647da8b7e3Smrg      ;;
3657da8b7e3Smrg    *)
3667da8b7e3Smrg      set fnord "$@" "$arg"
3677da8b7e3Smrg      shift # fnord
3687da8b7e3Smrg      shift # $arg
3697da8b7e3Smrg      ;;
3707da8b7e3Smrg    esac
3717da8b7e3Smrg  done
3727da8b7e3Smrg
3737da8b7e3Smrg  test -z "$dashmflag" && dashmflag=-M
3747da8b7e3Smrg  # Require at least two characters before searching for `:'
3757da8b7e3Smrg  # in the target name.  This is to cope with DOS-style filenames:
3767da8b7e3Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
3777da8b7e3Smrg  "$@" $dashmflag |
3787da8b7e3Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
3797da8b7e3Smrg  rm -f "$depfile"
3807da8b7e3Smrg  cat < "$tmpdepfile" > "$depfile"
3817da8b7e3Smrg  tr ' ' '
3827da8b7e3Smrg' < "$tmpdepfile" | \
3837da8b7e3Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
3847da8b7e3Smrg## correctly.  Breaking it into two sed invocations is a workaround.
3857da8b7e3Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
3867da8b7e3Smrg  rm -f "$tmpdepfile"
3877da8b7e3Smrg  ;;
3887da8b7e3Smrg
3897da8b7e3SmrgdashXmstdout)
3907da8b7e3Smrg  # This case only exists to satisfy depend.m4.  It is never actually
3917da8b7e3Smrg  # run, as this mode is specially recognized in the preamble.
3927da8b7e3Smrg  exit 1
3937da8b7e3Smrg  ;;
3947da8b7e3Smrg
3957da8b7e3Smrgmakedepend)
3967da8b7e3Smrg  "$@" || exit $?
3977da8b7e3Smrg  # Remove any Libtool call
3987da8b7e3Smrg  if test "$libtool" = yes; then
3997da8b7e3Smrg    while test $1 != '--mode=compile'; do
4007da8b7e3Smrg      shift
4017da8b7e3Smrg    done
4027da8b7e3Smrg    shift
4037da8b7e3Smrg  fi
4047da8b7e3Smrg  # X makedepend
4057da8b7e3Smrg  shift
4067da8b7e3Smrg  cleared=no
4077da8b7e3Smrg  for arg in "$@"; do
4087da8b7e3Smrg    case $cleared in
4097da8b7e3Smrg    no)
4107da8b7e3Smrg      set ""; shift
4117da8b7e3Smrg      cleared=yes ;;
4127da8b7e3Smrg    esac
4137da8b7e3Smrg    case "$arg" in
4147da8b7e3Smrg    -D*|-I*)
4157da8b7e3Smrg      set fnord "$@" "$arg"; shift ;;
4167da8b7e3Smrg    # Strip any option that makedepend may not understand.  Remove
4177da8b7e3Smrg    # the object too, otherwise makedepend will parse it as a source file.
4187da8b7e3Smrg    -*|$object)
4197da8b7e3Smrg      ;;
4207da8b7e3Smrg    *)
4217da8b7e3Smrg      set fnord "$@" "$arg"; shift ;;
4227da8b7e3Smrg    esac
4237da8b7e3Smrg  done
4247da8b7e3Smrg  obj_suffix="`echo $object | sed 's/^.*\././'`"
4257da8b7e3Smrg  touch "$tmpdepfile"
4267da8b7e3Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
4277da8b7e3Smrg  rm -f "$depfile"
4287da8b7e3Smrg  cat < "$tmpdepfile" > "$depfile"
4297da8b7e3Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
4307da8b7e3Smrg' | \
4317da8b7e3Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
4327da8b7e3Smrg## correctly.  Breaking it into two sed invocations is a workaround.
4337da8b7e3Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
4347da8b7e3Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
4357da8b7e3Smrg  ;;
4367da8b7e3Smrg
4377da8b7e3Smrgcpp)
4387da8b7e3Smrg  # Important note: in order to support this mode, a compiler *must*
4397da8b7e3Smrg  # always write the preprocessed file to stdout.
4407da8b7e3Smrg  "$@" || exit $?
4417da8b7e3Smrg
4427da8b7e3Smrg  # Remove the call to Libtool.
4437da8b7e3Smrg  if test "$libtool" = yes; then
4447da8b7e3Smrg    while test $1 != '--mode=compile'; do
4457da8b7e3Smrg      shift
4467da8b7e3Smrg    done
4477da8b7e3Smrg    shift
4487da8b7e3Smrg  fi
4497da8b7e3Smrg
4507da8b7e3Smrg  # Remove `-o $object'.
4517da8b7e3Smrg  IFS=" "
4527da8b7e3Smrg  for arg
4537da8b7e3Smrg  do
4547da8b7e3Smrg    case $arg in
4557da8b7e3Smrg    -o)
4567da8b7e3Smrg      shift
4577da8b7e3Smrg      ;;
4587da8b7e3Smrg    $object)
4597da8b7e3Smrg      shift
4607da8b7e3Smrg      ;;
4617da8b7e3Smrg    *)
4627da8b7e3Smrg      set fnord "$@" "$arg"
4637da8b7e3Smrg      shift # fnord
4647da8b7e3Smrg      shift # $arg
4657da8b7e3Smrg      ;;
4667da8b7e3Smrg    esac
4677da8b7e3Smrg  done
4687da8b7e3Smrg
4697da8b7e3Smrg  "$@" -E |
4707da8b7e3Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
4717da8b7e3Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
4727da8b7e3Smrg    sed '$ s: \\$::' > "$tmpdepfile"
4737da8b7e3Smrg  rm -f "$depfile"
4747da8b7e3Smrg  echo "$object : \\" > "$depfile"
4757da8b7e3Smrg  cat < "$tmpdepfile" >> "$depfile"
4767da8b7e3Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
4777da8b7e3Smrg  rm -f "$tmpdepfile"
4787da8b7e3Smrg  ;;
4797da8b7e3Smrg
4807da8b7e3Smrgmsvisualcpp)
4817da8b7e3Smrg  # Important note: in order to support this mode, a compiler *must*
4827da8b7e3Smrg  # always write the preprocessed file to stdout, regardless of -o,
4837da8b7e3Smrg  # because we must use -o when running libtool.
4847da8b7e3Smrg  "$@" || exit $?
4857da8b7e3Smrg  IFS=" "
4867da8b7e3Smrg  for arg
4877da8b7e3Smrg  do
4887da8b7e3Smrg    case "$arg" in
4897da8b7e3Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
4907da8b7e3Smrg	set fnord "$@"
4917da8b7e3Smrg	shift
4927da8b7e3Smrg	shift
4937da8b7e3Smrg	;;
4947da8b7e3Smrg    *)
4957da8b7e3Smrg	set fnord "$@" "$arg"
4967da8b7e3Smrg	shift
4977da8b7e3Smrg	shift
4987da8b7e3Smrg	;;
4997da8b7e3Smrg    esac
5007da8b7e3Smrg  done
5017da8b7e3Smrg  "$@" -E |
5027da8b7e3Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
5037da8b7e3Smrg  rm -f "$depfile"
5047da8b7e3Smrg  echo "$object : \\" > "$depfile"
5057da8b7e3Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
5067da8b7e3Smrg  echo "	" >> "$depfile"
5077da8b7e3Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
5087da8b7e3Smrg  rm -f "$tmpdepfile"
5097da8b7e3Smrg  ;;
5107da8b7e3Smrg
5117da8b7e3Smrgnone)
5127da8b7e3Smrg  exec "$@"
5137da8b7e3Smrg  ;;
5147da8b7e3Smrg
5157da8b7e3Smrg*)
5167da8b7e3Smrg  echo "Unknown depmode $depmode" 1>&2
5177da8b7e3Smrg  exit 1
5187da8b7e3Smrg  ;;
5197da8b7e3Smrgesac
5207da8b7e3Smrg
5217da8b7e3Smrgexit 0
5227da8b7e3Smrg
5237da8b7e3Smrg# Local Variables:
5247da8b7e3Smrg# mode: shell-script
5257da8b7e3Smrg# sh-indentation: 2
5267da8b7e3Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
5277da8b7e3Smrg# time-stamp-start: "scriptversion="
5287da8b7e3Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
5297da8b7e3Smrg# time-stamp-end: "$"
5307da8b7e3Smrg# End:
531