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