depcomp revision d769e936
11d54945dSmrg#! /bin/sh
21d54945dSmrg# depcomp - compile a program generating dependencies as side-effects
31d54945dSmrg
4d769e936Smrgscriptversion=2011-12-04.11; # UTC
51d54945dSmrg
6d769e936Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
7d769e936Smrg# 2011 Free Software Foundation, Inc.
81d54945dSmrg
91d54945dSmrg# This program is free software; you can redistribute it and/or modify
101d54945dSmrg# it under the terms of the GNU General Public License as published by
111d54945dSmrg# the Free Software Foundation; either version 2, or (at your option)
121d54945dSmrg# any later version.
131d54945dSmrg
141d54945dSmrg# This program is distributed in the hope that it will be useful,
151d54945dSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
161d54945dSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
171d54945dSmrg# GNU General Public License for more details.
181d54945dSmrg
191d54945dSmrg# You should have received a copy of the GNU General Public License
20ec713c28Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
211d54945dSmrg
221d54945dSmrg# As a special exception to the GNU General Public License, if you
231d54945dSmrg# distribute this file as part of a program that contains a
241d54945dSmrg# configuration script generated by Autoconf, you may include it under
251d54945dSmrg# the same distribution terms that you use for the rest of that program.
261d54945dSmrg
271d54945dSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
281d54945dSmrg
291d54945dSmrgcase $1 in
301d54945dSmrg  '')
311d54945dSmrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
321d54945dSmrg     exit 1;
331d54945dSmrg     ;;
341d54945dSmrg  -h | --h*)
351d54945dSmrg    cat <<\EOF
361d54945dSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
371d54945dSmrg
381d54945dSmrgRun PROGRAMS ARGS to compile a file, generating dependencies
391d54945dSmrgas side-effects.
401d54945dSmrg
411d54945dSmrgEnvironment variables:
421d54945dSmrg  depmode     Dependency tracking mode.
431d54945dSmrg  source      Source file read by `PROGRAMS ARGS'.
441d54945dSmrg  object      Object file output by `PROGRAMS ARGS'.
451d54945dSmrg  DEPDIR      directory where to store dependencies.
461d54945dSmrg  depfile     Dependency file to output.
47d769e936Smrg  tmpdepfile  Temporary file to use when outputting dependencies.
481d54945dSmrg  libtool     Whether libtool is used (yes/no).
491d54945dSmrg
501d54945dSmrgReport bugs to <bug-automake@gnu.org>.
511d54945dSmrgEOF
521d54945dSmrg    exit $?
531d54945dSmrg    ;;
541d54945dSmrg  -v | --v*)
551d54945dSmrg    echo "depcomp $scriptversion"
561d54945dSmrg    exit $?
571d54945dSmrg    ;;
581d54945dSmrgesac
591d54945dSmrg
601d54945dSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
611d54945dSmrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
621d54945dSmrg  exit 1
631d54945dSmrgfi
641d54945dSmrg
651d54945dSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
661d54945dSmrgdepfile=${depfile-`echo "$object" |
671d54945dSmrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
681d54945dSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
691d54945dSmrg
701d54945dSmrgrm -f "$tmpdepfile"
711d54945dSmrg
721d54945dSmrg# Some modes work just like other modes, but use different flags.  We
731d54945dSmrg# parameterize here, but still list the modes in the big case below,
741d54945dSmrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
751d54945dSmrg# here, because this file can only contain one case statement.
761d54945dSmrgif test "$depmode" = hp; then
771d54945dSmrg  # HP compiler uses -M and no extra arg.
781d54945dSmrg  gccflag=-M
791d54945dSmrg  depmode=gcc
801d54945dSmrgfi
811d54945dSmrg
821d54945dSmrgif test "$depmode" = dashXmstdout; then
831d54945dSmrg   # This is just like dashmstdout with a different argument.
841d54945dSmrg   dashmflag=-xM
851d54945dSmrg   depmode=dashmstdout
861d54945dSmrgfi
871d54945dSmrg
88ec713c28Smrgcygpath_u="cygpath -u -f -"
89ec713c28Smrgif test "$depmode" = msvcmsys; then
90ec713c28Smrg   # This is just like msvisualcpp but w/o cygpath translation.
91ec713c28Smrg   # Just convert the backslash-escaped backslashes to single forward
92ec713c28Smrg   # slashes to satisfy depend.m4
93d769e936Smrg   cygpath_u='sed s,\\\\,/,g'
94ec713c28Smrg   depmode=msvisualcpp
95ec713c28Smrgfi
96ec713c28Smrg
97d769e936Smrgif test "$depmode" = msvc7msys; then
98d769e936Smrg   # This is just like msvc7 but w/o cygpath translation.
99d769e936Smrg   # Just convert the backslash-escaped backslashes to single forward
100d769e936Smrg   # slashes to satisfy depend.m4
101d769e936Smrg   cygpath_u='sed s,\\\\,/,g'
102d769e936Smrg   depmode=msvc7
103d769e936Smrgfi
104d769e936Smrg
1051d54945dSmrgcase "$depmode" in
1061d54945dSmrggcc3)
1071d54945dSmrg## gcc 3 implements dependency tracking that does exactly what
1081d54945dSmrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
1091d54945dSmrg## it if -MD -MP comes after the -MF stuff.  Hmm.
110ba85709eSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
111ba85709eSmrg## the command line argument order; so add the flags where they
112ba85709eSmrg## appear in depend2.am.  Note that the slowdown incurred here
113ba85709eSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
114ba85709eSmrg  for arg
115ba85709eSmrg  do
116ba85709eSmrg    case $arg in
117ba85709eSmrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
118ba85709eSmrg    *)  set fnord "$@" "$arg" ;;
119ba85709eSmrg    esac
120ba85709eSmrg    shift # fnord
121ba85709eSmrg    shift # $arg
122ba85709eSmrg  done
123ba85709eSmrg  "$@"
1241d54945dSmrg  stat=$?
1251d54945dSmrg  if test $stat -eq 0; then :
1261d54945dSmrg  else
1271d54945dSmrg    rm -f "$tmpdepfile"
1281d54945dSmrg    exit $stat
1291d54945dSmrg  fi
1301d54945dSmrg  mv "$tmpdepfile" "$depfile"
1311d54945dSmrg  ;;
1321d54945dSmrg
1331d54945dSmrggcc)
1341d54945dSmrg## There are various ways to get dependency output from gcc.  Here's
1351d54945dSmrg## why we pick this rather obscure method:
1361d54945dSmrg## - Don't want to use -MD because we'd like the dependencies to end
1371d54945dSmrg##   up in a subdir.  Having to rename by hand is ugly.
1381d54945dSmrg##   (We might end up doing this anyway to support other compilers.)
1391d54945dSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
1401d54945dSmrg##   -MM, not -M (despite what the docs say).
1411d54945dSmrg## - Using -M directly means running the compiler twice (even worse
1421d54945dSmrg##   than renaming).
1431d54945dSmrg  if test -z "$gccflag"; then
1441d54945dSmrg    gccflag=-MD,
1451d54945dSmrg  fi
1461d54945dSmrg  "$@" -Wp,"$gccflag$tmpdepfile"
1471d54945dSmrg  stat=$?
1481d54945dSmrg  if test $stat -eq 0; then :
1491d54945dSmrg  else
1501d54945dSmrg    rm -f "$tmpdepfile"
1511d54945dSmrg    exit $stat
1521d54945dSmrg  fi
1531d54945dSmrg  rm -f "$depfile"
1541d54945dSmrg  echo "$object : \\" > "$depfile"
1551d54945dSmrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
1561d54945dSmrg## The second -e expression handles DOS-style file names with drive letters.
1571d54945dSmrg  sed -e 's/^[^:]*: / /' \
1581d54945dSmrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
1591d54945dSmrg## This next piece of magic avoids the `deleted header file' problem.
1601d54945dSmrg## The problem is that when a header file which appears in a .P file
1611d54945dSmrg## is deleted, the dependency causes make to die (because there is
1621d54945dSmrg## typically no way to rebuild the header).  We avoid this by adding
1631d54945dSmrg## dummy dependencies for each header file.  Too bad gcc doesn't do
1641d54945dSmrg## this for us directly.
1651d54945dSmrg  tr ' ' '
1661d54945dSmrg' < "$tmpdepfile" |
1671d54945dSmrg## Some versions of gcc put a space before the `:'.  On the theory
1681d54945dSmrg## that the space means something, we add a space to the output as
169d769e936Smrg## well.  hp depmode also adds that space, but also prefixes the VPATH
170d769e936Smrg## to the object.  Take care to not repeat it in the output.
1711d54945dSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
1721d54945dSmrg## correctly.  Breaking it into two sed invocations is a workaround.
173d769e936Smrg    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
174d769e936Smrg      | sed -e 's/$/ :/' >> "$depfile"
1751d54945dSmrg  rm -f "$tmpdepfile"
1761d54945dSmrg  ;;
1771d54945dSmrg
1781d54945dSmrghp)
1791d54945dSmrg  # This case exists only to let depend.m4 do its work.  It works by
1801d54945dSmrg  # looking at the text of this script.  This case will never be run,
1811d54945dSmrg  # since it is checked for above.
1821d54945dSmrg  exit 1
1831d54945dSmrg  ;;
1841d54945dSmrg
1851d54945dSmrgsgi)
1861d54945dSmrg  if test "$libtool" = yes; then
1871d54945dSmrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
1881d54945dSmrg  else
1891d54945dSmrg    "$@" -MDupdate "$tmpdepfile"
1901d54945dSmrg  fi
1911d54945dSmrg  stat=$?
1921d54945dSmrg  if test $stat -eq 0; then :
1931d54945dSmrg  else
1941d54945dSmrg    rm -f "$tmpdepfile"
1951d54945dSmrg    exit $stat
1961d54945dSmrg  fi
1971d54945dSmrg  rm -f "$depfile"
1981d54945dSmrg
1991d54945dSmrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
2001d54945dSmrg    echo "$object : \\" > "$depfile"
2011d54945dSmrg
2021d54945dSmrg    # Clip off the initial element (the dependent).  Don't try to be
2031d54945dSmrg    # clever and replace this with sed code, as IRIX sed won't handle
2041d54945dSmrg    # lines with more than a fixed number of characters (4096 in
2051d54945dSmrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
2061d54945dSmrg    # the IRIX cc adds comments like `#:fec' to the end of the
2071d54945dSmrg    # dependency line.
2081d54945dSmrg    tr ' ' '
2091d54945dSmrg' < "$tmpdepfile" \
2101d54945dSmrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
2111d54945dSmrg    tr '
212ec713c28Smrg' ' ' >> "$depfile"
213ec713c28Smrg    echo >> "$depfile"
2141d54945dSmrg
2151d54945dSmrg    # The second pass generates a dummy entry for each header file.
2161d54945dSmrg    tr ' ' '
2171d54945dSmrg' < "$tmpdepfile" \
2181d54945dSmrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
219ec713c28Smrg   >> "$depfile"
2201d54945dSmrg  else
2211d54945dSmrg    # The sourcefile does not contain any dependencies, so just
2221d54945dSmrg    # store a dummy comment line, to avoid errors with the Makefile
2231d54945dSmrg    # "include basename.Plo" scheme.
2241d54945dSmrg    echo "#dummy" > "$depfile"
2251d54945dSmrg  fi
2261d54945dSmrg  rm -f "$tmpdepfile"
2271d54945dSmrg  ;;
2281d54945dSmrg
2291d54945dSmrgaix)
2301d54945dSmrg  # The C for AIX Compiler uses -M and outputs the dependencies
2311d54945dSmrg  # in a .u file.  In older versions, this file always lives in the
2321d54945dSmrg  # current directory.  Also, the AIX compiler puts `$object:' at the
2331d54945dSmrg  # start of each line; $object doesn't have directory information.
2341d54945dSmrg  # Version 6 uses the directory in both cases.
235786a6f21Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
236786a6f21Smrg  test "x$dir" = "x$object" && dir=
237786a6f21Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
2381d54945dSmrg  if test "$libtool" = yes; then
239786a6f21Smrg    tmpdepfile1=$dir$base.u
240786a6f21Smrg    tmpdepfile2=$base.u
241786a6f21Smrg    tmpdepfile3=$dir.libs/$base.u
2421d54945dSmrg    "$@" -Wc,-M
2431d54945dSmrg  else
244786a6f21Smrg    tmpdepfile1=$dir$base.u
245786a6f21Smrg    tmpdepfile2=$dir$base.u
246786a6f21Smrg    tmpdepfile3=$dir$base.u
2471d54945dSmrg    "$@" -M
2481d54945dSmrg  fi
2491d54945dSmrg  stat=$?
2501d54945dSmrg
2511d54945dSmrg  if test $stat -eq 0; then :
2521d54945dSmrg  else
253786a6f21Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2541d54945dSmrg    exit $stat
2551d54945dSmrg  fi
2561d54945dSmrg
257786a6f21Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
258786a6f21Smrg  do
259786a6f21Smrg    test -f "$tmpdepfile" && break
260786a6f21Smrg  done
2611d54945dSmrg  if test -f "$tmpdepfile"; then
2621d54945dSmrg    # Each line is of the form `foo.o: dependent.h'.
2631d54945dSmrg    # Do two passes, one to just change these to
2641d54945dSmrg    # `$object: dependent.h' and one to simply `dependent.h:'.
265786a6f21Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
266786a6f21Smrg    # That's a tab and a space in the [].
267786a6f21Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
2681d54945dSmrg  else
2691d54945dSmrg    # The sourcefile does not contain any dependencies, so just
2701d54945dSmrg    # store a dummy comment line, to avoid errors with the Makefile
2711d54945dSmrg    # "include basename.Plo" scheme.
2721d54945dSmrg    echo "#dummy" > "$depfile"
2731d54945dSmrg  fi
2741d54945dSmrg  rm -f "$tmpdepfile"
2751d54945dSmrg  ;;
2761d54945dSmrg
2771d54945dSmrgicc)
2781d54945dSmrg  # Intel's C compiler understands `-MD -MF file'.  However on
2791d54945dSmrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
2801d54945dSmrg  # ICC 7.0 will fill foo.d with something like
2811d54945dSmrg  #    foo.o: sub/foo.c
2821d54945dSmrg  #    foo.o: sub/foo.h
2831d54945dSmrg  # which is wrong.  We want:
2841d54945dSmrg  #    sub/foo.o: sub/foo.c
2851d54945dSmrg  #    sub/foo.o: sub/foo.h
2861d54945dSmrg  #    sub/foo.c:
2871d54945dSmrg  #    sub/foo.h:
2881d54945dSmrg  # ICC 7.1 will output
2891d54945dSmrg  #    foo.o: sub/foo.c sub/foo.h
2901d54945dSmrg  # and will wrap long lines using \ :
2911d54945dSmrg  #    foo.o: sub/foo.c ... \
2921d54945dSmrg  #     sub/foo.h ... \
2931d54945dSmrg  #     ...
2941d54945dSmrg
2951d54945dSmrg  "$@" -MD -MF "$tmpdepfile"
2961d54945dSmrg  stat=$?
2971d54945dSmrg  if test $stat -eq 0; then :
2981d54945dSmrg  else
2991d54945dSmrg    rm -f "$tmpdepfile"
3001d54945dSmrg    exit $stat
3011d54945dSmrg  fi
3021d54945dSmrg  rm -f "$depfile"
3031d54945dSmrg  # Each line is of the form `foo.o: dependent.h',
3041d54945dSmrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
3051d54945dSmrg  # Do two passes, one to just change these to
3061d54945dSmrg  # `$object: dependent.h' and one to simply `dependent.h:'.
3071d54945dSmrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
3081d54945dSmrg  # Some versions of the HPUX 10.20 sed can't process this invocation
3091d54945dSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
3101d54945dSmrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
3111d54945dSmrg    sed -e 's/$/ :/' >> "$depfile"
3121d54945dSmrg  rm -f "$tmpdepfile"
3131d54945dSmrg  ;;
3141d54945dSmrg
315ba85709eSmrghp2)
316ba85709eSmrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
317ba85709eSmrg  # compilers, which have integrated preprocessors.  The correct option
318ba85709eSmrg  # to use with these is +Maked; it writes dependencies to a file named
319ba85709eSmrg  # 'foo.d', which lands next to the object file, wherever that
320ba85709eSmrg  # happens to be.
321ba85709eSmrg  # Much of this is similar to the tru64 case; see comments there.
322ba85709eSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
323ba85709eSmrg  test "x$dir" = "x$object" && dir=
324ba85709eSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
325ba85709eSmrg  if test "$libtool" = yes; then
326ba85709eSmrg    tmpdepfile1=$dir$base.d
327ba85709eSmrg    tmpdepfile2=$dir.libs/$base.d
328ba85709eSmrg    "$@" -Wc,+Maked
329ba85709eSmrg  else
330ba85709eSmrg    tmpdepfile1=$dir$base.d
331ba85709eSmrg    tmpdepfile2=$dir$base.d
332ba85709eSmrg    "$@" +Maked
333ba85709eSmrg  fi
334ba85709eSmrg  stat=$?
335ba85709eSmrg  if test $stat -eq 0; then :
336ba85709eSmrg  else
337ba85709eSmrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
338ba85709eSmrg     exit $stat
339ba85709eSmrg  fi
340ba85709eSmrg
341ba85709eSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
342ba85709eSmrg  do
343ba85709eSmrg    test -f "$tmpdepfile" && break
344ba85709eSmrg  done
345ba85709eSmrg  if test -f "$tmpdepfile"; then
346ba85709eSmrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
347ba85709eSmrg    # Add `dependent.h:' lines.
348ec713c28Smrg    sed -ne '2,${
349ec713c28Smrg	       s/^ *//
350ec713c28Smrg	       s/ \\*$//
351ec713c28Smrg	       s/$/:/
352ec713c28Smrg	       p
353ec713c28Smrg	     }' "$tmpdepfile" >> "$depfile"
354ba85709eSmrg  else
355ba85709eSmrg    echo "#dummy" > "$depfile"
356ba85709eSmrg  fi
357ba85709eSmrg  rm -f "$tmpdepfile" "$tmpdepfile2"
358ba85709eSmrg  ;;
359ba85709eSmrg
3601d54945dSmrgtru64)
3611d54945dSmrg   # The Tru64 compiler uses -MD to generate dependencies as a side
3621d54945dSmrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
3631d54945dSmrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
3641d54945dSmrg   # dependencies in `foo.d' instead, so we check for that too.
3651d54945dSmrg   # Subdirectories are respected.
3661d54945dSmrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3671d54945dSmrg   test "x$dir" = "x$object" && dir=
3681d54945dSmrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3691d54945dSmrg
3701d54945dSmrg   if test "$libtool" = yes; then
3711d54945dSmrg      # With Tru64 cc, shared objects can also be used to make a
372ba85709eSmrg      # static library.  This mechanism is used in libtool 1.4 series to
3731d54945dSmrg      # handle both shared and static libraries in a single compilation.
3741d54945dSmrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
3751d54945dSmrg      #
3761d54945dSmrg      # With libtool 1.5 this exception was removed, and libtool now
3771d54945dSmrg      # generates 2 separate objects for the 2 libraries.  These two
378ba85709eSmrg      # compilations output dependencies in $dir.libs/$base.o.d and
3791d54945dSmrg      # in $dir$base.o.d.  We have to check for both files, because
3801d54945dSmrg      # one of the two compilations can be disabled.  We should prefer
3811d54945dSmrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
3821d54945dSmrg      # automatically cleaned when .libs/ is deleted, while ignoring
3831d54945dSmrg      # the former would cause a distcleancheck panic.
3841d54945dSmrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
3851d54945dSmrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
3861d54945dSmrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
3871d54945dSmrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
3881d54945dSmrg      "$@" -Wc,-MD
3891d54945dSmrg   else
3901d54945dSmrg      tmpdepfile1=$dir$base.o.d
3911d54945dSmrg      tmpdepfile2=$dir$base.d
3921d54945dSmrg      tmpdepfile3=$dir$base.d
3931d54945dSmrg      tmpdepfile4=$dir$base.d
3941d54945dSmrg      "$@" -MD
3951d54945dSmrg   fi
3961d54945dSmrg
3971d54945dSmrg   stat=$?
3981d54945dSmrg   if test $stat -eq 0; then :
3991d54945dSmrg   else
4001d54945dSmrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
4011d54945dSmrg      exit $stat
4021d54945dSmrg   fi
4031d54945dSmrg
4041d54945dSmrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
4051d54945dSmrg   do
4061d54945dSmrg     test -f "$tmpdepfile" && break
4071d54945dSmrg   done
4081d54945dSmrg   if test -f "$tmpdepfile"; then
4091d54945dSmrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
4101d54945dSmrg      # That's a tab and a space in the [].
4111d54945dSmrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
4121d54945dSmrg   else
4131d54945dSmrg      echo "#dummy" > "$depfile"
4141d54945dSmrg   fi
4151d54945dSmrg   rm -f "$tmpdepfile"
4161d54945dSmrg   ;;
4171d54945dSmrg
418d769e936Smrgmsvc7)
419d769e936Smrg  if test "$libtool" = yes; then
420d769e936Smrg    showIncludes=-Wc,-showIncludes
421d769e936Smrg  else
422d769e936Smrg    showIncludes=-showIncludes
423d769e936Smrg  fi
424d769e936Smrg  "$@" $showIncludes > "$tmpdepfile"
425d769e936Smrg  stat=$?
426d769e936Smrg  grep -v '^Note: including file: ' "$tmpdepfile"
427d769e936Smrg  if test "$stat" = 0; then :
428d769e936Smrg  else
429d769e936Smrg    rm -f "$tmpdepfile"
430d769e936Smrg    exit $stat
431d769e936Smrg  fi
432d769e936Smrg  rm -f "$depfile"
433d769e936Smrg  echo "$object : \\" > "$depfile"
434d769e936Smrg  # The first sed program below extracts the file names and escapes
435d769e936Smrg  # backslashes for cygpath.  The second sed program outputs the file
436d769e936Smrg  # name when reading, but also accumulates all include files in the
437d769e936Smrg  # hold buffer in order to output them again at the end.  This only
438d769e936Smrg  # works with sed implementations that can handle large buffers.
439d769e936Smrg  sed < "$tmpdepfile" -n '
440d769e936Smrg/^Note: including file:  *\(.*\)/ {
441d769e936Smrg  s//\1/
442d769e936Smrg  s/\\/\\\\/g
443d769e936Smrg  p
444d769e936Smrg}' | $cygpath_u | sort -u | sed -n '
445d769e936Smrgs/ /\\ /g
446d769e936Smrgs/\(.*\)/	\1 \\/p
447d769e936Smrgs/.\(.*\) \\/\1:/
448d769e936SmrgH
449d769e936Smrg$ {
450d769e936Smrg  s/.*/	/
451d769e936Smrg  G
452d769e936Smrg  p
453d769e936Smrg}' >> "$depfile"
454d769e936Smrg  rm -f "$tmpdepfile"
455d769e936Smrg  ;;
456d769e936Smrg
457d769e936Smrgmsvc7msys)
458d769e936Smrg  # This case exists only to let depend.m4 do its work.  It works by
459d769e936Smrg  # looking at the text of this script.  This case will never be run,
460d769e936Smrg  # since it is checked for above.
461d769e936Smrg  exit 1
462d769e936Smrg  ;;
463d769e936Smrg
4641d54945dSmrg#nosideeffect)
4651d54945dSmrg  # This comment above is used by automake to tell side-effect
4661d54945dSmrg  # dependency tracking mechanisms from slower ones.
4671d54945dSmrg
4681d54945dSmrgdashmstdout)
4691d54945dSmrg  # Important note: in order to support this mode, a compiler *must*
4701d54945dSmrg  # always write the preprocessed file to stdout, regardless of -o.
4711d54945dSmrg  "$@" || exit $?
4721d54945dSmrg
4731d54945dSmrg  # Remove the call to Libtool.
4741d54945dSmrg  if test "$libtool" = yes; then
475ec713c28Smrg    while test "X$1" != 'X--mode=compile'; do
4761d54945dSmrg      shift
4771d54945dSmrg    done
4781d54945dSmrg    shift
4791d54945dSmrg  fi
4801d54945dSmrg
4811d54945dSmrg  # Remove `-o $object'.
4821d54945dSmrg  IFS=" "
4831d54945dSmrg  for arg
4841d54945dSmrg  do
4851d54945dSmrg    case $arg in
4861d54945dSmrg    -o)
4871d54945dSmrg      shift
4881d54945dSmrg      ;;
4891d54945dSmrg    $object)
4901d54945dSmrg      shift
4911d54945dSmrg      ;;
4921d54945dSmrg    *)
4931d54945dSmrg      set fnord "$@" "$arg"
4941d54945dSmrg      shift # fnord
4951d54945dSmrg      shift # $arg
4961d54945dSmrg      ;;
4971d54945dSmrg    esac
4981d54945dSmrg  done
4991d54945dSmrg
5001d54945dSmrg  test -z "$dashmflag" && dashmflag=-M
5011d54945dSmrg  # Require at least two characters before searching for `:'
5021d54945dSmrg  # in the target name.  This is to cope with DOS-style filenames:
5031d54945dSmrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
5041d54945dSmrg  "$@" $dashmflag |
5051d54945dSmrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
5061d54945dSmrg  rm -f "$depfile"
5071d54945dSmrg  cat < "$tmpdepfile" > "$depfile"
5081d54945dSmrg  tr ' ' '
5091d54945dSmrg' < "$tmpdepfile" | \
5101d54945dSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
5111d54945dSmrg## correctly.  Breaking it into two sed invocations is a workaround.
5121d54945dSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
5131d54945dSmrg  rm -f "$tmpdepfile"
5141d54945dSmrg  ;;
5151d54945dSmrg
5161d54945dSmrgdashXmstdout)
5171d54945dSmrg  # This case only exists to satisfy depend.m4.  It is never actually
5181d54945dSmrg  # run, as this mode is specially recognized in the preamble.
5191d54945dSmrg  exit 1
5201d54945dSmrg  ;;
5211d54945dSmrg
5221d54945dSmrgmakedepend)
5231d54945dSmrg  "$@" || exit $?
5241d54945dSmrg  # Remove any Libtool call
5251d54945dSmrg  if test "$libtool" = yes; then
526ec713c28Smrg    while test "X$1" != 'X--mode=compile'; do
5271d54945dSmrg      shift
5281d54945dSmrg    done
5291d54945dSmrg    shift
5301d54945dSmrg  fi
5311d54945dSmrg  # X makedepend
5321d54945dSmrg  shift
533ec713c28Smrg  cleared=no eat=no
534ec713c28Smrg  for arg
535ec713c28Smrg  do
5361d54945dSmrg    case $cleared in
5371d54945dSmrg    no)
5381d54945dSmrg      set ""; shift
5391d54945dSmrg      cleared=yes ;;
5401d54945dSmrg    esac
541ec713c28Smrg    if test $eat = yes; then
542ec713c28Smrg      eat=no
543ec713c28Smrg      continue
544ec713c28Smrg    fi
5451d54945dSmrg    case "$arg" in
5461d54945dSmrg    -D*|-I*)
5471d54945dSmrg      set fnord "$@" "$arg"; shift ;;
5481d54945dSmrg    # Strip any option that makedepend may not understand.  Remove
5491d54945dSmrg    # the object too, otherwise makedepend will parse it as a source file.
550ec713c28Smrg    -arch)
551ec713c28Smrg      eat=yes ;;
5521d54945dSmrg    -*|$object)
5531d54945dSmrg      ;;
5541d54945dSmrg    *)
5551d54945dSmrg      set fnord "$@" "$arg"; shift ;;
5561d54945dSmrg    esac
5571d54945dSmrg  done
558ec713c28Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
5591d54945dSmrg  touch "$tmpdepfile"
5601d54945dSmrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
5611d54945dSmrg  rm -f "$depfile"
562d769e936Smrg  # makedepend may prepend the VPATH from the source file name to the object.
563d769e936Smrg  # No need to regex-escape $object, excess matching of '.' is harmless.
564d769e936Smrg  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
5651d54945dSmrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
5661d54945dSmrg' | \
5671d54945dSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
5681d54945dSmrg## correctly.  Breaking it into two sed invocations is a workaround.
5691d54945dSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
5701d54945dSmrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
5711d54945dSmrg  ;;
5721d54945dSmrg
5731d54945dSmrgcpp)
5741d54945dSmrg  # Important note: in order to support this mode, a compiler *must*
5751d54945dSmrg  # always write the preprocessed file to stdout.
5761d54945dSmrg  "$@" || exit $?
5771d54945dSmrg
5781d54945dSmrg  # Remove the call to Libtool.
5791d54945dSmrg  if test "$libtool" = yes; then
580ec713c28Smrg    while test "X$1" != 'X--mode=compile'; do
5811d54945dSmrg      shift
5821d54945dSmrg    done
5831d54945dSmrg    shift
5841d54945dSmrg  fi
5851d54945dSmrg
5861d54945dSmrg  # Remove `-o $object'.
5871d54945dSmrg  IFS=" "
5881d54945dSmrg  for arg
5891d54945dSmrg  do
5901d54945dSmrg    case $arg in
5911d54945dSmrg    -o)
5921d54945dSmrg      shift
5931d54945dSmrg      ;;
5941d54945dSmrg    $object)
5951d54945dSmrg      shift
5961d54945dSmrg      ;;
5971d54945dSmrg    *)
5981d54945dSmrg      set fnord "$@" "$arg"
5991d54945dSmrg      shift # fnord
6001d54945dSmrg      shift # $arg
6011d54945dSmrg      ;;
6021d54945dSmrg    esac
6031d54945dSmrg  done
6041d54945dSmrg
6051d54945dSmrg  "$@" -E |
6061d54945dSmrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
6071d54945dSmrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
6081d54945dSmrg    sed '$ s: \\$::' > "$tmpdepfile"
6091d54945dSmrg  rm -f "$depfile"
6101d54945dSmrg  echo "$object : \\" > "$depfile"
6111d54945dSmrg  cat < "$tmpdepfile" >> "$depfile"
6121d54945dSmrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
6131d54945dSmrg  rm -f "$tmpdepfile"
6141d54945dSmrg  ;;
6151d54945dSmrg
6161d54945dSmrgmsvisualcpp)
6171d54945dSmrg  # Important note: in order to support this mode, a compiler *must*
618ec713c28Smrg  # always write the preprocessed file to stdout.
6191d54945dSmrg  "$@" || exit $?
620ec713c28Smrg
621ec713c28Smrg  # Remove the call to Libtool.
622ec713c28Smrg  if test "$libtool" = yes; then
623ec713c28Smrg    while test "X$1" != 'X--mode=compile'; do
624ec713c28Smrg      shift
625ec713c28Smrg    done
626ec713c28Smrg    shift
627ec713c28Smrg  fi
628ec713c28Smrg
6291d54945dSmrg  IFS=" "
6301d54945dSmrg  for arg
6311d54945dSmrg  do
6321d54945dSmrg    case "$arg" in
633ec713c28Smrg    -o)
634ec713c28Smrg      shift
635ec713c28Smrg      ;;
636ec713c28Smrg    $object)
637ec713c28Smrg      shift
638ec713c28Smrg      ;;
6391d54945dSmrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
6401d54945dSmrg	set fnord "$@"
6411d54945dSmrg	shift
6421d54945dSmrg	shift
6431d54945dSmrg	;;
6441d54945dSmrg    *)
6451d54945dSmrg	set fnord "$@" "$arg"
6461d54945dSmrg	shift
6471d54945dSmrg	shift
6481d54945dSmrg	;;
6491d54945dSmrg    esac
6501d54945dSmrg  done
651ec713c28Smrg  "$@" -E 2>/dev/null |
652ec713c28Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
6531d54945dSmrg  rm -f "$depfile"
6541d54945dSmrg  echo "$object : \\" > "$depfile"
655ec713c28Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
6561d54945dSmrg  echo "	" >> "$depfile"
657ec713c28Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
6581d54945dSmrg  rm -f "$tmpdepfile"
6591d54945dSmrg  ;;
6601d54945dSmrg
661ec713c28Smrgmsvcmsys)
662ec713c28Smrg  # This case exists only to let depend.m4 do its work.  It works by
663ec713c28Smrg  # looking at the text of this script.  This case will never be run,
664ec713c28Smrg  # since it is checked for above.
665ec713c28Smrg  exit 1
666ec713c28Smrg  ;;
667ec713c28Smrg
6681d54945dSmrgnone)
6691d54945dSmrg  exec "$@"
6701d54945dSmrg  ;;
6711d54945dSmrg
6721d54945dSmrg*)
6731d54945dSmrg  echo "Unknown depmode $depmode" 1>&2
6741d54945dSmrg  exit 1
6751d54945dSmrg  ;;
6761d54945dSmrgesac
6771d54945dSmrg
6781d54945dSmrgexit 0
6791d54945dSmrg
6801d54945dSmrg# Local Variables:
6811d54945dSmrg# mode: shell-script
6821d54945dSmrg# sh-indentation: 2
6831d54945dSmrg# eval: (add-hook 'write-file-hooks 'time-stamp)
6841d54945dSmrg# time-stamp-start: "scriptversion="
6851d54945dSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
686ec713c28Smrg# time-stamp-time-zone: "UTC"
687ec713c28Smrg# time-stamp-end: "; # UTC"
6881d54945dSmrg# End:
689