depcomp revision 4963b7b6
14963b7b6Smrg#! /bin/sh
24963b7b6Smrg
34963b7b6Smrg# depcomp - compile a program generating dependencies as side-effects
44963b7b6Smrg# Copyright 1999, 2000, 2003 Free Software Foundation, Inc.
54963b7b6Smrg
64963b7b6Smrg# This program is free software; you can redistribute it and/or modify
74963b7b6Smrg# it under the terms of the GNU General Public License as published by
84963b7b6Smrg# the Free Software Foundation; either version 2, or (at your option)
94963b7b6Smrg# any later version.
104963b7b6Smrg
114963b7b6Smrg# This program is distributed in the hope that it will be useful,
124963b7b6Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
134963b7b6Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
144963b7b6Smrg# GNU General Public License for more details.
154963b7b6Smrg
164963b7b6Smrg# You should have received a copy of the GNU General Public License
174963b7b6Smrg# along with this program; if not, write to the Free Software
184963b7b6Smrg# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
194963b7b6Smrg# 02111-1307, USA.
204963b7b6Smrg
214963b7b6Smrg# As a special exception to the GNU General Public License, if you
224963b7b6Smrg# distribute this file as part of a program that contains a
234963b7b6Smrg# configuration script generated by Autoconf, you may include it under
244963b7b6Smrg# the same distribution terms that you use for the rest of that program.
254963b7b6Smrg
264963b7b6Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
274963b7b6Smrg
284963b7b6Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
294963b7b6Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
304963b7b6Smrg  exit 1
314963b7b6Smrgfi
324963b7b6Smrg# `libtool' can also be set to `yes' or `no'.
334963b7b6Smrg
344963b7b6Smrgif test -z "$depfile"; then
354963b7b6Smrg   base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'`
364963b7b6Smrg   dir=`echo "$object" | sed 's,/.*$,/,'`
374963b7b6Smrg   if test "$dir" = "$object"; then
384963b7b6Smrg      dir=
394963b7b6Smrg   fi
404963b7b6Smrg   # FIXME: should be _deps on DOS.
414963b7b6Smrg   depfile="$dir.deps/$base"
424963b7b6Smrgfi
434963b7b6Smrg
444963b7b6Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
454963b7b6Smrg
464963b7b6Smrgrm -f "$tmpdepfile"
474963b7b6Smrg
484963b7b6Smrg# Some modes work just like other modes, but use different flags.  We
494963b7b6Smrg# parameterize here, but still list the modes in the big case below,
504963b7b6Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
514963b7b6Smrg# here, because this file can only contain one case statement.
524963b7b6Smrgif test "$depmode" = hp; then
534963b7b6Smrg  # HP compiler uses -M and no extra arg.
544963b7b6Smrg  gccflag=-M
554963b7b6Smrg  depmode=gcc
564963b7b6Smrgfi
574963b7b6Smrg
584963b7b6Smrgif test "$depmode" = dashXmstdout; then
594963b7b6Smrg   # This is just like dashmstdout with a different argument.
604963b7b6Smrg   dashmflag=-xM
614963b7b6Smrg   depmode=dashmstdout
624963b7b6Smrgfi
634963b7b6Smrg
644963b7b6Smrgcase "$depmode" in
654963b7b6Smrggcc3)
664963b7b6Smrg## gcc 3 implements dependency tracking that does exactly what
674963b7b6Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
684963b7b6Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
694963b7b6Smrg  "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
704963b7b6Smrg  stat=$?
714963b7b6Smrg  if test $stat -eq 0; then :
724963b7b6Smrg  else
734963b7b6Smrg    rm -f "$tmpdepfile"
744963b7b6Smrg    exit $stat
754963b7b6Smrg  fi
764963b7b6Smrg  mv "$tmpdepfile" "$depfile"
774963b7b6Smrg  ;;
784963b7b6Smrg
794963b7b6Smrggcc)
804963b7b6Smrg## There are various ways to get dependency output from gcc.  Here's
814963b7b6Smrg## why we pick this rather obscure method:
824963b7b6Smrg## - Don't want to use -MD because we'd like the dependencies to end
834963b7b6Smrg##   up in a subdir.  Having to rename by hand is ugly.
844963b7b6Smrg##   (We might end up doing this anyway to support other compilers.)
854963b7b6Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
864963b7b6Smrg##   -MM, not -M (despite what the docs say).
874963b7b6Smrg## - Using -M directly means running the compiler twice (even worse
884963b7b6Smrg##   than renaming).
894963b7b6Smrg  if test -z "$gccflag"; then
904963b7b6Smrg    gccflag=-MD,
914963b7b6Smrg  fi
924963b7b6Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
934963b7b6Smrg  stat=$?
944963b7b6Smrg  if test $stat -eq 0; then :
954963b7b6Smrg  else
964963b7b6Smrg    rm -f "$tmpdepfile"
974963b7b6Smrg    exit $stat
984963b7b6Smrg  fi
994963b7b6Smrg  rm -f "$depfile"
1004963b7b6Smrg  echo "$object : \\" > "$depfile"
1014963b7b6Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
1024963b7b6Smrg## The second -e expression handles DOS-style file names with drive letters.
1034963b7b6Smrg  sed -e 's/^[^:]*: / /' \
1044963b7b6Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
1054963b7b6Smrg## This next piece of magic avoids the `deleted header file' problem.
1064963b7b6Smrg## The problem is that when a header file which appears in a .P file
1074963b7b6Smrg## is deleted, the dependency causes make to die (because there is
1084963b7b6Smrg## typically no way to rebuild the header).  We avoid this by adding
1094963b7b6Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
1104963b7b6Smrg## this for us directly.
1114963b7b6Smrg  tr ' ' '
1124963b7b6Smrg' < "$tmpdepfile" |
1134963b7b6Smrg## Some versions of gcc put a space before the `:'.  On the theory
1144963b7b6Smrg## that the space means something, we add a space to the output as
1154963b7b6Smrg## well.
1164963b7b6Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
1174963b7b6Smrg## correctly.  Breaking it into two sed invocations is a workaround.
1184963b7b6Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
1194963b7b6Smrg  rm -f "$tmpdepfile"
1204963b7b6Smrg  ;;
1214963b7b6Smrg
1224963b7b6Smrghp)
1234963b7b6Smrg  # This case exists only to let depend.m4 do its work.  It works by
1244963b7b6Smrg  # looking at the text of this script.  This case will never be run,
1254963b7b6Smrg  # since it is checked for above.
1264963b7b6Smrg  exit 1
1274963b7b6Smrg  ;;
1284963b7b6Smrg
1294963b7b6Smrgsgi)
1304963b7b6Smrg  if test "$libtool" = yes; then
1314963b7b6Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
1324963b7b6Smrg  else
1334963b7b6Smrg    "$@" -MDupdate "$tmpdepfile"
1344963b7b6Smrg  fi
1354963b7b6Smrg  stat=$?
1364963b7b6Smrg  if test $stat -eq 0; then :
1374963b7b6Smrg  else
1384963b7b6Smrg    rm -f "$tmpdepfile"
1394963b7b6Smrg    exit $stat
1404963b7b6Smrg  fi
1414963b7b6Smrg  rm -f "$depfile"
1424963b7b6Smrg
1434963b7b6Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
1444963b7b6Smrg    echo "$object : \\" > "$depfile"
1454963b7b6Smrg
1464963b7b6Smrg    # Clip off the initial element (the dependent).  Don't try to be
1474963b7b6Smrg    # clever and replace this with sed code, as IRIX sed won't handle
1484963b7b6Smrg    # lines with more than a fixed number of characters (4096 in
1494963b7b6Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
1504963b7b6Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
1514963b7b6Smrg    # dependency line.
1524963b7b6Smrg    tr ' ' '
1534963b7b6Smrg' < "$tmpdepfile" \
1544963b7b6Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
1554963b7b6Smrg    tr '
1564963b7b6Smrg' ' ' >> $depfile
1574963b7b6Smrg    echo >> $depfile
1584963b7b6Smrg
1594963b7b6Smrg    # The second pass generates a dummy entry for each header file.
1604963b7b6Smrg    tr ' ' '
1614963b7b6Smrg' < "$tmpdepfile" \
1624963b7b6Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
1634963b7b6Smrg   >> $depfile
1644963b7b6Smrg  else
1654963b7b6Smrg    # The sourcefile does not contain any dependencies, so just
1664963b7b6Smrg    # store a dummy comment line, to avoid errors with the Makefile
1674963b7b6Smrg    # "include basename.Plo" scheme.
1684963b7b6Smrg    echo "#dummy" > "$depfile"
1694963b7b6Smrg  fi
1704963b7b6Smrg  rm -f "$tmpdepfile"
1714963b7b6Smrg  ;;
1724963b7b6Smrg
1734963b7b6Smrgaix)
1744963b7b6Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
1754963b7b6Smrg  # in a .u file.  In older versions, this file always lives in the
1764963b7b6Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
1774963b7b6Smrg  # start of each line; $object doesn't have directory information.
1784963b7b6Smrg  # Version 6 uses the directory in both cases.
1794963b7b6Smrg  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
1804963b7b6Smrg  tmpdepfile="$stripped.u"
1814963b7b6Smrg  if test "$libtool" = yes; then
1824963b7b6Smrg    "$@" -Wc,-M
1834963b7b6Smrg  else
1844963b7b6Smrg    "$@" -M
1854963b7b6Smrg  fi
1864963b7b6Smrg  stat=$?
1874963b7b6Smrg
1884963b7b6Smrg  if test -f "$tmpdepfile"; then :
1894963b7b6Smrg  else
1904963b7b6Smrg    stripped=`echo "$stripped" | sed 's,^.*/,,'`
1914963b7b6Smrg    tmpdepfile="$stripped.u"
1924963b7b6Smrg  fi
1934963b7b6Smrg
1944963b7b6Smrg  if test $stat -eq 0; then :
1954963b7b6Smrg  else
1964963b7b6Smrg    rm -f "$tmpdepfile"
1974963b7b6Smrg    exit $stat
1984963b7b6Smrg  fi
1994963b7b6Smrg
2004963b7b6Smrg  if test -f "$tmpdepfile"; then
2014963b7b6Smrg    outname="$stripped.o"
2024963b7b6Smrg    # Each line is of the form `foo.o: dependent.h'.
2034963b7b6Smrg    # Do two passes, one to just change these to
2044963b7b6Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
2054963b7b6Smrg    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
2064963b7b6Smrg    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
2074963b7b6Smrg  else
2084963b7b6Smrg    # The sourcefile does not contain any dependencies, so just
2094963b7b6Smrg    # store a dummy comment line, to avoid errors with the Makefile
2104963b7b6Smrg    # "include basename.Plo" scheme.
2114963b7b6Smrg    echo "#dummy" > "$depfile"
2124963b7b6Smrg  fi
2134963b7b6Smrg  rm -f "$tmpdepfile"
2144963b7b6Smrg  ;;
2154963b7b6Smrg
2164963b7b6Smrgicc)
2174963b7b6Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
2184963b7b6Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
2194963b7b6Smrg  # ICC 7.0 will fill foo.d with something like
2204963b7b6Smrg  #    foo.o: sub/foo.c
2214963b7b6Smrg  #    foo.o: sub/foo.h
2224963b7b6Smrg  # which is wrong.  We want:
2234963b7b6Smrg  #    sub/foo.o: sub/foo.c
2244963b7b6Smrg  #    sub/foo.o: sub/foo.h
2254963b7b6Smrg  #    sub/foo.c:
2264963b7b6Smrg  #    sub/foo.h:
2274963b7b6Smrg  # ICC 7.1 will output
2284963b7b6Smrg  #    foo.o: sub/foo.c sub/foo.h
2294963b7b6Smrg  # and will wrap long lines using \ :
2304963b7b6Smrg  #    foo.o: sub/foo.c ... \
2314963b7b6Smrg  #     sub/foo.h ... \
2324963b7b6Smrg  #     ...
2334963b7b6Smrg
2344963b7b6Smrg  "$@" -MD -MF "$tmpdepfile"
2354963b7b6Smrg  stat=$?
2364963b7b6Smrg  if test $stat -eq 0; then :
2374963b7b6Smrg  else
2384963b7b6Smrg    rm -f "$tmpdepfile"
2394963b7b6Smrg    exit $stat
2404963b7b6Smrg  fi
2414963b7b6Smrg  rm -f "$depfile"
2424963b7b6Smrg  # Each line is of the form `foo.o: dependent.h',
2434963b7b6Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
2444963b7b6Smrg  # Do two passes, one to just change these to
2454963b7b6Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
2464963b7b6Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
2474963b7b6Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
2484963b7b6Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
2494963b7b6Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
2504963b7b6Smrg    sed -e 's/$/ :/' >> "$depfile"
2514963b7b6Smrg  rm -f "$tmpdepfile"
2524963b7b6Smrg  ;;
2534963b7b6Smrg
2544963b7b6Smrgtru64)
2554963b7b6Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
2564963b7b6Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
2574963b7b6Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
2584963b7b6Smrg   # dependencies in `foo.d' instead, so we check for that too.
2594963b7b6Smrg   # Subdirectories are respected.
2604963b7b6Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
2614963b7b6Smrg   test "x$dir" = "x$object" && dir=
2624963b7b6Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
2634963b7b6Smrg
2644963b7b6Smrg   if test "$libtool" = yes; then
2654963b7b6Smrg      tmpdepfile1="$dir.libs/$base.lo.d"
2664963b7b6Smrg      tmpdepfile2="$dir.libs/$base.d"
2674963b7b6Smrg      "$@" -Wc,-MD
2684963b7b6Smrg   else
2694963b7b6Smrg      tmpdepfile1="$dir$base.o.d"
2704963b7b6Smrg      tmpdepfile2="$dir$base.d"
2714963b7b6Smrg      "$@" -MD
2724963b7b6Smrg   fi
2734963b7b6Smrg
2744963b7b6Smrg   stat=$?
2754963b7b6Smrg   if test $stat -eq 0; then :
2764963b7b6Smrg   else
2774963b7b6Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2"
2784963b7b6Smrg      exit $stat
2794963b7b6Smrg   fi
2804963b7b6Smrg
2814963b7b6Smrg   if test -f "$tmpdepfile1"; then
2824963b7b6Smrg      tmpdepfile="$tmpdepfile1"
2834963b7b6Smrg   else
2844963b7b6Smrg      tmpdepfile="$tmpdepfile2"
2854963b7b6Smrg   fi
2864963b7b6Smrg   if test -f "$tmpdepfile"; then
2874963b7b6Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
2884963b7b6Smrg      # That's a tab and a space in the [].
2894963b7b6Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
2904963b7b6Smrg   else
2914963b7b6Smrg      echo "#dummy" > "$depfile"
2924963b7b6Smrg   fi
2934963b7b6Smrg   rm -f "$tmpdepfile"
2944963b7b6Smrg   ;;
2954963b7b6Smrg
2964963b7b6Smrg#nosideeffect)
2974963b7b6Smrg  # This comment above is used by automake to tell side-effect
2984963b7b6Smrg  # dependency tracking mechanisms from slower ones.
2994963b7b6Smrg
3004963b7b6Smrgdashmstdout)
3014963b7b6Smrg  # Important note: in order to support this mode, a compiler *must*
3024963b7b6Smrg  # always write the preprocessed file to stdout, regardless of -o.
3034963b7b6Smrg  "$@" || exit $?
3044963b7b6Smrg
3054963b7b6Smrg  # Remove the call to Libtool.
3064963b7b6Smrg  if test "$libtool" = yes; then
3074963b7b6Smrg    while test $1 != '--mode=compile'; do
3084963b7b6Smrg      shift
3094963b7b6Smrg    done
3104963b7b6Smrg    shift
3114963b7b6Smrg  fi
3124963b7b6Smrg
3134963b7b6Smrg  # Remove `-o $object'.
3144963b7b6Smrg  IFS=" "
3154963b7b6Smrg  for arg
3164963b7b6Smrg  do
3174963b7b6Smrg    case $arg in
3184963b7b6Smrg    -o)
3194963b7b6Smrg      shift
3204963b7b6Smrg      ;;
3214963b7b6Smrg    $object)
3224963b7b6Smrg      shift
3234963b7b6Smrg      ;;
3244963b7b6Smrg    *)
3254963b7b6Smrg      set fnord "$@" "$arg"
3264963b7b6Smrg      shift # fnord
3274963b7b6Smrg      shift # $arg
3284963b7b6Smrg      ;;
3294963b7b6Smrg    esac
3304963b7b6Smrg  done
3314963b7b6Smrg
3324963b7b6Smrg  test -z "$dashmflag" && dashmflag=-M
3334963b7b6Smrg  # Require at least two characters before searching for `:'
3344963b7b6Smrg  # in the target name.  This is to cope with DOS-style filenames:
3354963b7b6Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
3364963b7b6Smrg  "$@" $dashmflag |
3374963b7b6Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
3384963b7b6Smrg  rm -f "$depfile"
3394963b7b6Smrg  cat < "$tmpdepfile" > "$depfile"
3404963b7b6Smrg  tr ' ' '
3414963b7b6Smrg' < "$tmpdepfile" | \
3424963b7b6Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
3434963b7b6Smrg## correctly.  Breaking it into two sed invocations is a workaround.
3444963b7b6Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
3454963b7b6Smrg  rm -f "$tmpdepfile"
3464963b7b6Smrg  ;;
3474963b7b6Smrg
3484963b7b6SmrgdashXmstdout)
3494963b7b6Smrg  # This case only exists to satisfy depend.m4.  It is never actually
3504963b7b6Smrg  # run, as this mode is specially recognized in the preamble.
3514963b7b6Smrg  exit 1
3524963b7b6Smrg  ;;
3534963b7b6Smrg
3544963b7b6Smrgmakedepend)
3554963b7b6Smrg  "$@" || exit $?
3564963b7b6Smrg  # Remove any Libtool call
3574963b7b6Smrg  if test "$libtool" = yes; then
3584963b7b6Smrg    while test $1 != '--mode=compile'; do
3594963b7b6Smrg      shift
3604963b7b6Smrg    done
3614963b7b6Smrg    shift
3624963b7b6Smrg  fi
3634963b7b6Smrg  # X makedepend
3644963b7b6Smrg  shift
3654963b7b6Smrg  cleared=no
3664963b7b6Smrg  for arg in "$@"; do
3674963b7b6Smrg    case $cleared in
3684963b7b6Smrg    no)
3694963b7b6Smrg      set ""; shift
3704963b7b6Smrg      cleared=yes ;;
3714963b7b6Smrg    esac
3724963b7b6Smrg    case "$arg" in
3734963b7b6Smrg    -D*|-I*)
3744963b7b6Smrg      set fnord "$@" "$arg"; shift ;;
3754963b7b6Smrg    # Strip any option that makedepend may not understand.  Remove
3764963b7b6Smrg    # the object too, otherwise makedepend will parse it as a source file.
3774963b7b6Smrg    -*|$object)
3784963b7b6Smrg      ;;
3794963b7b6Smrg    *)
3804963b7b6Smrg      set fnord "$@" "$arg"; shift ;;
3814963b7b6Smrg    esac
3824963b7b6Smrg  done
3834963b7b6Smrg  obj_suffix="`echo $object | sed 's/^.*\././'`"
3844963b7b6Smrg  touch "$tmpdepfile"
3854963b7b6Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
3864963b7b6Smrg  rm -f "$depfile"
3874963b7b6Smrg  cat < "$tmpdepfile" > "$depfile"
3884963b7b6Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
3894963b7b6Smrg' | \
3904963b7b6Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
3914963b7b6Smrg## correctly.  Breaking it into two sed invocations is a workaround.
3924963b7b6Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
3934963b7b6Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
3944963b7b6Smrg  ;;
3954963b7b6Smrg
3964963b7b6Smrgcpp)
3974963b7b6Smrg  # Important note: in order to support this mode, a compiler *must*
3984963b7b6Smrg  # always write the preprocessed file to stdout.
3994963b7b6Smrg  "$@" || exit $?
4004963b7b6Smrg
4014963b7b6Smrg  # Remove the call to Libtool.
4024963b7b6Smrg  if test "$libtool" = yes; then
4034963b7b6Smrg    while test $1 != '--mode=compile'; do
4044963b7b6Smrg      shift
4054963b7b6Smrg    done
4064963b7b6Smrg    shift
4074963b7b6Smrg  fi
4084963b7b6Smrg
4094963b7b6Smrg  # Remove `-o $object'.
4104963b7b6Smrg  IFS=" "
4114963b7b6Smrg  for arg
4124963b7b6Smrg  do
4134963b7b6Smrg    case $arg in
4144963b7b6Smrg    -o)
4154963b7b6Smrg      shift
4164963b7b6Smrg      ;;
4174963b7b6Smrg    $object)
4184963b7b6Smrg      shift
4194963b7b6Smrg      ;;
4204963b7b6Smrg    *)
4214963b7b6Smrg      set fnord "$@" "$arg"
4224963b7b6Smrg      shift # fnord
4234963b7b6Smrg      shift # $arg
4244963b7b6Smrg      ;;
4254963b7b6Smrg    esac
4264963b7b6Smrg  done
4274963b7b6Smrg
4284963b7b6Smrg  "$@" -E |
4294963b7b6Smrg    sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
4304963b7b6Smrg    sed '$ s: \\$::' > "$tmpdepfile"
4314963b7b6Smrg  rm -f "$depfile"
4324963b7b6Smrg  echo "$object : \\" > "$depfile"
4334963b7b6Smrg  cat < "$tmpdepfile" >> "$depfile"
4344963b7b6Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
4354963b7b6Smrg  rm -f "$tmpdepfile"
4364963b7b6Smrg  ;;
4374963b7b6Smrg
4384963b7b6Smrgmsvisualcpp)
4394963b7b6Smrg  # Important note: in order to support this mode, a compiler *must*
4404963b7b6Smrg  # always write the preprocessed file to stdout, regardless of -o,
4414963b7b6Smrg  # because we must use -o when running libtool.
4424963b7b6Smrg  "$@" || exit $?
4434963b7b6Smrg  IFS=" "
4444963b7b6Smrg  for arg
4454963b7b6Smrg  do
4464963b7b6Smrg    case "$arg" in
4474963b7b6Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
4484963b7b6Smrg	set fnord "$@"
4494963b7b6Smrg	shift
4504963b7b6Smrg	shift
4514963b7b6Smrg	;;
4524963b7b6Smrg    *)
4534963b7b6Smrg	set fnord "$@" "$arg"
4544963b7b6Smrg	shift
4554963b7b6Smrg	shift
4564963b7b6Smrg	;;
4574963b7b6Smrg    esac
4584963b7b6Smrg  done
4594963b7b6Smrg  "$@" -E |
4604963b7b6Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
4614963b7b6Smrg  rm -f "$depfile"
4624963b7b6Smrg  echo "$object : \\" > "$depfile"
4634963b7b6Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
4644963b7b6Smrg  echo "	" >> "$depfile"
4654963b7b6Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
4664963b7b6Smrg  rm -f "$tmpdepfile"
4674963b7b6Smrg  ;;
4684963b7b6Smrg
4694963b7b6Smrgnone)
4704963b7b6Smrg  exec "$@"
4714963b7b6Smrg  ;;
4724963b7b6Smrg
4734963b7b6Smrg*)
4744963b7b6Smrg  echo "Unknown depmode $depmode" 1>&2
4754963b7b6Smrg  exit 1
4764963b7b6Smrg  ;;
4774963b7b6Smrgesac
4784963b7b6Smrg
4794963b7b6Smrgexit 0
480