depcomp revision 3da084b3
13da084b3Smrg#! /bin/sh
23da084b3Smrg# depcomp - compile a program generating dependencies as side-effects
33da084b3Smrg
43da084b3Smrgscriptversion=2005-07-09.11
53da084b3Smrg
63da084b3Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
73da084b3Smrg
83da084b3Smrg# This program is free software; you can redistribute it and/or modify
93da084b3Smrg# it under the terms of the GNU General Public License as published by
103da084b3Smrg# the Free Software Foundation; either version 2, or (at your option)
113da084b3Smrg# any later version.
123da084b3Smrg
133da084b3Smrg# This program is distributed in the hope that it will be useful,
143da084b3Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
153da084b3Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
163da084b3Smrg# GNU General Public License for more details.
173da084b3Smrg
183da084b3Smrg# You should have received a copy of the GNU General Public License
193da084b3Smrg# along with this program; if not, write to the Free Software
203da084b3Smrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
213da084b3Smrg# 02110-1301, USA.
223da084b3Smrg
233da084b3Smrg# As a special exception to the GNU General Public License, if you
243da084b3Smrg# distribute this file as part of a program that contains a
253da084b3Smrg# configuration script generated by Autoconf, you may include it under
263da084b3Smrg# the same distribution terms that you use for the rest of that program.
273da084b3Smrg
283da084b3Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
293da084b3Smrg
303da084b3Smrgcase $1 in
313da084b3Smrg  '')
323da084b3Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
333da084b3Smrg     exit 1;
343da084b3Smrg     ;;
353da084b3Smrg  -h | --h*)
363da084b3Smrg    cat <<\EOF
373da084b3SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
383da084b3Smrg
393da084b3SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
403da084b3Smrgas side-effects.
413da084b3Smrg
423da084b3SmrgEnvironment variables:
433da084b3Smrg  depmode     Dependency tracking mode.
443da084b3Smrg  source      Source file read by `PROGRAMS ARGS'.
453da084b3Smrg  object      Object file output by `PROGRAMS ARGS'.
463da084b3Smrg  DEPDIR      directory where to store dependencies.
473da084b3Smrg  depfile     Dependency file to output.
483da084b3Smrg  tmpdepfile  Temporary file to use when outputing dependencies.
493da084b3Smrg  libtool     Whether libtool is used (yes/no).
503da084b3Smrg
513da084b3SmrgReport bugs to <bug-automake@gnu.org>.
523da084b3SmrgEOF
533da084b3Smrg    exit $?
543da084b3Smrg    ;;
553da084b3Smrg  -v | --v*)
563da084b3Smrg    echo "depcomp $scriptversion"
573da084b3Smrg    exit $?
583da084b3Smrg    ;;
593da084b3Smrgesac
603da084b3Smrg
613da084b3Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
623da084b3Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
633da084b3Smrg  exit 1
643da084b3Smrgfi
653da084b3Smrg
663da084b3Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
673da084b3Smrgdepfile=${depfile-`echo "$object" |
683da084b3Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
693da084b3Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
703da084b3Smrg
713da084b3Smrgrm -f "$tmpdepfile"
723da084b3Smrg
733da084b3Smrg# Some modes work just like other modes, but use different flags.  We
743da084b3Smrg# parameterize here, but still list the modes in the big case below,
753da084b3Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
763da084b3Smrg# here, because this file can only contain one case statement.
773da084b3Smrgif test "$depmode" = hp; then
783da084b3Smrg  # HP compiler uses -M and no extra arg.
793da084b3Smrg  gccflag=-M
803da084b3Smrg  depmode=gcc
813da084b3Smrgfi
823da084b3Smrg
833da084b3Smrgif test "$depmode" = dashXmstdout; then
843da084b3Smrg   # This is just like dashmstdout with a different argument.
853da084b3Smrg   dashmflag=-xM
863da084b3Smrg   depmode=dashmstdout
873da084b3Smrgfi
883da084b3Smrg
893da084b3Smrgcase "$depmode" in
903da084b3Smrggcc3)
913da084b3Smrg## gcc 3 implements dependency tracking that does exactly what
923da084b3Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
933da084b3Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
943da084b3Smrg  "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
953da084b3Smrg  stat=$?
963da084b3Smrg  if test $stat -eq 0; then :
973da084b3Smrg  else
983da084b3Smrg    rm -f "$tmpdepfile"
993da084b3Smrg    exit $stat
1003da084b3Smrg  fi
1013da084b3Smrg  mv "$tmpdepfile" "$depfile"
1023da084b3Smrg  ;;
1033da084b3Smrg
1043da084b3Smrggcc)
1053da084b3Smrg## There are various ways to get dependency output from gcc.  Here's
1063da084b3Smrg## why we pick this rather obscure method:
1073da084b3Smrg## - Don't want to use -MD because we'd like the dependencies to end
1083da084b3Smrg##   up in a subdir.  Having to rename by hand is ugly.
1093da084b3Smrg##   (We might end up doing this anyway to support other compilers.)
1103da084b3Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
1113da084b3Smrg##   -MM, not -M (despite what the docs say).
1123da084b3Smrg## - Using -M directly means running the compiler twice (even worse
1133da084b3Smrg##   than renaming).
1143da084b3Smrg  if test -z "$gccflag"; then
1153da084b3Smrg    gccflag=-MD,
1163da084b3Smrg  fi
1173da084b3Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
1183da084b3Smrg  stat=$?
1193da084b3Smrg  if test $stat -eq 0; then :
1203da084b3Smrg  else
1213da084b3Smrg    rm -f "$tmpdepfile"
1223da084b3Smrg    exit $stat
1233da084b3Smrg  fi
1243da084b3Smrg  rm -f "$depfile"
1253da084b3Smrg  echo "$object : \\" > "$depfile"
1263da084b3Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
1273da084b3Smrg## The second -e expression handles DOS-style file names with drive letters.
1283da084b3Smrg  sed -e 's/^[^:]*: / /' \
1293da084b3Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
1303da084b3Smrg## This next piece of magic avoids the `deleted header file' problem.
1313da084b3Smrg## The problem is that when a header file which appears in a .P file
1323da084b3Smrg## is deleted, the dependency causes make to die (because there is
1333da084b3Smrg## typically no way to rebuild the header).  We avoid this by adding
1343da084b3Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
1353da084b3Smrg## this for us directly.
1363da084b3Smrg  tr ' ' '
1373da084b3Smrg' < "$tmpdepfile" |
1383da084b3Smrg## Some versions of gcc put a space before the `:'.  On the theory
1393da084b3Smrg## that the space means something, we add a space to the output as
1403da084b3Smrg## well.
1413da084b3Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
1423da084b3Smrg## correctly.  Breaking it into two sed invocations is a workaround.
1433da084b3Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
1443da084b3Smrg  rm -f "$tmpdepfile"
1453da084b3Smrg  ;;
1463da084b3Smrg
1473da084b3Smrghp)
1483da084b3Smrg  # This case exists only to let depend.m4 do its work.  It works by
1493da084b3Smrg  # looking at the text of this script.  This case will never be run,
1503da084b3Smrg  # since it is checked for above.
1513da084b3Smrg  exit 1
1523da084b3Smrg  ;;
1533da084b3Smrg
1543da084b3Smrgsgi)
1553da084b3Smrg  if test "$libtool" = yes; then
1563da084b3Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
1573da084b3Smrg  else
1583da084b3Smrg    "$@" -MDupdate "$tmpdepfile"
1593da084b3Smrg  fi
1603da084b3Smrg  stat=$?
1613da084b3Smrg  if test $stat -eq 0; then :
1623da084b3Smrg  else
1633da084b3Smrg    rm -f "$tmpdepfile"
1643da084b3Smrg    exit $stat
1653da084b3Smrg  fi
1663da084b3Smrg  rm -f "$depfile"
1673da084b3Smrg
1683da084b3Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
1693da084b3Smrg    echo "$object : \\" > "$depfile"
1703da084b3Smrg
1713da084b3Smrg    # Clip off the initial element (the dependent).  Don't try to be
1723da084b3Smrg    # clever and replace this with sed code, as IRIX sed won't handle
1733da084b3Smrg    # lines with more than a fixed number of characters (4096 in
1743da084b3Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
1753da084b3Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
1763da084b3Smrg    # dependency line.
1773da084b3Smrg    tr ' ' '
1783da084b3Smrg' < "$tmpdepfile" \
1793da084b3Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
1803da084b3Smrg    tr '
1813da084b3Smrg' ' ' >> $depfile
1823da084b3Smrg    echo >> $depfile
1833da084b3Smrg
1843da084b3Smrg    # The second pass generates a dummy entry for each header file.
1853da084b3Smrg    tr ' ' '
1863da084b3Smrg' < "$tmpdepfile" \
1873da084b3Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
1883da084b3Smrg   >> $depfile
1893da084b3Smrg  else
1903da084b3Smrg    # The sourcefile does not contain any dependencies, so just
1913da084b3Smrg    # store a dummy comment line, to avoid errors with the Makefile
1923da084b3Smrg    # "include basename.Plo" scheme.
1933da084b3Smrg    echo "#dummy" > "$depfile"
1943da084b3Smrg  fi
1953da084b3Smrg  rm -f "$tmpdepfile"
1963da084b3Smrg  ;;
1973da084b3Smrg
1983da084b3Smrgaix)
1993da084b3Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
2003da084b3Smrg  # in a .u file.  In older versions, this file always lives in the
2013da084b3Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
2023da084b3Smrg  # start of each line; $object doesn't have directory information.
2033da084b3Smrg  # Version 6 uses the directory in both cases.
2043da084b3Smrg  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
2053da084b3Smrg  tmpdepfile="$stripped.u"
2063da084b3Smrg  if test "$libtool" = yes; then
2073da084b3Smrg    "$@" -Wc,-M
2083da084b3Smrg  else
2093da084b3Smrg    "$@" -M
2103da084b3Smrg  fi
2113da084b3Smrg  stat=$?
2123da084b3Smrg
2133da084b3Smrg  if test -f "$tmpdepfile"; then :
2143da084b3Smrg  else
2153da084b3Smrg    stripped=`echo "$stripped" | sed 's,^.*/,,'`
2163da084b3Smrg    tmpdepfile="$stripped.u"
2173da084b3Smrg  fi
2183da084b3Smrg
2193da084b3Smrg  if test $stat -eq 0; then :
2203da084b3Smrg  else
2213da084b3Smrg    rm -f "$tmpdepfile"
2223da084b3Smrg    exit $stat
2233da084b3Smrg  fi
2243da084b3Smrg
2253da084b3Smrg  if test -f "$tmpdepfile"; then
2263da084b3Smrg    outname="$stripped.o"
2273da084b3Smrg    # Each line is of the form `foo.o: dependent.h'.
2283da084b3Smrg    # Do two passes, one to just change these to
2293da084b3Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
2303da084b3Smrg    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
2313da084b3Smrg    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
2323da084b3Smrg  else
2333da084b3Smrg    # The sourcefile does not contain any dependencies, so just
2343da084b3Smrg    # store a dummy comment line, to avoid errors with the Makefile
2353da084b3Smrg    # "include basename.Plo" scheme.
2363da084b3Smrg    echo "#dummy" > "$depfile"
2373da084b3Smrg  fi
2383da084b3Smrg  rm -f "$tmpdepfile"
2393da084b3Smrg  ;;
2403da084b3Smrg
2413da084b3Smrgicc)
2423da084b3Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
2433da084b3Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
2443da084b3Smrg  # ICC 7.0 will fill foo.d with something like
2453da084b3Smrg  #    foo.o: sub/foo.c
2463da084b3Smrg  #    foo.o: sub/foo.h
2473da084b3Smrg  # which is wrong.  We want:
2483da084b3Smrg  #    sub/foo.o: sub/foo.c
2493da084b3Smrg  #    sub/foo.o: sub/foo.h
2503da084b3Smrg  #    sub/foo.c:
2513da084b3Smrg  #    sub/foo.h:
2523da084b3Smrg  # ICC 7.1 will output
2533da084b3Smrg  #    foo.o: sub/foo.c sub/foo.h
2543da084b3Smrg  # and will wrap long lines using \ :
2553da084b3Smrg  #    foo.o: sub/foo.c ... \
2563da084b3Smrg  #     sub/foo.h ... \
2573da084b3Smrg  #     ...
2583da084b3Smrg
2593da084b3Smrg  "$@" -MD -MF "$tmpdepfile"
2603da084b3Smrg  stat=$?
2613da084b3Smrg  if test $stat -eq 0; then :
2623da084b3Smrg  else
2633da084b3Smrg    rm -f "$tmpdepfile"
2643da084b3Smrg    exit $stat
2653da084b3Smrg  fi
2663da084b3Smrg  rm -f "$depfile"
2673da084b3Smrg  # Each line is of the form `foo.o: dependent.h',
2683da084b3Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
2693da084b3Smrg  # Do two passes, one to just change these to
2703da084b3Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
2713da084b3Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
2723da084b3Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
2733da084b3Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
2743da084b3Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
2753da084b3Smrg    sed -e 's/$/ :/' >> "$depfile"
2763da084b3Smrg  rm -f "$tmpdepfile"
2773da084b3Smrg  ;;
2783da084b3Smrg
2793da084b3Smrgtru64)
2803da084b3Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
2813da084b3Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
2823da084b3Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
2833da084b3Smrg   # dependencies in `foo.d' instead, so we check for that too.
2843da084b3Smrg   # Subdirectories are respected.
2853da084b3Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
2863da084b3Smrg   test "x$dir" = "x$object" && dir=
2873da084b3Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
2883da084b3Smrg
2893da084b3Smrg   if test "$libtool" = yes; then
2903da084b3Smrg      # With Tru64 cc, shared objects can also be used to make a
2913da084b3Smrg      # static library.  This mecanism is used in libtool 1.4 series to
2923da084b3Smrg      # handle both shared and static libraries in a single compilation.
2933da084b3Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
2943da084b3Smrg      #
2953da084b3Smrg      # With libtool 1.5 this exception was removed, and libtool now
2963da084b3Smrg      # generates 2 separate objects for the 2 libraries.  These two
2973da084b3Smrg      # compilations output dependencies in in $dir.libs/$base.o.d and
2983da084b3Smrg      # in $dir$base.o.d.  We have to check for both files, because
2993da084b3Smrg      # one of the two compilations can be disabled.  We should prefer
3003da084b3Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
3013da084b3Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
3023da084b3Smrg      # the former would cause a distcleancheck panic.
3033da084b3Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
3043da084b3Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
3053da084b3Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
3063da084b3Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
3073da084b3Smrg      "$@" -Wc,-MD
3083da084b3Smrg   else
3093da084b3Smrg      tmpdepfile1=$dir$base.o.d
3103da084b3Smrg      tmpdepfile2=$dir$base.d
3113da084b3Smrg      tmpdepfile3=$dir$base.d
3123da084b3Smrg      tmpdepfile4=$dir$base.d
3133da084b3Smrg      "$@" -MD
3143da084b3Smrg   fi
3153da084b3Smrg
3163da084b3Smrg   stat=$?
3173da084b3Smrg   if test $stat -eq 0; then :
3183da084b3Smrg   else
3193da084b3Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3203da084b3Smrg      exit $stat
3213da084b3Smrg   fi
3223da084b3Smrg
3233da084b3Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3243da084b3Smrg   do
3253da084b3Smrg     test -f "$tmpdepfile" && break
3263da084b3Smrg   done
3273da084b3Smrg   if test -f "$tmpdepfile"; then
3283da084b3Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
3293da084b3Smrg      # That's a tab and a space in the [].
3303da084b3Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
3313da084b3Smrg   else
3323da084b3Smrg      echo "#dummy" > "$depfile"
3333da084b3Smrg   fi
3343da084b3Smrg   rm -f "$tmpdepfile"
3353da084b3Smrg   ;;
3363da084b3Smrg
3373da084b3Smrg#nosideeffect)
3383da084b3Smrg  # This comment above is used by automake to tell side-effect
3393da084b3Smrg  # dependency tracking mechanisms from slower ones.
3403da084b3Smrg
3413da084b3Smrgdashmstdout)
3423da084b3Smrg  # Important note: in order to support this mode, a compiler *must*
3433da084b3Smrg  # always write the preprocessed file to stdout, regardless of -o.
3443da084b3Smrg  "$@" || exit $?
3453da084b3Smrg
3463da084b3Smrg  # Remove the call to Libtool.
3473da084b3Smrg  if test "$libtool" = yes; then
3483da084b3Smrg    while test $1 != '--mode=compile'; do
3493da084b3Smrg      shift
3503da084b3Smrg    done
3513da084b3Smrg    shift
3523da084b3Smrg  fi
3533da084b3Smrg
3543da084b3Smrg  # Remove `-o $object'.
3553da084b3Smrg  IFS=" "
3563da084b3Smrg  for arg
3573da084b3Smrg  do
3583da084b3Smrg    case $arg in
3593da084b3Smrg    -o)
3603da084b3Smrg      shift
3613da084b3Smrg      ;;
3623da084b3Smrg    $object)
3633da084b3Smrg      shift
3643da084b3Smrg      ;;
3653da084b3Smrg    *)
3663da084b3Smrg      set fnord "$@" "$arg"
3673da084b3Smrg      shift # fnord
3683da084b3Smrg      shift # $arg
3693da084b3Smrg      ;;
3703da084b3Smrg    esac
3713da084b3Smrg  done
3723da084b3Smrg
3733da084b3Smrg  test -z "$dashmflag" && dashmflag=-M
3743da084b3Smrg  # Require at least two characters before searching for `:'
3753da084b3Smrg  # in the target name.  This is to cope with DOS-style filenames:
3763da084b3Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
3773da084b3Smrg  "$@" $dashmflag |
3783da084b3Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
3793da084b3Smrg  rm -f "$depfile"
3803da084b3Smrg  cat < "$tmpdepfile" > "$depfile"
3813da084b3Smrg  tr ' ' '
3823da084b3Smrg' < "$tmpdepfile" | \
3833da084b3Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
3843da084b3Smrg## correctly.  Breaking it into two sed invocations is a workaround.
3853da084b3Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
3863da084b3Smrg  rm -f "$tmpdepfile"
3873da084b3Smrg  ;;
3883da084b3Smrg
3893da084b3SmrgdashXmstdout)
3903da084b3Smrg  # This case only exists to satisfy depend.m4.  It is never actually
3913da084b3Smrg  # run, as this mode is specially recognized in the preamble.
3923da084b3Smrg  exit 1
3933da084b3Smrg  ;;
3943da084b3Smrg
3953da084b3Smrgmakedepend)
3963da084b3Smrg  "$@" || exit $?
3973da084b3Smrg  # Remove any Libtool call
3983da084b3Smrg  if test "$libtool" = yes; then
3993da084b3Smrg    while test $1 != '--mode=compile'; do
4003da084b3Smrg      shift
4013da084b3Smrg    done
4023da084b3Smrg    shift
4033da084b3Smrg  fi
4043da084b3Smrg  # X makedepend
4053da084b3Smrg  shift
4063da084b3Smrg  cleared=no
4073da084b3Smrg  for arg in "$@"; do
4083da084b3Smrg    case $cleared in
4093da084b3Smrg    no)
4103da084b3Smrg      set ""; shift
4113da084b3Smrg      cleared=yes ;;
4123da084b3Smrg    esac
4133da084b3Smrg    case "$arg" in
4143da084b3Smrg    -D*|-I*)
4153da084b3Smrg      set fnord "$@" "$arg"; shift ;;
4163da084b3Smrg    # Strip any option that makedepend may not understand.  Remove
4173da084b3Smrg    # the object too, otherwise makedepend will parse it as a source file.
4183da084b3Smrg    -*|$object)
4193da084b3Smrg      ;;
4203da084b3Smrg    *)
4213da084b3Smrg      set fnord "$@" "$arg"; shift ;;
4223da084b3Smrg    esac
4233da084b3Smrg  done
4243da084b3Smrg  obj_suffix="`echo $object | sed 's/^.*\././'`"
4253da084b3Smrg  touch "$tmpdepfile"
4263da084b3Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
4273da084b3Smrg  rm -f "$depfile"
4283da084b3Smrg  cat < "$tmpdepfile" > "$depfile"
4293da084b3Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
4303da084b3Smrg' | \
4313da084b3Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
4323da084b3Smrg## correctly.  Breaking it into two sed invocations is a workaround.
4333da084b3Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
4343da084b3Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
4353da084b3Smrg  ;;
4363da084b3Smrg
4373da084b3Smrgcpp)
4383da084b3Smrg  # Important note: in order to support this mode, a compiler *must*
4393da084b3Smrg  # always write the preprocessed file to stdout.
4403da084b3Smrg  "$@" || exit $?
4413da084b3Smrg
4423da084b3Smrg  # Remove the call to Libtool.
4433da084b3Smrg  if test "$libtool" = yes; then
4443da084b3Smrg    while test $1 != '--mode=compile'; do
4453da084b3Smrg      shift
4463da084b3Smrg    done
4473da084b3Smrg    shift
4483da084b3Smrg  fi
4493da084b3Smrg
4503da084b3Smrg  # Remove `-o $object'.
4513da084b3Smrg  IFS=" "
4523da084b3Smrg  for arg
4533da084b3Smrg  do
4543da084b3Smrg    case $arg in
4553da084b3Smrg    -o)
4563da084b3Smrg      shift
4573da084b3Smrg      ;;
4583da084b3Smrg    $object)
4593da084b3Smrg      shift
4603da084b3Smrg      ;;
4613da084b3Smrg    *)
4623da084b3Smrg      set fnord "$@" "$arg"
4633da084b3Smrg      shift # fnord
4643da084b3Smrg      shift # $arg
4653da084b3Smrg      ;;
4663da084b3Smrg    esac
4673da084b3Smrg  done
4683da084b3Smrg
4693da084b3Smrg  "$@" -E |
4703da084b3Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
4713da084b3Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
4723da084b3Smrg    sed '$ s: \\$::' > "$tmpdepfile"
4733da084b3Smrg  rm -f "$depfile"
4743da084b3Smrg  echo "$object : \\" > "$depfile"
4753da084b3Smrg  cat < "$tmpdepfile" >> "$depfile"
4763da084b3Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
4773da084b3Smrg  rm -f "$tmpdepfile"
4783da084b3Smrg  ;;
4793da084b3Smrg
4803da084b3Smrgmsvisualcpp)
4813da084b3Smrg  # Important note: in order to support this mode, a compiler *must*
4823da084b3Smrg  # always write the preprocessed file to stdout, regardless of -o,
4833da084b3Smrg  # because we must use -o when running libtool.
4843da084b3Smrg  "$@" || exit $?
4853da084b3Smrg  IFS=" "
4863da084b3Smrg  for arg
4873da084b3Smrg  do
4883da084b3Smrg    case "$arg" in
4893da084b3Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
4903da084b3Smrg	set fnord "$@"
4913da084b3Smrg	shift
4923da084b3Smrg	shift
4933da084b3Smrg	;;
4943da084b3Smrg    *)
4953da084b3Smrg	set fnord "$@" "$arg"
4963da084b3Smrg	shift
4973da084b3Smrg	shift
4983da084b3Smrg	;;
4993da084b3Smrg    esac
5003da084b3Smrg  done
5013da084b3Smrg  "$@" -E |
5023da084b3Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
5033da084b3Smrg  rm -f "$depfile"
5043da084b3Smrg  echo "$object : \\" > "$depfile"
5053da084b3Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
5063da084b3Smrg  echo "	" >> "$depfile"
5073da084b3Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
5083da084b3Smrg  rm -f "$tmpdepfile"
5093da084b3Smrg  ;;
5103da084b3Smrg
5113da084b3Smrgnone)
5123da084b3Smrg  exec "$@"
5133da084b3Smrg  ;;
5143da084b3Smrg
5153da084b3Smrg*)
5163da084b3Smrg  echo "Unknown depmode $depmode" 1>&2
5173da084b3Smrg  exit 1
5183da084b3Smrg  ;;
5193da084b3Smrgesac
5203da084b3Smrg
5213da084b3Smrgexit 0
5223da084b3Smrg
5233da084b3Smrg# Local Variables:
5243da084b3Smrg# mode: shell-script
5253da084b3Smrg# sh-indentation: 2
5263da084b3Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
5273da084b3Smrg# time-stamp-start: "scriptversion="
5283da084b3Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
5293da084b3Smrg# time-stamp-end: "$"
5303da084b3Smrg# End:
531