depcomp revision 55acc8fc
13da084b3Smrg#! /bin/sh
23da084b3Smrg# depcomp - compile a program generating dependencies as side-effects
33da084b3Smrg
455acc8fcSmrgscriptversion=2009-04-28.21; # UTC
53da084b3Smrg
655acc8fcSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
755acc8fcSmrg# Software 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
2055acc8fcSmrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
213da084b3Smrg
223da084b3Smrg# As a special exception to the GNU General Public License, if you
233da084b3Smrg# distribute this file as part of a program that contains a
243da084b3Smrg# configuration script generated by Autoconf, you may include it under
253da084b3Smrg# the same distribution terms that you use for the rest of that program.
263da084b3Smrg
273da084b3Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
283da084b3Smrg
293da084b3Smrgcase $1 in
303da084b3Smrg  '')
313da084b3Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
323da084b3Smrg     exit 1;
333da084b3Smrg     ;;
343da084b3Smrg  -h | --h*)
353da084b3Smrg    cat <<\EOF
363da084b3SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
373da084b3Smrg
383da084b3SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
393da084b3Smrgas side-effects.
403da084b3Smrg
413da084b3SmrgEnvironment variables:
423da084b3Smrg  depmode     Dependency tracking mode.
433da084b3Smrg  source      Source file read by `PROGRAMS ARGS'.
443da084b3Smrg  object      Object file output by `PROGRAMS ARGS'.
453da084b3Smrg  DEPDIR      directory where to store dependencies.
463da084b3Smrg  depfile     Dependency file to output.
473da084b3Smrg  tmpdepfile  Temporary file to use when outputing dependencies.
483da084b3Smrg  libtool     Whether libtool is used (yes/no).
493da084b3Smrg
503da084b3SmrgReport bugs to <bug-automake@gnu.org>.
513da084b3SmrgEOF
523da084b3Smrg    exit $?
533da084b3Smrg    ;;
543da084b3Smrg  -v | --v*)
553da084b3Smrg    echo "depcomp $scriptversion"
563da084b3Smrg    exit $?
573da084b3Smrg    ;;
583da084b3Smrgesac
593da084b3Smrg
603da084b3Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
613da084b3Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
623da084b3Smrg  exit 1
633da084b3Smrgfi
643da084b3Smrg
653da084b3Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
663da084b3Smrgdepfile=${depfile-`echo "$object" |
673da084b3Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
683da084b3Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
693da084b3Smrg
703da084b3Smrgrm -f "$tmpdepfile"
713da084b3Smrg
723da084b3Smrg# Some modes work just like other modes, but use different flags.  We
733da084b3Smrg# parameterize here, but still list the modes in the big case below,
743da084b3Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
753da084b3Smrg# here, because this file can only contain one case statement.
763da084b3Smrgif test "$depmode" = hp; then
773da084b3Smrg  # HP compiler uses -M and no extra arg.
783da084b3Smrg  gccflag=-M
793da084b3Smrg  depmode=gcc
803da084b3Smrgfi
813da084b3Smrg
823da084b3Smrgif test "$depmode" = dashXmstdout; then
833da084b3Smrg   # This is just like dashmstdout with a different argument.
843da084b3Smrg   dashmflag=-xM
853da084b3Smrg   depmode=dashmstdout
863da084b3Smrgfi
873da084b3Smrg
8855acc8fcSmrgcygpath_u="cygpath -u -f -"
8955acc8fcSmrgif test "$depmode" = msvcmsys; then
9055acc8fcSmrg   # This is just like msvisualcpp but w/o cygpath translation.
9155acc8fcSmrg   # Just convert the backslash-escaped backslashes to single forward
9255acc8fcSmrg   # slashes to satisfy depend.m4
9355acc8fcSmrg   cygpath_u="sed s,\\\\\\\\,/,g"
9455acc8fcSmrg   depmode=msvisualcpp
9555acc8fcSmrgfi
9655acc8fcSmrg
973da084b3Smrgcase "$depmode" in
983da084b3Smrggcc3)
993da084b3Smrg## gcc 3 implements dependency tracking that does exactly what
1003da084b3Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
1013da084b3Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
102d63fdb69Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
103d63fdb69Smrg## the command line argument order; so add the flags where they
104d63fdb69Smrg## appear in depend2.am.  Note that the slowdown incurred here
105d63fdb69Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
106d63fdb69Smrg  for arg
107d63fdb69Smrg  do
108d63fdb69Smrg    case $arg in
109d63fdb69Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
110d63fdb69Smrg    *)  set fnord "$@" "$arg" ;;
111d63fdb69Smrg    esac
112d63fdb69Smrg    shift # fnord
113d63fdb69Smrg    shift # $arg
114d63fdb69Smrg  done
115d63fdb69Smrg  "$@"
1163da084b3Smrg  stat=$?
1173da084b3Smrg  if test $stat -eq 0; then :
1183da084b3Smrg  else
1193da084b3Smrg    rm -f "$tmpdepfile"
1203da084b3Smrg    exit $stat
1213da084b3Smrg  fi
1223da084b3Smrg  mv "$tmpdepfile" "$depfile"
1233da084b3Smrg  ;;
1243da084b3Smrg
1253da084b3Smrggcc)
1263da084b3Smrg## There are various ways to get dependency output from gcc.  Here's
1273da084b3Smrg## why we pick this rather obscure method:
1283da084b3Smrg## - Don't want to use -MD because we'd like the dependencies to end
1293da084b3Smrg##   up in a subdir.  Having to rename by hand is ugly.
1303da084b3Smrg##   (We might end up doing this anyway to support other compilers.)
1313da084b3Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
1323da084b3Smrg##   -MM, not -M (despite what the docs say).
1333da084b3Smrg## - Using -M directly means running the compiler twice (even worse
1343da084b3Smrg##   than renaming).
1353da084b3Smrg  if test -z "$gccflag"; then
1363da084b3Smrg    gccflag=-MD,
1373da084b3Smrg  fi
1383da084b3Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
1393da084b3Smrg  stat=$?
1403da084b3Smrg  if test $stat -eq 0; then :
1413da084b3Smrg  else
1423da084b3Smrg    rm -f "$tmpdepfile"
1433da084b3Smrg    exit $stat
1443da084b3Smrg  fi
1453da084b3Smrg  rm -f "$depfile"
1463da084b3Smrg  echo "$object : \\" > "$depfile"
1473da084b3Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
1483da084b3Smrg## The second -e expression handles DOS-style file names with drive letters.
1493da084b3Smrg  sed -e 's/^[^:]*: / /' \
1503da084b3Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
1513da084b3Smrg## This next piece of magic avoids the `deleted header file' problem.
1523da084b3Smrg## The problem is that when a header file which appears in a .P file
1533da084b3Smrg## is deleted, the dependency causes make to die (because there is
1543da084b3Smrg## typically no way to rebuild the header).  We avoid this by adding
1553da084b3Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
1563da084b3Smrg## this for us directly.
1573da084b3Smrg  tr ' ' '
1583da084b3Smrg' < "$tmpdepfile" |
1593da084b3Smrg## Some versions of gcc put a space before the `:'.  On the theory
1603da084b3Smrg## that the space means something, we add a space to the output as
1613da084b3Smrg## well.
1623da084b3Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
1633da084b3Smrg## correctly.  Breaking it into two sed invocations is a workaround.
1643da084b3Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
1653da084b3Smrg  rm -f "$tmpdepfile"
1663da084b3Smrg  ;;
1673da084b3Smrg
1683da084b3Smrghp)
1693da084b3Smrg  # This case exists only to let depend.m4 do its work.  It works by
1703da084b3Smrg  # looking at the text of this script.  This case will never be run,
1713da084b3Smrg  # since it is checked for above.
1723da084b3Smrg  exit 1
1733da084b3Smrg  ;;
1743da084b3Smrg
1753da084b3Smrgsgi)
1763da084b3Smrg  if test "$libtool" = yes; then
1773da084b3Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
1783da084b3Smrg  else
1793da084b3Smrg    "$@" -MDupdate "$tmpdepfile"
1803da084b3Smrg  fi
1813da084b3Smrg  stat=$?
1823da084b3Smrg  if test $stat -eq 0; then :
1833da084b3Smrg  else
1843da084b3Smrg    rm -f "$tmpdepfile"
1853da084b3Smrg    exit $stat
1863da084b3Smrg  fi
1873da084b3Smrg  rm -f "$depfile"
1883da084b3Smrg
1893da084b3Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
1903da084b3Smrg    echo "$object : \\" > "$depfile"
1913da084b3Smrg
1923da084b3Smrg    # Clip off the initial element (the dependent).  Don't try to be
1933da084b3Smrg    # clever and replace this with sed code, as IRIX sed won't handle
1943da084b3Smrg    # lines with more than a fixed number of characters (4096 in
1953da084b3Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
1963da084b3Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
1973da084b3Smrg    # dependency line.
1983da084b3Smrg    tr ' ' '
1993da084b3Smrg' < "$tmpdepfile" \
2003da084b3Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
2013da084b3Smrg    tr '
20255acc8fcSmrg' ' ' >> "$depfile"
20355acc8fcSmrg    echo >> "$depfile"
2043da084b3Smrg
2053da084b3Smrg    # The second pass generates a dummy entry for each header file.
2063da084b3Smrg    tr ' ' '
2073da084b3Smrg' < "$tmpdepfile" \
2083da084b3Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
20955acc8fcSmrg   >> "$depfile"
2103da084b3Smrg  else
2113da084b3Smrg    # The sourcefile does not contain any dependencies, so just
2123da084b3Smrg    # store a dummy comment line, to avoid errors with the Makefile
2133da084b3Smrg    # "include basename.Plo" scheme.
2143da084b3Smrg    echo "#dummy" > "$depfile"
2153da084b3Smrg  fi
2163da084b3Smrg  rm -f "$tmpdepfile"
2173da084b3Smrg  ;;
2183da084b3Smrg
2193da084b3Smrgaix)
2203da084b3Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
2213da084b3Smrg  # in a .u file.  In older versions, this file always lives in the
2223da084b3Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
2233da084b3Smrg  # start of each line; $object doesn't have directory information.
2243da084b3Smrg  # Version 6 uses the directory in both cases.
225d63fdb69Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
226d63fdb69Smrg  test "x$dir" = "x$object" && dir=
227d63fdb69Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
2283da084b3Smrg  if test "$libtool" = yes; then
229d63fdb69Smrg    tmpdepfile1=$dir$base.u
230d63fdb69Smrg    tmpdepfile2=$base.u
231d63fdb69Smrg    tmpdepfile3=$dir.libs/$base.u
2323da084b3Smrg    "$@" -Wc,-M
2333da084b3Smrg  else
234d63fdb69Smrg    tmpdepfile1=$dir$base.u
235d63fdb69Smrg    tmpdepfile2=$dir$base.u
236d63fdb69Smrg    tmpdepfile3=$dir$base.u
2373da084b3Smrg    "$@" -M
2383da084b3Smrg  fi
2393da084b3Smrg  stat=$?
2403da084b3Smrg
2413da084b3Smrg  if test $stat -eq 0; then :
2423da084b3Smrg  else
243d63fdb69Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2443da084b3Smrg    exit $stat
2453da084b3Smrg  fi
2463da084b3Smrg
247d63fdb69Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
248d63fdb69Smrg  do
249d63fdb69Smrg    test -f "$tmpdepfile" && break
250d63fdb69Smrg  done
2513da084b3Smrg  if test -f "$tmpdepfile"; then
2523da084b3Smrg    # Each line is of the form `foo.o: dependent.h'.
2533da084b3Smrg    # Do two passes, one to just change these to
2543da084b3Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
255d63fdb69Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
256d63fdb69Smrg    # That's a tab and a space in the [].
257d63fdb69Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
2583da084b3Smrg  else
2593da084b3Smrg    # The sourcefile does not contain any dependencies, so just
2603da084b3Smrg    # store a dummy comment line, to avoid errors with the Makefile
2613da084b3Smrg    # "include basename.Plo" scheme.
2623da084b3Smrg    echo "#dummy" > "$depfile"
2633da084b3Smrg  fi
2643da084b3Smrg  rm -f "$tmpdepfile"
2653da084b3Smrg  ;;
2663da084b3Smrg
2673da084b3Smrgicc)
2683da084b3Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
2693da084b3Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
2703da084b3Smrg  # ICC 7.0 will fill foo.d with something like
2713da084b3Smrg  #    foo.o: sub/foo.c
2723da084b3Smrg  #    foo.o: sub/foo.h
2733da084b3Smrg  # which is wrong.  We want:
2743da084b3Smrg  #    sub/foo.o: sub/foo.c
2753da084b3Smrg  #    sub/foo.o: sub/foo.h
2763da084b3Smrg  #    sub/foo.c:
2773da084b3Smrg  #    sub/foo.h:
2783da084b3Smrg  # ICC 7.1 will output
2793da084b3Smrg  #    foo.o: sub/foo.c sub/foo.h
2803da084b3Smrg  # and will wrap long lines using \ :
2813da084b3Smrg  #    foo.o: sub/foo.c ... \
2823da084b3Smrg  #     sub/foo.h ... \
2833da084b3Smrg  #     ...
2843da084b3Smrg
2853da084b3Smrg  "$@" -MD -MF "$tmpdepfile"
2863da084b3Smrg  stat=$?
2873da084b3Smrg  if test $stat -eq 0; then :
2883da084b3Smrg  else
2893da084b3Smrg    rm -f "$tmpdepfile"
2903da084b3Smrg    exit $stat
2913da084b3Smrg  fi
2923da084b3Smrg  rm -f "$depfile"
2933da084b3Smrg  # Each line is of the form `foo.o: dependent.h',
2943da084b3Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
2953da084b3Smrg  # Do two passes, one to just change these to
2963da084b3Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
2973da084b3Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
2983da084b3Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
2993da084b3Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
3003da084b3Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
3013da084b3Smrg    sed -e 's/$/ :/' >> "$depfile"
3023da084b3Smrg  rm -f "$tmpdepfile"
3033da084b3Smrg  ;;
3043da084b3Smrg
305d63fdb69Smrghp2)
306d63fdb69Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
307d63fdb69Smrg  # compilers, which have integrated preprocessors.  The correct option
308d63fdb69Smrg  # to use with these is +Maked; it writes dependencies to a file named
309d63fdb69Smrg  # 'foo.d', which lands next to the object file, wherever that
310d63fdb69Smrg  # happens to be.
311d63fdb69Smrg  # Much of this is similar to the tru64 case; see comments there.
312d63fdb69Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
313d63fdb69Smrg  test "x$dir" = "x$object" && dir=
314d63fdb69Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
315d63fdb69Smrg  if test "$libtool" = yes; then
316d63fdb69Smrg    tmpdepfile1=$dir$base.d
317d63fdb69Smrg    tmpdepfile2=$dir.libs/$base.d
318d63fdb69Smrg    "$@" -Wc,+Maked
319d63fdb69Smrg  else
320d63fdb69Smrg    tmpdepfile1=$dir$base.d
321d63fdb69Smrg    tmpdepfile2=$dir$base.d
322d63fdb69Smrg    "$@" +Maked
323d63fdb69Smrg  fi
324d63fdb69Smrg  stat=$?
325d63fdb69Smrg  if test $stat -eq 0; then :
326d63fdb69Smrg  else
327d63fdb69Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
328d63fdb69Smrg     exit $stat
329d63fdb69Smrg  fi
330d63fdb69Smrg
331d63fdb69Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
332d63fdb69Smrg  do
333d63fdb69Smrg    test -f "$tmpdepfile" && break
334d63fdb69Smrg  done
335d63fdb69Smrg  if test -f "$tmpdepfile"; then
336d63fdb69Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
337d63fdb69Smrg    # Add `dependent.h:' lines.
33855acc8fcSmrg    sed -ne '2,${
33955acc8fcSmrg	       s/^ *//
34055acc8fcSmrg	       s/ \\*$//
34155acc8fcSmrg	       s/$/:/
34255acc8fcSmrg	       p
34355acc8fcSmrg	     }' "$tmpdepfile" >> "$depfile"
344d63fdb69Smrg  else
345d63fdb69Smrg    echo "#dummy" > "$depfile"
346d63fdb69Smrg  fi
347d63fdb69Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
348d63fdb69Smrg  ;;
349d63fdb69Smrg
3503da084b3Smrgtru64)
3513da084b3Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
3523da084b3Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
3533da084b3Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
3543da084b3Smrg   # dependencies in `foo.d' instead, so we check for that too.
3553da084b3Smrg   # Subdirectories are respected.
3563da084b3Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3573da084b3Smrg   test "x$dir" = "x$object" && dir=
3583da084b3Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3593da084b3Smrg
3603da084b3Smrg   if test "$libtool" = yes; then
3613da084b3Smrg      # With Tru64 cc, shared objects can also be used to make a
362d63fdb69Smrg      # static library.  This mechanism is used in libtool 1.4 series to
3633da084b3Smrg      # handle both shared and static libraries in a single compilation.
3643da084b3Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
3653da084b3Smrg      #
3663da084b3Smrg      # With libtool 1.5 this exception was removed, and libtool now
3673da084b3Smrg      # generates 2 separate objects for the 2 libraries.  These two
368d63fdb69Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
3693da084b3Smrg      # in $dir$base.o.d.  We have to check for both files, because
3703da084b3Smrg      # one of the two compilations can be disabled.  We should prefer
3713da084b3Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
3723da084b3Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
3733da084b3Smrg      # the former would cause a distcleancheck panic.
3743da084b3Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
3753da084b3Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
3763da084b3Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
3773da084b3Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
3783da084b3Smrg      "$@" -Wc,-MD
3793da084b3Smrg   else
3803da084b3Smrg      tmpdepfile1=$dir$base.o.d
3813da084b3Smrg      tmpdepfile2=$dir$base.d
3823da084b3Smrg      tmpdepfile3=$dir$base.d
3833da084b3Smrg      tmpdepfile4=$dir$base.d
3843da084b3Smrg      "$@" -MD
3853da084b3Smrg   fi
3863da084b3Smrg
3873da084b3Smrg   stat=$?
3883da084b3Smrg   if test $stat -eq 0; then :
3893da084b3Smrg   else
3903da084b3Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3913da084b3Smrg      exit $stat
3923da084b3Smrg   fi
3933da084b3Smrg
3943da084b3Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3953da084b3Smrg   do
3963da084b3Smrg     test -f "$tmpdepfile" && break
3973da084b3Smrg   done
3983da084b3Smrg   if test -f "$tmpdepfile"; then
3993da084b3Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
4003da084b3Smrg      # That's a tab and a space in the [].
4013da084b3Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
4023da084b3Smrg   else
4033da084b3Smrg      echo "#dummy" > "$depfile"
4043da084b3Smrg   fi
4053da084b3Smrg   rm -f "$tmpdepfile"
4063da084b3Smrg   ;;
4073da084b3Smrg
4083da084b3Smrg#nosideeffect)
4093da084b3Smrg  # This comment above is used by automake to tell side-effect
4103da084b3Smrg  # dependency tracking mechanisms from slower ones.
4113da084b3Smrg
4123da084b3Smrgdashmstdout)
4133da084b3Smrg  # Important note: in order to support this mode, a compiler *must*
4143da084b3Smrg  # always write the preprocessed file to stdout, regardless of -o.
4153da084b3Smrg  "$@" || exit $?
4163da084b3Smrg
4173da084b3Smrg  # Remove the call to Libtool.
4183da084b3Smrg  if test "$libtool" = yes; then
41955acc8fcSmrg    while test "X$1" != 'X--mode=compile'; do
4203da084b3Smrg      shift
4213da084b3Smrg    done
4223da084b3Smrg    shift
4233da084b3Smrg  fi
4243da084b3Smrg
4253da084b3Smrg  # Remove `-o $object'.
4263da084b3Smrg  IFS=" "
4273da084b3Smrg  for arg
4283da084b3Smrg  do
4293da084b3Smrg    case $arg in
4303da084b3Smrg    -o)
4313da084b3Smrg      shift
4323da084b3Smrg      ;;
4333da084b3Smrg    $object)
4343da084b3Smrg      shift
4353da084b3Smrg      ;;
4363da084b3Smrg    *)
4373da084b3Smrg      set fnord "$@" "$arg"
4383da084b3Smrg      shift # fnord
4393da084b3Smrg      shift # $arg
4403da084b3Smrg      ;;
4413da084b3Smrg    esac
4423da084b3Smrg  done
4433da084b3Smrg
4443da084b3Smrg  test -z "$dashmflag" && dashmflag=-M
4453da084b3Smrg  # Require at least two characters before searching for `:'
4463da084b3Smrg  # in the target name.  This is to cope with DOS-style filenames:
4473da084b3Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
4483da084b3Smrg  "$@" $dashmflag |
4493da084b3Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
4503da084b3Smrg  rm -f "$depfile"
4513da084b3Smrg  cat < "$tmpdepfile" > "$depfile"
4523da084b3Smrg  tr ' ' '
4533da084b3Smrg' < "$tmpdepfile" | \
4543da084b3Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
4553da084b3Smrg## correctly.  Breaking it into two sed invocations is a workaround.
4563da084b3Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
4573da084b3Smrg  rm -f "$tmpdepfile"
4583da084b3Smrg  ;;
4593da084b3Smrg
4603da084b3SmrgdashXmstdout)
4613da084b3Smrg  # This case only exists to satisfy depend.m4.  It is never actually
4623da084b3Smrg  # run, as this mode is specially recognized in the preamble.
4633da084b3Smrg  exit 1
4643da084b3Smrg  ;;
4653da084b3Smrg
4663da084b3Smrgmakedepend)
4673da084b3Smrg  "$@" || exit $?
4683da084b3Smrg  # Remove any Libtool call
4693da084b3Smrg  if test "$libtool" = yes; then
47055acc8fcSmrg    while test "X$1" != 'X--mode=compile'; do
4713da084b3Smrg      shift
4723da084b3Smrg    done
4733da084b3Smrg    shift
4743da084b3Smrg  fi
4753da084b3Smrg  # X makedepend
4763da084b3Smrg  shift
47755acc8fcSmrg  cleared=no eat=no
47855acc8fcSmrg  for arg
47955acc8fcSmrg  do
4803da084b3Smrg    case $cleared in
4813da084b3Smrg    no)
4823da084b3Smrg      set ""; shift
4833da084b3Smrg      cleared=yes ;;
4843da084b3Smrg    esac
48555acc8fcSmrg    if test $eat = yes; then
48655acc8fcSmrg      eat=no
48755acc8fcSmrg      continue
48855acc8fcSmrg    fi
4893da084b3Smrg    case "$arg" in
4903da084b3Smrg    -D*|-I*)
4913da084b3Smrg      set fnord "$@" "$arg"; shift ;;
4923da084b3Smrg    # Strip any option that makedepend may not understand.  Remove
4933da084b3Smrg    # the object too, otherwise makedepend will parse it as a source file.
49455acc8fcSmrg    -arch)
49555acc8fcSmrg      eat=yes ;;
4963da084b3Smrg    -*|$object)
4973da084b3Smrg      ;;
4983da084b3Smrg    *)
4993da084b3Smrg      set fnord "$@" "$arg"; shift ;;
5003da084b3Smrg    esac
5013da084b3Smrg  done
50255acc8fcSmrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
5033da084b3Smrg  touch "$tmpdepfile"
5043da084b3Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
5053da084b3Smrg  rm -f "$depfile"
5063da084b3Smrg  cat < "$tmpdepfile" > "$depfile"
5073da084b3Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
5083da084b3Smrg' | \
5093da084b3Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
5103da084b3Smrg## correctly.  Breaking it into two sed invocations is a workaround.
5113da084b3Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
5123da084b3Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
5133da084b3Smrg  ;;
5143da084b3Smrg
5153da084b3Smrgcpp)
5163da084b3Smrg  # Important note: in order to support this mode, a compiler *must*
5173da084b3Smrg  # always write the preprocessed file to stdout.
5183da084b3Smrg  "$@" || exit $?
5193da084b3Smrg
5203da084b3Smrg  # Remove the call to Libtool.
5213da084b3Smrg  if test "$libtool" = yes; then
52255acc8fcSmrg    while test "X$1" != 'X--mode=compile'; do
5233da084b3Smrg      shift
5243da084b3Smrg    done
5253da084b3Smrg    shift
5263da084b3Smrg  fi
5273da084b3Smrg
5283da084b3Smrg  # Remove `-o $object'.
5293da084b3Smrg  IFS=" "
5303da084b3Smrg  for arg
5313da084b3Smrg  do
5323da084b3Smrg    case $arg in
5333da084b3Smrg    -o)
5343da084b3Smrg      shift
5353da084b3Smrg      ;;
5363da084b3Smrg    $object)
5373da084b3Smrg      shift
5383da084b3Smrg      ;;
5393da084b3Smrg    *)
5403da084b3Smrg      set fnord "$@" "$arg"
5413da084b3Smrg      shift # fnord
5423da084b3Smrg      shift # $arg
5433da084b3Smrg      ;;
5443da084b3Smrg    esac
5453da084b3Smrg  done
5463da084b3Smrg
5473da084b3Smrg  "$@" -E |
5483da084b3Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
5493da084b3Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
5503da084b3Smrg    sed '$ s: \\$::' > "$tmpdepfile"
5513da084b3Smrg  rm -f "$depfile"
5523da084b3Smrg  echo "$object : \\" > "$depfile"
5533da084b3Smrg  cat < "$tmpdepfile" >> "$depfile"
5543da084b3Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
5553da084b3Smrg  rm -f "$tmpdepfile"
5563da084b3Smrg  ;;
5573da084b3Smrg
5583da084b3Smrgmsvisualcpp)
5593da084b3Smrg  # Important note: in order to support this mode, a compiler *must*
56055acc8fcSmrg  # always write the preprocessed file to stdout.
5613da084b3Smrg  "$@" || exit $?
56255acc8fcSmrg
56355acc8fcSmrg  # Remove the call to Libtool.
56455acc8fcSmrg  if test "$libtool" = yes; then
56555acc8fcSmrg    while test "X$1" != 'X--mode=compile'; do
56655acc8fcSmrg      shift
56755acc8fcSmrg    done
56855acc8fcSmrg    shift
56955acc8fcSmrg  fi
57055acc8fcSmrg
5713da084b3Smrg  IFS=" "
5723da084b3Smrg  for arg
5733da084b3Smrg  do
5743da084b3Smrg    case "$arg" in
57555acc8fcSmrg    -o)
57655acc8fcSmrg      shift
57755acc8fcSmrg      ;;
57855acc8fcSmrg    $object)
57955acc8fcSmrg      shift
58055acc8fcSmrg      ;;
5813da084b3Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
5823da084b3Smrg	set fnord "$@"
5833da084b3Smrg	shift
5843da084b3Smrg	shift
5853da084b3Smrg	;;
5863da084b3Smrg    *)
5873da084b3Smrg	set fnord "$@" "$arg"
5883da084b3Smrg	shift
5893da084b3Smrg	shift
5903da084b3Smrg	;;
5913da084b3Smrg    esac
5923da084b3Smrg  done
59355acc8fcSmrg  "$@" -E 2>/dev/null |
59455acc8fcSmrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
5953da084b3Smrg  rm -f "$depfile"
5963da084b3Smrg  echo "$object : \\" > "$depfile"
59755acc8fcSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
5983da084b3Smrg  echo "	" >> "$depfile"
59955acc8fcSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
6003da084b3Smrg  rm -f "$tmpdepfile"
6013da084b3Smrg  ;;
6023da084b3Smrg
60355acc8fcSmrgmsvcmsys)
60455acc8fcSmrg  # This case exists only to let depend.m4 do its work.  It works by
60555acc8fcSmrg  # looking at the text of this script.  This case will never be run,
60655acc8fcSmrg  # since it is checked for above.
60755acc8fcSmrg  exit 1
60855acc8fcSmrg  ;;
60955acc8fcSmrg
6103da084b3Smrgnone)
6113da084b3Smrg  exec "$@"
6123da084b3Smrg  ;;
6133da084b3Smrg
6143da084b3Smrg*)
6153da084b3Smrg  echo "Unknown depmode $depmode" 1>&2
6163da084b3Smrg  exit 1
6173da084b3Smrg  ;;
6183da084b3Smrgesac
6193da084b3Smrg
6203da084b3Smrgexit 0
6213da084b3Smrg
6223da084b3Smrg# Local Variables:
6233da084b3Smrg# mode: shell-script
6243da084b3Smrg# sh-indentation: 2
6253da084b3Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
6263da084b3Smrg# time-stamp-start: "scriptversion="
6273da084b3Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
62855acc8fcSmrg# time-stamp-time-zone: "UTC"
62955acc8fcSmrg# time-stamp-end: "; # UTC"
6303da084b3Smrg# End:
631