depcomp revision 6ea72052
16ea72052Smrg#! /bin/sh
26ea72052Smrg
36ea72052Smrg# depcomp - compile a program generating dependencies as side-effects
46ea72052Smrg# Copyright 1999, 2000, 2003 Free Software Foundation, Inc.
56ea72052Smrg
66ea72052Smrg# This program is free software; you can redistribute it and/or modify
76ea72052Smrg# it under the terms of the GNU General Public License as published by
86ea72052Smrg# the Free Software Foundation; either version 2, or (at your option)
96ea72052Smrg# any later version.
106ea72052Smrg
116ea72052Smrg# This program is distributed in the hope that it will be useful,
126ea72052Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
136ea72052Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
146ea72052Smrg# GNU General Public License for more details.
156ea72052Smrg
166ea72052Smrg# You should have received a copy of the GNU General Public License
176ea72052Smrg# along with this program; if not, write to the Free Software
186ea72052Smrg# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
196ea72052Smrg# 02111-1307, USA.
206ea72052Smrg
216ea72052Smrg# As a special exception to the GNU General Public License, if you
226ea72052Smrg# distribute this file as part of a program that contains a
236ea72052Smrg# configuration script generated by Autoconf, you may include it under
246ea72052Smrg# the same distribution terms that you use for the rest of that program.
256ea72052Smrg
266ea72052Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
276ea72052Smrg
286ea72052Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
296ea72052Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
306ea72052Smrg  exit 1
316ea72052Smrgfi
326ea72052Smrg# `libtool' can also be set to `yes' or `no'.
336ea72052Smrg
346ea72052Smrgif test -z "$depfile"; then
356ea72052Smrg   base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'`
366ea72052Smrg   dir=`echo "$object" | sed 's,/.*$,/,'`
376ea72052Smrg   if test "$dir" = "$object"; then
386ea72052Smrg      dir=
396ea72052Smrg   fi
406ea72052Smrg   # FIXME: should be _deps on DOS.
416ea72052Smrg   depfile="$dir.deps/$base"
426ea72052Smrgfi
436ea72052Smrg
446ea72052Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
456ea72052Smrg
466ea72052Smrgrm -f "$tmpdepfile"
476ea72052Smrg
486ea72052Smrg# Some modes work just like other modes, but use different flags.  We
496ea72052Smrg# parameterize here, but still list the modes in the big case below,
506ea72052Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
516ea72052Smrg# here, because this file can only contain one case statement.
526ea72052Smrgif test "$depmode" = hp; then
536ea72052Smrg  # HP compiler uses -M and no extra arg.
546ea72052Smrg  gccflag=-M
556ea72052Smrg  depmode=gcc
566ea72052Smrgfi
576ea72052Smrg
586ea72052Smrgif test "$depmode" = dashXmstdout; then
596ea72052Smrg   # This is just like dashmstdout with a different argument.
606ea72052Smrg   dashmflag=-xM
616ea72052Smrg   depmode=dashmstdout
626ea72052Smrgfi
636ea72052Smrg
646ea72052Smrgcase "$depmode" in
656ea72052Smrggcc3)
666ea72052Smrg## gcc 3 implements dependency tracking that does exactly what
676ea72052Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
686ea72052Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
696ea72052Smrg  "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
706ea72052Smrg  stat=$?
716ea72052Smrg  if test $stat -eq 0; then :
726ea72052Smrg  else
736ea72052Smrg    rm -f "$tmpdepfile"
746ea72052Smrg    exit $stat
756ea72052Smrg  fi
766ea72052Smrg  mv "$tmpdepfile" "$depfile"
776ea72052Smrg  ;;
786ea72052Smrg
796ea72052Smrggcc)
806ea72052Smrg## There are various ways to get dependency output from gcc.  Here's
816ea72052Smrg## why we pick this rather obscure method:
826ea72052Smrg## - Don't want to use -MD because we'd like the dependencies to end
836ea72052Smrg##   up in a subdir.  Having to rename by hand is ugly.
846ea72052Smrg##   (We might end up doing this anyway to support other compilers.)
856ea72052Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
866ea72052Smrg##   -MM, not -M (despite what the docs say).
876ea72052Smrg## - Using -M directly means running the compiler twice (even worse
886ea72052Smrg##   than renaming).
896ea72052Smrg  if test -z "$gccflag"; then
906ea72052Smrg    gccflag=-MD,
916ea72052Smrg  fi
926ea72052Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
936ea72052Smrg  stat=$?
946ea72052Smrg  if test $stat -eq 0; then :
956ea72052Smrg  else
966ea72052Smrg    rm -f "$tmpdepfile"
976ea72052Smrg    exit $stat
986ea72052Smrg  fi
996ea72052Smrg  rm -f "$depfile"
1006ea72052Smrg  echo "$object : \\" > "$depfile"
1016ea72052Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
1026ea72052Smrg## The second -e expression handles DOS-style file names with drive letters.
1036ea72052Smrg  sed -e 's/^[^:]*: / /' \
1046ea72052Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
1056ea72052Smrg## This next piece of magic avoids the `deleted header file' problem.
1066ea72052Smrg## The problem is that when a header file which appears in a .P file
1076ea72052Smrg## is deleted, the dependency causes make to die (because there is
1086ea72052Smrg## typically no way to rebuild the header).  We avoid this by adding
1096ea72052Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
1106ea72052Smrg## this for us directly.
1116ea72052Smrg  tr ' ' '
1126ea72052Smrg' < "$tmpdepfile" |
1136ea72052Smrg## Some versions of gcc put a space before the `:'.  On the theory
1146ea72052Smrg## that the space means something, we add a space to the output as
1156ea72052Smrg## well.
1166ea72052Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
1176ea72052Smrg## correctly.  Breaking it into two sed invocations is a workaround.
1186ea72052Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
1196ea72052Smrg  rm -f "$tmpdepfile"
1206ea72052Smrg  ;;
1216ea72052Smrg
1226ea72052Smrghp)
1236ea72052Smrg  # This case exists only to let depend.m4 do its work.  It works by
1246ea72052Smrg  # looking at the text of this script.  This case will never be run,
1256ea72052Smrg  # since it is checked for above.
1266ea72052Smrg  exit 1
1276ea72052Smrg  ;;
1286ea72052Smrg
1296ea72052Smrgsgi)
1306ea72052Smrg  if test "$libtool" = yes; then
1316ea72052Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
1326ea72052Smrg  else
1336ea72052Smrg    "$@" -MDupdate "$tmpdepfile"
1346ea72052Smrg  fi
1356ea72052Smrg  stat=$?
1366ea72052Smrg  if test $stat -eq 0; then :
1376ea72052Smrg  else
1386ea72052Smrg    rm -f "$tmpdepfile"
1396ea72052Smrg    exit $stat
1406ea72052Smrg  fi
1416ea72052Smrg  rm -f "$depfile"
1426ea72052Smrg
1436ea72052Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
1446ea72052Smrg    echo "$object : \\" > "$depfile"
1456ea72052Smrg
1466ea72052Smrg    # Clip off the initial element (the dependent).  Don't try to be
1476ea72052Smrg    # clever and replace this with sed code, as IRIX sed won't handle
1486ea72052Smrg    # lines with more than a fixed number of characters (4096 in
1496ea72052Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
1506ea72052Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
1516ea72052Smrg    # dependency line.
1526ea72052Smrg    tr ' ' '
1536ea72052Smrg' < "$tmpdepfile" \
1546ea72052Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
1556ea72052Smrg    tr '
1566ea72052Smrg' ' ' >> $depfile
1576ea72052Smrg    echo >> $depfile
1586ea72052Smrg
1596ea72052Smrg    # The second pass generates a dummy entry for each header file.
1606ea72052Smrg    tr ' ' '
1616ea72052Smrg' < "$tmpdepfile" \
1626ea72052Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
1636ea72052Smrg   >> $depfile
1646ea72052Smrg  else
1656ea72052Smrg    # The sourcefile does not contain any dependencies, so just
1666ea72052Smrg    # store a dummy comment line, to avoid errors with the Makefile
1676ea72052Smrg    # "include basename.Plo" scheme.
1686ea72052Smrg    echo "#dummy" > "$depfile"
1696ea72052Smrg  fi
1706ea72052Smrg  rm -f "$tmpdepfile"
1716ea72052Smrg  ;;
1726ea72052Smrg
1736ea72052Smrgaix)
1746ea72052Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
1756ea72052Smrg  # in a .u file.  In older versions, this file always lives in the
1766ea72052Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
1776ea72052Smrg  # start of each line; $object doesn't have directory information.
1786ea72052Smrg  # Version 6 uses the directory in both cases.
1796ea72052Smrg  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
1806ea72052Smrg  tmpdepfile="$stripped.u"
1816ea72052Smrg  if test "$libtool" = yes; then
1826ea72052Smrg    "$@" -Wc,-M
1836ea72052Smrg  else
1846ea72052Smrg    "$@" -M
1856ea72052Smrg  fi
1866ea72052Smrg  stat=$?
1876ea72052Smrg
1886ea72052Smrg  if test -f "$tmpdepfile"; then :
1896ea72052Smrg  else
1906ea72052Smrg    stripped=`echo "$stripped" | sed 's,^.*/,,'`
1916ea72052Smrg    tmpdepfile="$stripped.u"
1926ea72052Smrg  fi
1936ea72052Smrg
1946ea72052Smrg  if test $stat -eq 0; then :
1956ea72052Smrg  else
1966ea72052Smrg    rm -f "$tmpdepfile"
1976ea72052Smrg    exit $stat
1986ea72052Smrg  fi
1996ea72052Smrg
2006ea72052Smrg  if test -f "$tmpdepfile"; then
2016ea72052Smrg    outname="$stripped.o"
2026ea72052Smrg    # Each line is of the form `foo.o: dependent.h'.
2036ea72052Smrg    # Do two passes, one to just change these to
2046ea72052Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
2056ea72052Smrg    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
2066ea72052Smrg    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
2076ea72052Smrg  else
2086ea72052Smrg    # The sourcefile does not contain any dependencies, so just
2096ea72052Smrg    # store a dummy comment line, to avoid errors with the Makefile
2106ea72052Smrg    # "include basename.Plo" scheme.
2116ea72052Smrg    echo "#dummy" > "$depfile"
2126ea72052Smrg  fi
2136ea72052Smrg  rm -f "$tmpdepfile"
2146ea72052Smrg  ;;
2156ea72052Smrg
2166ea72052Smrgicc)
2176ea72052Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
2186ea72052Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
2196ea72052Smrg  # ICC 7.0 will fill foo.d with something like
2206ea72052Smrg  #    foo.o: sub/foo.c
2216ea72052Smrg  #    foo.o: sub/foo.h
2226ea72052Smrg  # which is wrong.  We want:
2236ea72052Smrg  #    sub/foo.o: sub/foo.c
2246ea72052Smrg  #    sub/foo.o: sub/foo.h
2256ea72052Smrg  #    sub/foo.c:
2266ea72052Smrg  #    sub/foo.h:
2276ea72052Smrg  # ICC 7.1 will output
2286ea72052Smrg  #    foo.o: sub/foo.c sub/foo.h
2296ea72052Smrg  # and will wrap long lines using \ :
2306ea72052Smrg  #    foo.o: sub/foo.c ... \
2316ea72052Smrg  #     sub/foo.h ... \
2326ea72052Smrg  #     ...
2336ea72052Smrg
2346ea72052Smrg  "$@" -MD -MF "$tmpdepfile"
2356ea72052Smrg  stat=$?
2366ea72052Smrg  if test $stat -eq 0; then :
2376ea72052Smrg  else
2386ea72052Smrg    rm -f "$tmpdepfile"
2396ea72052Smrg    exit $stat
2406ea72052Smrg  fi
2416ea72052Smrg  rm -f "$depfile"
2426ea72052Smrg  # Each line is of the form `foo.o: dependent.h',
2436ea72052Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
2446ea72052Smrg  # Do two passes, one to just change these to
2456ea72052Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
2466ea72052Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
2476ea72052Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
2486ea72052Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
2496ea72052Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
2506ea72052Smrg    sed -e 's/$/ :/' >> "$depfile"
2516ea72052Smrg  rm -f "$tmpdepfile"
2526ea72052Smrg  ;;
2536ea72052Smrg
2546ea72052Smrgtru64)
2556ea72052Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
2566ea72052Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
2576ea72052Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
2586ea72052Smrg   # dependencies in `foo.d' instead, so we check for that too.
2596ea72052Smrg   # Subdirectories are respected.
2606ea72052Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
2616ea72052Smrg   test "x$dir" = "x$object" && dir=
2626ea72052Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
2636ea72052Smrg
2646ea72052Smrg   if test "$libtool" = yes; then
2656ea72052Smrg      tmpdepfile1="$dir.libs/$base.lo.d"
2666ea72052Smrg      tmpdepfile2="$dir.libs/$base.d"
2676ea72052Smrg      "$@" -Wc,-MD
2686ea72052Smrg   else
2696ea72052Smrg      tmpdepfile1="$dir$base.o.d"
2706ea72052Smrg      tmpdepfile2="$dir$base.d"
2716ea72052Smrg      "$@" -MD
2726ea72052Smrg   fi
2736ea72052Smrg
2746ea72052Smrg   stat=$?
2756ea72052Smrg   if test $stat -eq 0; then :
2766ea72052Smrg   else
2776ea72052Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2"
2786ea72052Smrg      exit $stat
2796ea72052Smrg   fi
2806ea72052Smrg
2816ea72052Smrg   if test -f "$tmpdepfile1"; then
2826ea72052Smrg      tmpdepfile="$tmpdepfile1"
2836ea72052Smrg   else
2846ea72052Smrg      tmpdepfile="$tmpdepfile2"
2856ea72052Smrg   fi
2866ea72052Smrg   if test -f "$tmpdepfile"; then
2876ea72052Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
2886ea72052Smrg      # That's a tab and a space in the [].
2896ea72052Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
2906ea72052Smrg   else
2916ea72052Smrg      echo "#dummy" > "$depfile"
2926ea72052Smrg   fi
2936ea72052Smrg   rm -f "$tmpdepfile"
2946ea72052Smrg   ;;
2956ea72052Smrg
2966ea72052Smrg#nosideeffect)
2976ea72052Smrg  # This comment above is used by automake to tell side-effect
2986ea72052Smrg  # dependency tracking mechanisms from slower ones.
2996ea72052Smrg
3006ea72052Smrgdashmstdout)
3016ea72052Smrg  # Important note: in order to support this mode, a compiler *must*
3026ea72052Smrg  # always write the preprocessed file to stdout, regardless of -o.
3036ea72052Smrg  "$@" || exit $?
3046ea72052Smrg
3056ea72052Smrg  # Remove the call to Libtool.
3066ea72052Smrg  if test "$libtool" = yes; then
3076ea72052Smrg    while test $1 != '--mode=compile'; do
3086ea72052Smrg      shift
3096ea72052Smrg    done
3106ea72052Smrg    shift
3116ea72052Smrg  fi
3126ea72052Smrg
3136ea72052Smrg  # Remove `-o $object'.
3146ea72052Smrg  IFS=" "
3156ea72052Smrg  for arg
3166ea72052Smrg  do
3176ea72052Smrg    case $arg in
3186ea72052Smrg    -o)
3196ea72052Smrg      shift
3206ea72052Smrg      ;;
3216ea72052Smrg    $object)
3226ea72052Smrg      shift
3236ea72052Smrg      ;;
3246ea72052Smrg    *)
3256ea72052Smrg      set fnord "$@" "$arg"
3266ea72052Smrg      shift # fnord
3276ea72052Smrg      shift # $arg
3286ea72052Smrg      ;;
3296ea72052Smrg    esac
3306ea72052Smrg  done
3316ea72052Smrg
3326ea72052Smrg  test -z "$dashmflag" && dashmflag=-M
3336ea72052Smrg  # Require at least two characters before searching for `:'
3346ea72052Smrg  # in the target name.  This is to cope with DOS-style filenames:
3356ea72052Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
3366ea72052Smrg  "$@" $dashmflag |
3376ea72052Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
3386ea72052Smrg  rm -f "$depfile"
3396ea72052Smrg  cat < "$tmpdepfile" > "$depfile"
3406ea72052Smrg  tr ' ' '
3416ea72052Smrg' < "$tmpdepfile" | \
3426ea72052Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
3436ea72052Smrg## correctly.  Breaking it into two sed invocations is a workaround.
3446ea72052Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
3456ea72052Smrg  rm -f "$tmpdepfile"
3466ea72052Smrg  ;;
3476ea72052Smrg
3486ea72052SmrgdashXmstdout)
3496ea72052Smrg  # This case only exists to satisfy depend.m4.  It is never actually
3506ea72052Smrg  # run, as this mode is specially recognized in the preamble.
3516ea72052Smrg  exit 1
3526ea72052Smrg  ;;
3536ea72052Smrg
3546ea72052Smrgmakedepend)
3556ea72052Smrg  "$@" || exit $?
3566ea72052Smrg  # Remove any Libtool call
3576ea72052Smrg  if test "$libtool" = yes; then
3586ea72052Smrg    while test $1 != '--mode=compile'; do
3596ea72052Smrg      shift
3606ea72052Smrg    done
3616ea72052Smrg    shift
3626ea72052Smrg  fi
3636ea72052Smrg  # X makedepend
3646ea72052Smrg  shift
3656ea72052Smrg  cleared=no
3666ea72052Smrg  for arg in "$@"; do
3676ea72052Smrg    case $cleared in
3686ea72052Smrg    no)
3696ea72052Smrg      set ""; shift
3706ea72052Smrg      cleared=yes ;;
3716ea72052Smrg    esac
3726ea72052Smrg    case "$arg" in
3736ea72052Smrg    -D*|-I*)
3746ea72052Smrg      set fnord "$@" "$arg"; shift ;;
3756ea72052Smrg    # Strip any option that makedepend may not understand.  Remove
3766ea72052Smrg    # the object too, otherwise makedepend will parse it as a source file.
3776ea72052Smrg    -*|$object)
3786ea72052Smrg      ;;
3796ea72052Smrg    *)
3806ea72052Smrg      set fnord "$@" "$arg"; shift ;;
3816ea72052Smrg    esac
3826ea72052Smrg  done
3836ea72052Smrg  obj_suffix="`echo $object | sed 's/^.*\././'`"
3846ea72052Smrg  touch "$tmpdepfile"
3856ea72052Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
3866ea72052Smrg  rm -f "$depfile"
3876ea72052Smrg  cat < "$tmpdepfile" > "$depfile"
3886ea72052Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
3896ea72052Smrg' | \
3906ea72052Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
3916ea72052Smrg## correctly.  Breaking it into two sed invocations is a workaround.
3926ea72052Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
3936ea72052Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
3946ea72052Smrg  ;;
3956ea72052Smrg
3966ea72052Smrgcpp)
3976ea72052Smrg  # Important note: in order to support this mode, a compiler *must*
3986ea72052Smrg  # always write the preprocessed file to stdout.
3996ea72052Smrg  "$@" || exit $?
4006ea72052Smrg
4016ea72052Smrg  # Remove the call to Libtool.
4026ea72052Smrg  if test "$libtool" = yes; then
4036ea72052Smrg    while test $1 != '--mode=compile'; do
4046ea72052Smrg      shift
4056ea72052Smrg    done
4066ea72052Smrg    shift
4076ea72052Smrg  fi
4086ea72052Smrg
4096ea72052Smrg  # Remove `-o $object'.
4106ea72052Smrg  IFS=" "
4116ea72052Smrg  for arg
4126ea72052Smrg  do
4136ea72052Smrg    case $arg in
4146ea72052Smrg    -o)
4156ea72052Smrg      shift
4166ea72052Smrg      ;;
4176ea72052Smrg    $object)
4186ea72052Smrg      shift
4196ea72052Smrg      ;;
4206ea72052Smrg    *)
4216ea72052Smrg      set fnord "$@" "$arg"
4226ea72052Smrg      shift # fnord
4236ea72052Smrg      shift # $arg
4246ea72052Smrg      ;;
4256ea72052Smrg    esac
4266ea72052Smrg  done
4276ea72052Smrg
4286ea72052Smrg  "$@" -E |
4296ea72052Smrg    sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
4306ea72052Smrg    sed '$ s: \\$::' > "$tmpdepfile"
4316ea72052Smrg  rm -f "$depfile"
4326ea72052Smrg  echo "$object : \\" > "$depfile"
4336ea72052Smrg  cat < "$tmpdepfile" >> "$depfile"
4346ea72052Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
4356ea72052Smrg  rm -f "$tmpdepfile"
4366ea72052Smrg  ;;
4376ea72052Smrg
4386ea72052Smrgmsvisualcpp)
4396ea72052Smrg  # Important note: in order to support this mode, a compiler *must*
4406ea72052Smrg  # always write the preprocessed file to stdout, regardless of -o,
4416ea72052Smrg  # because we must use -o when running libtool.
4426ea72052Smrg  "$@" || exit $?
4436ea72052Smrg  IFS=" "
4446ea72052Smrg  for arg
4456ea72052Smrg  do
4466ea72052Smrg    case "$arg" in
4476ea72052Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
4486ea72052Smrg	set fnord "$@"
4496ea72052Smrg	shift
4506ea72052Smrg	shift
4516ea72052Smrg	;;
4526ea72052Smrg    *)
4536ea72052Smrg	set fnord "$@" "$arg"
4546ea72052Smrg	shift
4556ea72052Smrg	shift
4566ea72052Smrg	;;
4576ea72052Smrg    esac
4586ea72052Smrg  done
4596ea72052Smrg  "$@" -E |
4606ea72052Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
4616ea72052Smrg  rm -f "$depfile"
4626ea72052Smrg  echo "$object : \\" > "$depfile"
4636ea72052Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
4646ea72052Smrg  echo "	" >> "$depfile"
4656ea72052Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
4666ea72052Smrg  rm -f "$tmpdepfile"
4676ea72052Smrg  ;;
4686ea72052Smrg
4696ea72052Smrgnone)
4706ea72052Smrg  exec "$@"
4716ea72052Smrg  ;;
4726ea72052Smrg
4736ea72052Smrg*)
4746ea72052Smrg  echo "Unknown depmode $depmode" 1>&2
4756ea72052Smrg  exit 1
4766ea72052Smrg  ;;
4776ea72052Smrgesac
4786ea72052Smrg
4796ea72052Smrgexit 0
480