depcomp revision ba85709e
11d54945dSmrg#! /bin/sh
21d54945dSmrg# depcomp - compile a program generating dependencies as side-effects
31d54945dSmrg
4ba85709eSmrgscriptversion=2006-10-15.18
51d54945dSmrg
6ba85709eSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software
7ba85709eSmrg# 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
201d54945dSmrg# along with this program; if not, write to the Free Software
211d54945dSmrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
221d54945dSmrg# 02110-1301, USA.
231d54945dSmrg
241d54945dSmrg# As a special exception to the GNU General Public License, if you
251d54945dSmrg# distribute this file as part of a program that contains a
261d54945dSmrg# configuration script generated by Autoconf, you may include it under
271d54945dSmrg# the same distribution terms that you use for the rest of that program.
281d54945dSmrg
291d54945dSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
301d54945dSmrg
311d54945dSmrgcase $1 in
321d54945dSmrg  '')
331d54945dSmrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
341d54945dSmrg     exit 1;
351d54945dSmrg     ;;
361d54945dSmrg  -h | --h*)
371d54945dSmrg    cat <<\EOF
381d54945dSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
391d54945dSmrg
401d54945dSmrgRun PROGRAMS ARGS to compile a file, generating dependencies
411d54945dSmrgas side-effects.
421d54945dSmrg
431d54945dSmrgEnvironment variables:
441d54945dSmrg  depmode     Dependency tracking mode.
451d54945dSmrg  source      Source file read by `PROGRAMS ARGS'.
461d54945dSmrg  object      Object file output by `PROGRAMS ARGS'.
471d54945dSmrg  DEPDIR      directory where to store dependencies.
481d54945dSmrg  depfile     Dependency file to output.
491d54945dSmrg  tmpdepfile  Temporary file to use when outputing dependencies.
501d54945dSmrg  libtool     Whether libtool is used (yes/no).
511d54945dSmrg
521d54945dSmrgReport bugs to <bug-automake@gnu.org>.
531d54945dSmrgEOF
541d54945dSmrg    exit $?
551d54945dSmrg    ;;
561d54945dSmrg  -v | --v*)
571d54945dSmrg    echo "depcomp $scriptversion"
581d54945dSmrg    exit $?
591d54945dSmrg    ;;
601d54945dSmrgesac
611d54945dSmrg
621d54945dSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
631d54945dSmrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
641d54945dSmrg  exit 1
651d54945dSmrgfi
661d54945dSmrg
671d54945dSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
681d54945dSmrgdepfile=${depfile-`echo "$object" |
691d54945dSmrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
701d54945dSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
711d54945dSmrg
721d54945dSmrgrm -f "$tmpdepfile"
731d54945dSmrg
741d54945dSmrg# Some modes work just like other modes, but use different flags.  We
751d54945dSmrg# parameterize here, but still list the modes in the big case below,
761d54945dSmrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
771d54945dSmrg# here, because this file can only contain one case statement.
781d54945dSmrgif test "$depmode" = hp; then
791d54945dSmrg  # HP compiler uses -M and no extra arg.
801d54945dSmrg  gccflag=-M
811d54945dSmrg  depmode=gcc
821d54945dSmrgfi
831d54945dSmrg
841d54945dSmrgif test "$depmode" = dashXmstdout; then
851d54945dSmrg   # This is just like dashmstdout with a different argument.
861d54945dSmrg   dashmflag=-xM
871d54945dSmrg   depmode=dashmstdout
881d54945dSmrgfi
891d54945dSmrg
901d54945dSmrgcase "$depmode" in
911d54945dSmrggcc3)
921d54945dSmrg## gcc 3 implements dependency tracking that does exactly what
931d54945dSmrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
941d54945dSmrg## it if -MD -MP comes after the -MF stuff.  Hmm.
95ba85709eSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
96ba85709eSmrg## the command line argument order; so add the flags where they
97ba85709eSmrg## appear in depend2.am.  Note that the slowdown incurred here
98ba85709eSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
99ba85709eSmrg  for arg
100ba85709eSmrg  do
101ba85709eSmrg    case $arg in
102ba85709eSmrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
103ba85709eSmrg    *)  set fnord "$@" "$arg" ;;
104ba85709eSmrg    esac
105ba85709eSmrg    shift # fnord
106ba85709eSmrg    shift # $arg
107ba85709eSmrg  done
108ba85709eSmrg  "$@"
1091d54945dSmrg  stat=$?
1101d54945dSmrg  if test $stat -eq 0; then :
1111d54945dSmrg  else
1121d54945dSmrg    rm -f "$tmpdepfile"
1131d54945dSmrg    exit $stat
1141d54945dSmrg  fi
1151d54945dSmrg  mv "$tmpdepfile" "$depfile"
1161d54945dSmrg  ;;
1171d54945dSmrg
1181d54945dSmrggcc)
1191d54945dSmrg## There are various ways to get dependency output from gcc.  Here's
1201d54945dSmrg## why we pick this rather obscure method:
1211d54945dSmrg## - Don't want to use -MD because we'd like the dependencies to end
1221d54945dSmrg##   up in a subdir.  Having to rename by hand is ugly.
1231d54945dSmrg##   (We might end up doing this anyway to support other compilers.)
1241d54945dSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
1251d54945dSmrg##   -MM, not -M (despite what the docs say).
1261d54945dSmrg## - Using -M directly means running the compiler twice (even worse
1271d54945dSmrg##   than renaming).
1281d54945dSmrg  if test -z "$gccflag"; then
1291d54945dSmrg    gccflag=-MD,
1301d54945dSmrg  fi
1311d54945dSmrg  "$@" -Wp,"$gccflag$tmpdepfile"
1321d54945dSmrg  stat=$?
1331d54945dSmrg  if test $stat -eq 0; then :
1341d54945dSmrg  else
1351d54945dSmrg    rm -f "$tmpdepfile"
1361d54945dSmrg    exit $stat
1371d54945dSmrg  fi
1381d54945dSmrg  rm -f "$depfile"
1391d54945dSmrg  echo "$object : \\" > "$depfile"
1401d54945dSmrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
1411d54945dSmrg## The second -e expression handles DOS-style file names with drive letters.
1421d54945dSmrg  sed -e 's/^[^:]*: / /' \
1431d54945dSmrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
1441d54945dSmrg## This next piece of magic avoids the `deleted header file' problem.
1451d54945dSmrg## The problem is that when a header file which appears in a .P file
1461d54945dSmrg## is deleted, the dependency causes make to die (because there is
1471d54945dSmrg## typically no way to rebuild the header).  We avoid this by adding
1481d54945dSmrg## dummy dependencies for each header file.  Too bad gcc doesn't do
1491d54945dSmrg## this for us directly.
1501d54945dSmrg  tr ' ' '
1511d54945dSmrg' < "$tmpdepfile" |
1521d54945dSmrg## Some versions of gcc put a space before the `:'.  On the theory
1531d54945dSmrg## that the space means something, we add a space to the output as
1541d54945dSmrg## well.
1551d54945dSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
1561d54945dSmrg## correctly.  Breaking it into two sed invocations is a workaround.
1571d54945dSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
1581d54945dSmrg  rm -f "$tmpdepfile"
1591d54945dSmrg  ;;
1601d54945dSmrg
1611d54945dSmrghp)
1621d54945dSmrg  # This case exists only to let depend.m4 do its work.  It works by
1631d54945dSmrg  # looking at the text of this script.  This case will never be run,
1641d54945dSmrg  # since it is checked for above.
1651d54945dSmrg  exit 1
1661d54945dSmrg  ;;
1671d54945dSmrg
1681d54945dSmrgsgi)
1691d54945dSmrg  if test "$libtool" = yes; then
1701d54945dSmrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
1711d54945dSmrg  else
1721d54945dSmrg    "$@" -MDupdate "$tmpdepfile"
1731d54945dSmrg  fi
1741d54945dSmrg  stat=$?
1751d54945dSmrg  if test $stat -eq 0; then :
1761d54945dSmrg  else
1771d54945dSmrg    rm -f "$tmpdepfile"
1781d54945dSmrg    exit $stat
1791d54945dSmrg  fi
1801d54945dSmrg  rm -f "$depfile"
1811d54945dSmrg
1821d54945dSmrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
1831d54945dSmrg    echo "$object : \\" > "$depfile"
1841d54945dSmrg
1851d54945dSmrg    # Clip off the initial element (the dependent).  Don't try to be
1861d54945dSmrg    # clever and replace this with sed code, as IRIX sed won't handle
1871d54945dSmrg    # lines with more than a fixed number of characters (4096 in
1881d54945dSmrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
1891d54945dSmrg    # the IRIX cc adds comments like `#:fec' to the end of the
1901d54945dSmrg    # dependency line.
1911d54945dSmrg    tr ' ' '
1921d54945dSmrg' < "$tmpdepfile" \
1931d54945dSmrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
1941d54945dSmrg    tr '
1951d54945dSmrg' ' ' >> $depfile
1961d54945dSmrg    echo >> $depfile
1971d54945dSmrg
1981d54945dSmrg    # The second pass generates a dummy entry for each header file.
1991d54945dSmrg    tr ' ' '
2001d54945dSmrg' < "$tmpdepfile" \
2011d54945dSmrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
2021d54945dSmrg   >> $depfile
2031d54945dSmrg  else
2041d54945dSmrg    # The sourcefile does not contain any dependencies, so just
2051d54945dSmrg    # store a dummy comment line, to avoid errors with the Makefile
2061d54945dSmrg    # "include basename.Plo" scheme.
2071d54945dSmrg    echo "#dummy" > "$depfile"
2081d54945dSmrg  fi
2091d54945dSmrg  rm -f "$tmpdepfile"
2101d54945dSmrg  ;;
2111d54945dSmrg
2121d54945dSmrgaix)
2131d54945dSmrg  # The C for AIX Compiler uses -M and outputs the dependencies
2141d54945dSmrg  # in a .u file.  In older versions, this file always lives in the
2151d54945dSmrg  # current directory.  Also, the AIX compiler puts `$object:' at the
2161d54945dSmrg  # start of each line; $object doesn't have directory information.
2171d54945dSmrg  # Version 6 uses the directory in both cases.
2181d54945dSmrg  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
2191d54945dSmrg  tmpdepfile="$stripped.u"
2201d54945dSmrg  if test "$libtool" = yes; then
2211d54945dSmrg    "$@" -Wc,-M
2221d54945dSmrg  else
2231d54945dSmrg    "$@" -M
2241d54945dSmrg  fi
2251d54945dSmrg  stat=$?
2261d54945dSmrg
2271d54945dSmrg  if test -f "$tmpdepfile"; then :
2281d54945dSmrg  else
2291d54945dSmrg    stripped=`echo "$stripped" | sed 's,^.*/,,'`
2301d54945dSmrg    tmpdepfile="$stripped.u"
2311d54945dSmrg  fi
2321d54945dSmrg
2331d54945dSmrg  if test $stat -eq 0; then :
2341d54945dSmrg  else
2351d54945dSmrg    rm -f "$tmpdepfile"
2361d54945dSmrg    exit $stat
2371d54945dSmrg  fi
2381d54945dSmrg
2391d54945dSmrg  if test -f "$tmpdepfile"; then
2401d54945dSmrg    outname="$stripped.o"
2411d54945dSmrg    # Each line is of the form `foo.o: dependent.h'.
2421d54945dSmrg    # Do two passes, one to just change these to
2431d54945dSmrg    # `$object: dependent.h' and one to simply `dependent.h:'.
2441d54945dSmrg    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
2451d54945dSmrg    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
2461d54945dSmrg  else
2471d54945dSmrg    # The sourcefile does not contain any dependencies, so just
2481d54945dSmrg    # store a dummy comment line, to avoid errors with the Makefile
2491d54945dSmrg    # "include basename.Plo" scheme.
2501d54945dSmrg    echo "#dummy" > "$depfile"
2511d54945dSmrg  fi
2521d54945dSmrg  rm -f "$tmpdepfile"
2531d54945dSmrg  ;;
2541d54945dSmrg
2551d54945dSmrgicc)
2561d54945dSmrg  # Intel's C compiler understands `-MD -MF file'.  However on
2571d54945dSmrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
2581d54945dSmrg  # ICC 7.0 will fill foo.d with something like
2591d54945dSmrg  #    foo.o: sub/foo.c
2601d54945dSmrg  #    foo.o: sub/foo.h
2611d54945dSmrg  # which is wrong.  We want:
2621d54945dSmrg  #    sub/foo.o: sub/foo.c
2631d54945dSmrg  #    sub/foo.o: sub/foo.h
2641d54945dSmrg  #    sub/foo.c:
2651d54945dSmrg  #    sub/foo.h:
2661d54945dSmrg  # ICC 7.1 will output
2671d54945dSmrg  #    foo.o: sub/foo.c sub/foo.h
2681d54945dSmrg  # and will wrap long lines using \ :
2691d54945dSmrg  #    foo.o: sub/foo.c ... \
2701d54945dSmrg  #     sub/foo.h ... \
2711d54945dSmrg  #     ...
2721d54945dSmrg
2731d54945dSmrg  "$@" -MD -MF "$tmpdepfile"
2741d54945dSmrg  stat=$?
2751d54945dSmrg  if test $stat -eq 0; then :
2761d54945dSmrg  else
2771d54945dSmrg    rm -f "$tmpdepfile"
2781d54945dSmrg    exit $stat
2791d54945dSmrg  fi
2801d54945dSmrg  rm -f "$depfile"
2811d54945dSmrg  # Each line is of the form `foo.o: dependent.h',
2821d54945dSmrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
2831d54945dSmrg  # Do two passes, one to just change these to
2841d54945dSmrg  # `$object: dependent.h' and one to simply `dependent.h:'.
2851d54945dSmrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
2861d54945dSmrg  # Some versions of the HPUX 10.20 sed can't process this invocation
2871d54945dSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
2881d54945dSmrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
2891d54945dSmrg    sed -e 's/$/ :/' >> "$depfile"
2901d54945dSmrg  rm -f "$tmpdepfile"
2911d54945dSmrg  ;;
2921d54945dSmrg
293ba85709eSmrghp2)
294ba85709eSmrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
295ba85709eSmrg  # compilers, which have integrated preprocessors.  The correct option
296ba85709eSmrg  # to use with these is +Maked; it writes dependencies to a file named
297ba85709eSmrg  # 'foo.d', which lands next to the object file, wherever that
298ba85709eSmrg  # happens to be.
299ba85709eSmrg  # Much of this is similar to the tru64 case; see comments there.
300ba85709eSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
301ba85709eSmrg  test "x$dir" = "x$object" && dir=
302ba85709eSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
303ba85709eSmrg  if test "$libtool" = yes; then
304ba85709eSmrg    tmpdepfile1=$dir$base.d
305ba85709eSmrg    tmpdepfile2=$dir.libs/$base.d
306ba85709eSmrg    "$@" -Wc,+Maked
307ba85709eSmrg  else
308ba85709eSmrg    tmpdepfile1=$dir$base.d
309ba85709eSmrg    tmpdepfile2=$dir$base.d
310ba85709eSmrg    "$@" +Maked
311ba85709eSmrg  fi
312ba85709eSmrg  stat=$?
313ba85709eSmrg  if test $stat -eq 0; then :
314ba85709eSmrg  else
315ba85709eSmrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
316ba85709eSmrg     exit $stat
317ba85709eSmrg  fi
318ba85709eSmrg
319ba85709eSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
320ba85709eSmrg  do
321ba85709eSmrg    test -f "$tmpdepfile" && break
322ba85709eSmrg  done
323ba85709eSmrg  if test -f "$tmpdepfile"; then
324ba85709eSmrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
325ba85709eSmrg    # Add `dependent.h:' lines.
326ba85709eSmrg    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
327ba85709eSmrg  else
328ba85709eSmrg    echo "#dummy" > "$depfile"
329ba85709eSmrg  fi
330ba85709eSmrg  rm -f "$tmpdepfile" "$tmpdepfile2"
331ba85709eSmrg  ;;
332ba85709eSmrg
3331d54945dSmrgtru64)
3341d54945dSmrg   # The Tru64 compiler uses -MD to generate dependencies as a side
3351d54945dSmrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
3361d54945dSmrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
3371d54945dSmrg   # dependencies in `foo.d' instead, so we check for that too.
3381d54945dSmrg   # Subdirectories are respected.
3391d54945dSmrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3401d54945dSmrg   test "x$dir" = "x$object" && dir=
3411d54945dSmrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3421d54945dSmrg
3431d54945dSmrg   if test "$libtool" = yes; then
3441d54945dSmrg      # With Tru64 cc, shared objects can also be used to make a
345ba85709eSmrg      # static library.  This mechanism is used in libtool 1.4 series to
3461d54945dSmrg      # handle both shared and static libraries in a single compilation.
3471d54945dSmrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
3481d54945dSmrg      #
3491d54945dSmrg      # With libtool 1.5 this exception was removed, and libtool now
3501d54945dSmrg      # generates 2 separate objects for the 2 libraries.  These two
351ba85709eSmrg      # compilations output dependencies in $dir.libs/$base.o.d and
3521d54945dSmrg      # in $dir$base.o.d.  We have to check for both files, because
3531d54945dSmrg      # one of the two compilations can be disabled.  We should prefer
3541d54945dSmrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
3551d54945dSmrg      # automatically cleaned when .libs/ is deleted, while ignoring
3561d54945dSmrg      # the former would cause a distcleancheck panic.
3571d54945dSmrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
3581d54945dSmrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
3591d54945dSmrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
3601d54945dSmrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
3611d54945dSmrg      "$@" -Wc,-MD
3621d54945dSmrg   else
3631d54945dSmrg      tmpdepfile1=$dir$base.o.d
3641d54945dSmrg      tmpdepfile2=$dir$base.d
3651d54945dSmrg      tmpdepfile3=$dir$base.d
3661d54945dSmrg      tmpdepfile4=$dir$base.d
3671d54945dSmrg      "$@" -MD
3681d54945dSmrg   fi
3691d54945dSmrg
3701d54945dSmrg   stat=$?
3711d54945dSmrg   if test $stat -eq 0; then :
3721d54945dSmrg   else
3731d54945dSmrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3741d54945dSmrg      exit $stat
3751d54945dSmrg   fi
3761d54945dSmrg
3771d54945dSmrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3781d54945dSmrg   do
3791d54945dSmrg     test -f "$tmpdepfile" && break
3801d54945dSmrg   done
3811d54945dSmrg   if test -f "$tmpdepfile"; then
3821d54945dSmrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
3831d54945dSmrg      # That's a tab and a space in the [].
3841d54945dSmrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
3851d54945dSmrg   else
3861d54945dSmrg      echo "#dummy" > "$depfile"
3871d54945dSmrg   fi
3881d54945dSmrg   rm -f "$tmpdepfile"
3891d54945dSmrg   ;;
3901d54945dSmrg
3911d54945dSmrg#nosideeffect)
3921d54945dSmrg  # This comment above is used by automake to tell side-effect
3931d54945dSmrg  # dependency tracking mechanisms from slower ones.
3941d54945dSmrg
3951d54945dSmrgdashmstdout)
3961d54945dSmrg  # Important note: in order to support this mode, a compiler *must*
3971d54945dSmrg  # always write the preprocessed file to stdout, regardless of -o.
3981d54945dSmrg  "$@" || exit $?
3991d54945dSmrg
4001d54945dSmrg  # Remove the call to Libtool.
4011d54945dSmrg  if test "$libtool" = yes; then
4021d54945dSmrg    while test $1 != '--mode=compile'; do
4031d54945dSmrg      shift
4041d54945dSmrg    done
4051d54945dSmrg    shift
4061d54945dSmrg  fi
4071d54945dSmrg
4081d54945dSmrg  # Remove `-o $object'.
4091d54945dSmrg  IFS=" "
4101d54945dSmrg  for arg
4111d54945dSmrg  do
4121d54945dSmrg    case $arg in
4131d54945dSmrg    -o)
4141d54945dSmrg      shift
4151d54945dSmrg      ;;
4161d54945dSmrg    $object)
4171d54945dSmrg      shift
4181d54945dSmrg      ;;
4191d54945dSmrg    *)
4201d54945dSmrg      set fnord "$@" "$arg"
4211d54945dSmrg      shift # fnord
4221d54945dSmrg      shift # $arg
4231d54945dSmrg      ;;
4241d54945dSmrg    esac
4251d54945dSmrg  done
4261d54945dSmrg
4271d54945dSmrg  test -z "$dashmflag" && dashmflag=-M
4281d54945dSmrg  # Require at least two characters before searching for `:'
4291d54945dSmrg  # in the target name.  This is to cope with DOS-style filenames:
4301d54945dSmrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
4311d54945dSmrg  "$@" $dashmflag |
4321d54945dSmrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
4331d54945dSmrg  rm -f "$depfile"
4341d54945dSmrg  cat < "$tmpdepfile" > "$depfile"
4351d54945dSmrg  tr ' ' '
4361d54945dSmrg' < "$tmpdepfile" | \
4371d54945dSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
4381d54945dSmrg## correctly.  Breaking it into two sed invocations is a workaround.
4391d54945dSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
4401d54945dSmrg  rm -f "$tmpdepfile"
4411d54945dSmrg  ;;
4421d54945dSmrg
4431d54945dSmrgdashXmstdout)
4441d54945dSmrg  # This case only exists to satisfy depend.m4.  It is never actually
4451d54945dSmrg  # run, as this mode is specially recognized in the preamble.
4461d54945dSmrg  exit 1
4471d54945dSmrg  ;;
4481d54945dSmrg
4491d54945dSmrgmakedepend)
4501d54945dSmrg  "$@" || exit $?
4511d54945dSmrg  # Remove any Libtool call
4521d54945dSmrg  if test "$libtool" = yes; then
4531d54945dSmrg    while test $1 != '--mode=compile'; do
4541d54945dSmrg      shift
4551d54945dSmrg    done
4561d54945dSmrg    shift
4571d54945dSmrg  fi
4581d54945dSmrg  # X makedepend
4591d54945dSmrg  shift
4601d54945dSmrg  cleared=no
4611d54945dSmrg  for arg in "$@"; do
4621d54945dSmrg    case $cleared in
4631d54945dSmrg    no)
4641d54945dSmrg      set ""; shift
4651d54945dSmrg      cleared=yes ;;
4661d54945dSmrg    esac
4671d54945dSmrg    case "$arg" in
4681d54945dSmrg    -D*|-I*)
4691d54945dSmrg      set fnord "$@" "$arg"; shift ;;
4701d54945dSmrg    # Strip any option that makedepend may not understand.  Remove
4711d54945dSmrg    # the object too, otherwise makedepend will parse it as a source file.
4721d54945dSmrg    -*|$object)
4731d54945dSmrg      ;;
4741d54945dSmrg    *)
4751d54945dSmrg      set fnord "$@" "$arg"; shift ;;
4761d54945dSmrg    esac
4771d54945dSmrg  done
4781d54945dSmrg  obj_suffix="`echo $object | sed 's/^.*\././'`"
4791d54945dSmrg  touch "$tmpdepfile"
4801d54945dSmrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
4811d54945dSmrg  rm -f "$depfile"
4821d54945dSmrg  cat < "$tmpdepfile" > "$depfile"
4831d54945dSmrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
4841d54945dSmrg' | \
4851d54945dSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
4861d54945dSmrg## correctly.  Breaking it into two sed invocations is a workaround.
4871d54945dSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
4881d54945dSmrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
4891d54945dSmrg  ;;
4901d54945dSmrg
4911d54945dSmrgcpp)
4921d54945dSmrg  # Important note: in order to support this mode, a compiler *must*
4931d54945dSmrg  # always write the preprocessed file to stdout.
4941d54945dSmrg  "$@" || exit $?
4951d54945dSmrg
4961d54945dSmrg  # Remove the call to Libtool.
4971d54945dSmrg  if test "$libtool" = yes; then
4981d54945dSmrg    while test $1 != '--mode=compile'; do
4991d54945dSmrg      shift
5001d54945dSmrg    done
5011d54945dSmrg    shift
5021d54945dSmrg  fi
5031d54945dSmrg
5041d54945dSmrg  # Remove `-o $object'.
5051d54945dSmrg  IFS=" "
5061d54945dSmrg  for arg
5071d54945dSmrg  do
5081d54945dSmrg    case $arg in
5091d54945dSmrg    -o)
5101d54945dSmrg      shift
5111d54945dSmrg      ;;
5121d54945dSmrg    $object)
5131d54945dSmrg      shift
5141d54945dSmrg      ;;
5151d54945dSmrg    *)
5161d54945dSmrg      set fnord "$@" "$arg"
5171d54945dSmrg      shift # fnord
5181d54945dSmrg      shift # $arg
5191d54945dSmrg      ;;
5201d54945dSmrg    esac
5211d54945dSmrg  done
5221d54945dSmrg
5231d54945dSmrg  "$@" -E |
5241d54945dSmrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
5251d54945dSmrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
5261d54945dSmrg    sed '$ s: \\$::' > "$tmpdepfile"
5271d54945dSmrg  rm -f "$depfile"
5281d54945dSmrg  echo "$object : \\" > "$depfile"
5291d54945dSmrg  cat < "$tmpdepfile" >> "$depfile"
5301d54945dSmrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
5311d54945dSmrg  rm -f "$tmpdepfile"
5321d54945dSmrg  ;;
5331d54945dSmrg
5341d54945dSmrgmsvisualcpp)
5351d54945dSmrg  # Important note: in order to support this mode, a compiler *must*
5361d54945dSmrg  # always write the preprocessed file to stdout, regardless of -o,
5371d54945dSmrg  # because we must use -o when running libtool.
5381d54945dSmrg  "$@" || exit $?
5391d54945dSmrg  IFS=" "
5401d54945dSmrg  for arg
5411d54945dSmrg  do
5421d54945dSmrg    case "$arg" in
5431d54945dSmrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
5441d54945dSmrg	set fnord "$@"
5451d54945dSmrg	shift
5461d54945dSmrg	shift
5471d54945dSmrg	;;
5481d54945dSmrg    *)
5491d54945dSmrg	set fnord "$@" "$arg"
5501d54945dSmrg	shift
5511d54945dSmrg	shift
5521d54945dSmrg	;;
5531d54945dSmrg    esac
5541d54945dSmrg  done
5551d54945dSmrg  "$@" -E |
5561d54945dSmrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
5571d54945dSmrg  rm -f "$depfile"
5581d54945dSmrg  echo "$object : \\" > "$depfile"
5591d54945dSmrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
5601d54945dSmrg  echo "	" >> "$depfile"
5611d54945dSmrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
5621d54945dSmrg  rm -f "$tmpdepfile"
5631d54945dSmrg  ;;
5641d54945dSmrg
5651d54945dSmrgnone)
5661d54945dSmrg  exec "$@"
5671d54945dSmrg  ;;
5681d54945dSmrg
5691d54945dSmrg*)
5701d54945dSmrg  echo "Unknown depmode $depmode" 1>&2
5711d54945dSmrg  exit 1
5721d54945dSmrg  ;;
5731d54945dSmrgesac
5741d54945dSmrg
5751d54945dSmrgexit 0
5761d54945dSmrg
5771d54945dSmrg# Local Variables:
5781d54945dSmrg# mode: shell-script
5791d54945dSmrg# sh-indentation: 2
5801d54945dSmrg# eval: (add-hook 'write-file-hooks 'time-stamp)
5811d54945dSmrg# time-stamp-start: "scriptversion="
5821d54945dSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
5831d54945dSmrg# time-stamp-end: "$"
5841d54945dSmrg# End:
585