depcomp revision 1a650d1e
18108eb18Smrg#! /bin/sh
28108eb18Smrg# depcomp - compile a program generating dependencies as side-effects
31a650d1eSmrg
41a650d1eSmrgscriptversion=2009-04-28.21; # UTC
51a650d1eSmrg
61a650d1eSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
71a650d1eSmrg# Software Foundation, Inc.
88108eb18Smrg
98108eb18Smrg# This program is free software; you can redistribute it and/or modify
108108eb18Smrg# it under the terms of the GNU General Public License as published by
118108eb18Smrg# the Free Software Foundation; either version 2, or (at your option)
128108eb18Smrg# any later version.
138108eb18Smrg
148108eb18Smrg# This program is distributed in the hope that it will be useful,
158108eb18Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
168108eb18Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
178108eb18Smrg# GNU General Public License for more details.
188108eb18Smrg
198108eb18Smrg# You should have received a copy of the GNU General Public License
201a650d1eSmrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
218108eb18Smrg
228108eb18Smrg# As a special exception to the GNU General Public License, if you
238108eb18Smrg# distribute this file as part of a program that contains a
248108eb18Smrg# configuration script generated by Autoconf, you may include it under
258108eb18Smrg# the same distribution terms that you use for the rest of that program.
268108eb18Smrg
278108eb18Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
288108eb18Smrg
291a650d1eSmrgcase $1 in
301a650d1eSmrg  '')
311a650d1eSmrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
321a650d1eSmrg     exit 1;
331a650d1eSmrg     ;;
341a650d1eSmrg  -h | --h*)
351a650d1eSmrg    cat <<\EOF
361a650d1eSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
371a650d1eSmrg
381a650d1eSmrgRun PROGRAMS ARGS to compile a file, generating dependencies
391a650d1eSmrgas side-effects.
401a650d1eSmrg
411a650d1eSmrgEnvironment variables:
421a650d1eSmrg  depmode     Dependency tracking mode.
431a650d1eSmrg  source      Source file read by `PROGRAMS ARGS'.
441a650d1eSmrg  object      Object file output by `PROGRAMS ARGS'.
451a650d1eSmrg  DEPDIR      directory where to store dependencies.
461a650d1eSmrg  depfile     Dependency file to output.
471a650d1eSmrg  tmpdepfile  Temporary file to use when outputing dependencies.
481a650d1eSmrg  libtool     Whether libtool is used (yes/no).
491a650d1eSmrg
501a650d1eSmrgReport bugs to <bug-automake@gnu.org>.
511a650d1eSmrgEOF
521a650d1eSmrg    exit $?
531a650d1eSmrg    ;;
541a650d1eSmrg  -v | --v*)
551a650d1eSmrg    echo "depcomp $scriptversion"
561a650d1eSmrg    exit $?
571a650d1eSmrg    ;;
581a650d1eSmrgesac
591a650d1eSmrg
608108eb18Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
618108eb18Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
628108eb18Smrg  exit 1
638108eb18Smrgfi
648108eb18Smrg
651a650d1eSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
661a650d1eSmrgdepfile=${depfile-`echo "$object" |
671a650d1eSmrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
688108eb18Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
698108eb18Smrg
708108eb18Smrgrm -f "$tmpdepfile"
718108eb18Smrg
728108eb18Smrg# Some modes work just like other modes, but use different flags.  We
738108eb18Smrg# parameterize here, but still list the modes in the big case below,
748108eb18Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
758108eb18Smrg# here, because this file can only contain one case statement.
768108eb18Smrgif test "$depmode" = hp; then
778108eb18Smrg  # HP compiler uses -M and no extra arg.
788108eb18Smrg  gccflag=-M
798108eb18Smrg  depmode=gcc
808108eb18Smrgfi
818108eb18Smrg
828108eb18Smrgif test "$depmode" = dashXmstdout; then
838108eb18Smrg   # This is just like dashmstdout with a different argument.
848108eb18Smrg   dashmflag=-xM
858108eb18Smrg   depmode=dashmstdout
868108eb18Smrgfi
878108eb18Smrg
881a650d1eSmrgcygpath_u="cygpath -u -f -"
891a650d1eSmrgif test "$depmode" = msvcmsys; then
901a650d1eSmrg   # This is just like msvisualcpp but w/o cygpath translation.
911a650d1eSmrg   # Just convert the backslash-escaped backslashes to single forward
921a650d1eSmrg   # slashes to satisfy depend.m4
931a650d1eSmrg   cygpath_u="sed s,\\\\\\\\,/,g"
941a650d1eSmrg   depmode=msvisualcpp
951a650d1eSmrgfi
961a650d1eSmrg
978108eb18Smrgcase "$depmode" in
988108eb18Smrggcc3)
998108eb18Smrg## gcc 3 implements dependency tracking that does exactly what
1008108eb18Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
1018108eb18Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
1021a650d1eSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
1031a650d1eSmrg## the command line argument order; so add the flags where they
1041a650d1eSmrg## appear in depend2.am.  Note that the slowdown incurred here
1051a650d1eSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
1061a650d1eSmrg  for arg
1071a650d1eSmrg  do
1081a650d1eSmrg    case $arg in
1091a650d1eSmrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
1101a650d1eSmrg    *)  set fnord "$@" "$arg" ;;
1111a650d1eSmrg    esac
1121a650d1eSmrg    shift # fnord
1131a650d1eSmrg    shift # $arg
1141a650d1eSmrg  done
1151a650d1eSmrg  "$@"
1168108eb18Smrg  stat=$?
1178108eb18Smrg  if test $stat -eq 0; then :
1188108eb18Smrg  else
1198108eb18Smrg    rm -f "$tmpdepfile"
1208108eb18Smrg    exit $stat
1218108eb18Smrg  fi
1228108eb18Smrg  mv "$tmpdepfile" "$depfile"
1238108eb18Smrg  ;;
1248108eb18Smrg
1258108eb18Smrggcc)
1268108eb18Smrg## There are various ways to get dependency output from gcc.  Here's
1278108eb18Smrg## why we pick this rather obscure method:
1288108eb18Smrg## - Don't want to use -MD because we'd like the dependencies to end
1298108eb18Smrg##   up in a subdir.  Having to rename by hand is ugly.
1308108eb18Smrg##   (We might end up doing this anyway to support other compilers.)
1318108eb18Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
1328108eb18Smrg##   -MM, not -M (despite what the docs say).
1338108eb18Smrg## - Using -M directly means running the compiler twice (even worse
1348108eb18Smrg##   than renaming).
1358108eb18Smrg  if test -z "$gccflag"; then
1368108eb18Smrg    gccflag=-MD,
1378108eb18Smrg  fi
1388108eb18Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
1398108eb18Smrg  stat=$?
1408108eb18Smrg  if test $stat -eq 0; then :
1418108eb18Smrg  else
1428108eb18Smrg    rm -f "$tmpdepfile"
1438108eb18Smrg    exit $stat
1448108eb18Smrg  fi
1458108eb18Smrg  rm -f "$depfile"
1468108eb18Smrg  echo "$object : \\" > "$depfile"
1478108eb18Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
1488108eb18Smrg## The second -e expression handles DOS-style file names with drive letters.
1498108eb18Smrg  sed -e 's/^[^:]*: / /' \
1508108eb18Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
1518108eb18Smrg## This next piece of magic avoids the `deleted header file' problem.
1528108eb18Smrg## The problem is that when a header file which appears in a .P file
1538108eb18Smrg## is deleted, the dependency causes make to die (because there is
1548108eb18Smrg## typically no way to rebuild the header).  We avoid this by adding
1558108eb18Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
1568108eb18Smrg## this for us directly.
1578108eb18Smrg  tr ' ' '
1588108eb18Smrg' < "$tmpdepfile" |
1598108eb18Smrg## Some versions of gcc put a space before the `:'.  On the theory
1608108eb18Smrg## that the space means something, we add a space to the output as
1618108eb18Smrg## well.
1628108eb18Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
1638108eb18Smrg## correctly.  Breaking it into two sed invocations is a workaround.
1648108eb18Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
1658108eb18Smrg  rm -f "$tmpdepfile"
1668108eb18Smrg  ;;
1678108eb18Smrg
1688108eb18Smrghp)
1698108eb18Smrg  # This case exists only to let depend.m4 do its work.  It works by
1708108eb18Smrg  # looking at the text of this script.  This case will never be run,
1718108eb18Smrg  # since it is checked for above.
1728108eb18Smrg  exit 1
1738108eb18Smrg  ;;
1748108eb18Smrg
1758108eb18Smrgsgi)
1768108eb18Smrg  if test "$libtool" = yes; then
1778108eb18Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
1788108eb18Smrg  else
1798108eb18Smrg    "$@" -MDupdate "$tmpdepfile"
1808108eb18Smrg  fi
1818108eb18Smrg  stat=$?
1828108eb18Smrg  if test $stat -eq 0; then :
1838108eb18Smrg  else
1848108eb18Smrg    rm -f "$tmpdepfile"
1858108eb18Smrg    exit $stat
1868108eb18Smrg  fi
1878108eb18Smrg  rm -f "$depfile"
1888108eb18Smrg
1898108eb18Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
1908108eb18Smrg    echo "$object : \\" > "$depfile"
1918108eb18Smrg
1928108eb18Smrg    # Clip off the initial element (the dependent).  Don't try to be
1938108eb18Smrg    # clever and replace this with sed code, as IRIX sed won't handle
1948108eb18Smrg    # lines with more than a fixed number of characters (4096 in
1958108eb18Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
1968108eb18Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
1978108eb18Smrg    # dependency line.
1988108eb18Smrg    tr ' ' '
1998108eb18Smrg' < "$tmpdepfile" \
2008108eb18Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
2018108eb18Smrg    tr '
2021a650d1eSmrg' ' ' >> "$depfile"
2031a650d1eSmrg    echo >> "$depfile"
2048108eb18Smrg
2058108eb18Smrg    # The second pass generates a dummy entry for each header file.
2068108eb18Smrg    tr ' ' '
2078108eb18Smrg' < "$tmpdepfile" \
2088108eb18Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
2091a650d1eSmrg   >> "$depfile"
2108108eb18Smrg  else
2118108eb18Smrg    # The sourcefile does not contain any dependencies, so just
2128108eb18Smrg    # store a dummy comment line, to avoid errors with the Makefile
2138108eb18Smrg    # "include basename.Plo" scheme.
2148108eb18Smrg    echo "#dummy" > "$depfile"
2158108eb18Smrg  fi
2168108eb18Smrg  rm -f "$tmpdepfile"
2178108eb18Smrg  ;;
2188108eb18Smrg
2198108eb18Smrgaix)
2208108eb18Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
2218108eb18Smrg  # in a .u file.  In older versions, this file always lives in the
2228108eb18Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
2238108eb18Smrg  # start of each line; $object doesn't have directory information.
2248108eb18Smrg  # Version 6 uses the directory in both cases.
2251a650d1eSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
2261a650d1eSmrg  test "x$dir" = "x$object" && dir=
2271a650d1eSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
2288108eb18Smrg  if test "$libtool" = yes; then
2291a650d1eSmrg    tmpdepfile1=$dir$base.u
2301a650d1eSmrg    tmpdepfile2=$base.u
2311a650d1eSmrg    tmpdepfile3=$dir.libs/$base.u
2328108eb18Smrg    "$@" -Wc,-M
2338108eb18Smrg  else
2341a650d1eSmrg    tmpdepfile1=$dir$base.u
2351a650d1eSmrg    tmpdepfile2=$dir$base.u
2361a650d1eSmrg    tmpdepfile3=$dir$base.u
2378108eb18Smrg    "$@" -M
2388108eb18Smrg  fi
2398108eb18Smrg  stat=$?
2408108eb18Smrg
2418108eb18Smrg  if test $stat -eq 0; then :
2428108eb18Smrg  else
2431a650d1eSmrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2448108eb18Smrg    exit $stat
2458108eb18Smrg  fi
2468108eb18Smrg
2471a650d1eSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2481a650d1eSmrg  do
2491a650d1eSmrg    test -f "$tmpdepfile" && break
2501a650d1eSmrg  done
2518108eb18Smrg  if test -f "$tmpdepfile"; then
2528108eb18Smrg    # Each line is of the form `foo.o: dependent.h'.
2538108eb18Smrg    # Do two passes, one to just change these to
2548108eb18Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
2551a650d1eSmrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
2561a650d1eSmrg    # That's a tab and a space in the [].
2571a650d1eSmrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
2588108eb18Smrg  else
2598108eb18Smrg    # The sourcefile does not contain any dependencies, so just
2608108eb18Smrg    # store a dummy comment line, to avoid errors with the Makefile
2618108eb18Smrg    # "include basename.Plo" scheme.
2628108eb18Smrg    echo "#dummy" > "$depfile"
2638108eb18Smrg  fi
2648108eb18Smrg  rm -f "$tmpdepfile"
2658108eb18Smrg  ;;
2668108eb18Smrg
2678108eb18Smrgicc)
2688108eb18Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
2698108eb18Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
2708108eb18Smrg  # ICC 7.0 will fill foo.d with something like
2718108eb18Smrg  #    foo.o: sub/foo.c
2728108eb18Smrg  #    foo.o: sub/foo.h
2738108eb18Smrg  # which is wrong.  We want:
2748108eb18Smrg  #    sub/foo.o: sub/foo.c
2758108eb18Smrg  #    sub/foo.o: sub/foo.h
2768108eb18Smrg  #    sub/foo.c:
2778108eb18Smrg  #    sub/foo.h:
2788108eb18Smrg  # ICC 7.1 will output
2798108eb18Smrg  #    foo.o: sub/foo.c sub/foo.h
2808108eb18Smrg  # and will wrap long lines using \ :
2818108eb18Smrg  #    foo.o: sub/foo.c ... \
2828108eb18Smrg  #     sub/foo.h ... \
2838108eb18Smrg  #     ...
2848108eb18Smrg
2858108eb18Smrg  "$@" -MD -MF "$tmpdepfile"
2868108eb18Smrg  stat=$?
2878108eb18Smrg  if test $stat -eq 0; then :
2888108eb18Smrg  else
2898108eb18Smrg    rm -f "$tmpdepfile"
2908108eb18Smrg    exit $stat
2918108eb18Smrg  fi
2928108eb18Smrg  rm -f "$depfile"
2938108eb18Smrg  # Each line is of the form `foo.o: dependent.h',
2948108eb18Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
2958108eb18Smrg  # Do two passes, one to just change these to
2968108eb18Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
2978108eb18Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
2988108eb18Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
2998108eb18Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
3008108eb18Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
3018108eb18Smrg    sed -e 's/$/ :/' >> "$depfile"
3028108eb18Smrg  rm -f "$tmpdepfile"
3038108eb18Smrg  ;;
3048108eb18Smrg
3051a650d1eSmrghp2)
3061a650d1eSmrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
3071a650d1eSmrg  # compilers, which have integrated preprocessors.  The correct option
3081a650d1eSmrg  # to use with these is +Maked; it writes dependencies to a file named
3091a650d1eSmrg  # 'foo.d', which lands next to the object file, wherever that
3101a650d1eSmrg  # happens to be.
3111a650d1eSmrg  # Much of this is similar to the tru64 case; see comments there.
3121a650d1eSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3131a650d1eSmrg  test "x$dir" = "x$object" && dir=
3141a650d1eSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3151a650d1eSmrg  if test "$libtool" = yes; then
3161a650d1eSmrg    tmpdepfile1=$dir$base.d
3171a650d1eSmrg    tmpdepfile2=$dir.libs/$base.d
3181a650d1eSmrg    "$@" -Wc,+Maked
3191a650d1eSmrg  else
3201a650d1eSmrg    tmpdepfile1=$dir$base.d
3211a650d1eSmrg    tmpdepfile2=$dir$base.d
3221a650d1eSmrg    "$@" +Maked
3231a650d1eSmrg  fi
3241a650d1eSmrg  stat=$?
3251a650d1eSmrg  if test $stat -eq 0; then :
3261a650d1eSmrg  else
3271a650d1eSmrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
3281a650d1eSmrg     exit $stat
3291a650d1eSmrg  fi
3301a650d1eSmrg
3311a650d1eSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
3321a650d1eSmrg  do
3331a650d1eSmrg    test -f "$tmpdepfile" && break
3341a650d1eSmrg  done
3351a650d1eSmrg  if test -f "$tmpdepfile"; then
3361a650d1eSmrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
3371a650d1eSmrg    # Add `dependent.h:' lines.
3381a650d1eSmrg    sed -ne '2,${
3391a650d1eSmrg	       s/^ *//
3401a650d1eSmrg	       s/ \\*$//
3411a650d1eSmrg	       s/$/:/
3421a650d1eSmrg	       p
3431a650d1eSmrg	     }' "$tmpdepfile" >> "$depfile"
3441a650d1eSmrg  else
3451a650d1eSmrg    echo "#dummy" > "$depfile"
3461a650d1eSmrg  fi
3471a650d1eSmrg  rm -f "$tmpdepfile" "$tmpdepfile2"
3481a650d1eSmrg  ;;
3491a650d1eSmrg
3508108eb18Smrgtru64)
3518108eb18Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
3528108eb18Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
3538108eb18Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
3548108eb18Smrg   # dependencies in `foo.d' instead, so we check for that too.
3558108eb18Smrg   # Subdirectories are respected.
3568108eb18Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3578108eb18Smrg   test "x$dir" = "x$object" && dir=
3588108eb18Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3598108eb18Smrg
3608108eb18Smrg   if test "$libtool" = yes; then
3611a650d1eSmrg      # With Tru64 cc, shared objects can also be used to make a
3621a650d1eSmrg      # static library.  This mechanism is used in libtool 1.4 series to
3631a650d1eSmrg      # handle both shared and static libraries in a single compilation.
3641a650d1eSmrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
3651a650d1eSmrg      #
3661a650d1eSmrg      # With libtool 1.5 this exception was removed, and libtool now
3671a650d1eSmrg      # generates 2 separate objects for the 2 libraries.  These two
3681a650d1eSmrg      # compilations output dependencies in $dir.libs/$base.o.d and
3691a650d1eSmrg      # in $dir$base.o.d.  We have to check for both files, because
3701a650d1eSmrg      # one of the two compilations can be disabled.  We should prefer
3711a650d1eSmrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
3721a650d1eSmrg      # automatically cleaned when .libs/ is deleted, while ignoring
3731a650d1eSmrg      # the former would cause a distcleancheck panic.
3741a650d1eSmrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
3751a650d1eSmrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
3761a650d1eSmrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
3771a650d1eSmrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
3788108eb18Smrg      "$@" -Wc,-MD
3798108eb18Smrg   else
3801a650d1eSmrg      tmpdepfile1=$dir$base.o.d
3811a650d1eSmrg      tmpdepfile2=$dir$base.d
3821a650d1eSmrg      tmpdepfile3=$dir$base.d
3831a650d1eSmrg      tmpdepfile4=$dir$base.d
3848108eb18Smrg      "$@" -MD
3858108eb18Smrg   fi
3868108eb18Smrg
3878108eb18Smrg   stat=$?
3888108eb18Smrg   if test $stat -eq 0; then :
3898108eb18Smrg   else
3901a650d1eSmrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3918108eb18Smrg      exit $stat
3928108eb18Smrg   fi
3938108eb18Smrg
3941a650d1eSmrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3951a650d1eSmrg   do
3961a650d1eSmrg     test -f "$tmpdepfile" && break
3971a650d1eSmrg   done
3988108eb18Smrg   if test -f "$tmpdepfile"; then
3998108eb18Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
4008108eb18Smrg      # That's a tab and a space in the [].
4018108eb18Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
4028108eb18Smrg   else
4038108eb18Smrg      echo "#dummy" > "$depfile"
4048108eb18Smrg   fi
4058108eb18Smrg   rm -f "$tmpdepfile"
4068108eb18Smrg   ;;
4078108eb18Smrg
4088108eb18Smrg#nosideeffect)
4098108eb18Smrg  # This comment above is used by automake to tell side-effect
4108108eb18Smrg  # dependency tracking mechanisms from slower ones.
4118108eb18Smrg
4128108eb18Smrgdashmstdout)
4138108eb18Smrg  # Important note: in order to support this mode, a compiler *must*
4148108eb18Smrg  # always write the preprocessed file to stdout, regardless of -o.
4158108eb18Smrg  "$@" || exit $?
4168108eb18Smrg
4178108eb18Smrg  # Remove the call to Libtool.
4188108eb18Smrg  if test "$libtool" = yes; then
4191a650d1eSmrg    while test "X$1" != 'X--mode=compile'; do
4208108eb18Smrg      shift
4218108eb18Smrg    done
4228108eb18Smrg    shift
4238108eb18Smrg  fi
4248108eb18Smrg
4258108eb18Smrg  # Remove `-o $object'.
4268108eb18Smrg  IFS=" "
4278108eb18Smrg  for arg
4288108eb18Smrg  do
4298108eb18Smrg    case $arg in
4308108eb18Smrg    -o)
4318108eb18Smrg      shift
4328108eb18Smrg      ;;
4338108eb18Smrg    $object)
4348108eb18Smrg      shift
4358108eb18Smrg      ;;
4368108eb18Smrg    *)
4378108eb18Smrg      set fnord "$@" "$arg"
4388108eb18Smrg      shift # fnord
4398108eb18Smrg      shift # $arg
4408108eb18Smrg      ;;
4418108eb18Smrg    esac
4428108eb18Smrg  done
4438108eb18Smrg
4448108eb18Smrg  test -z "$dashmflag" && dashmflag=-M
4458108eb18Smrg  # Require at least two characters before searching for `:'
4468108eb18Smrg  # in the target name.  This is to cope with DOS-style filenames:
4478108eb18Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
4488108eb18Smrg  "$@" $dashmflag |
4498108eb18Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
4508108eb18Smrg  rm -f "$depfile"
4518108eb18Smrg  cat < "$tmpdepfile" > "$depfile"
4528108eb18Smrg  tr ' ' '
4538108eb18Smrg' < "$tmpdepfile" | \
4548108eb18Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
4558108eb18Smrg## correctly.  Breaking it into two sed invocations is a workaround.
4568108eb18Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
4578108eb18Smrg  rm -f "$tmpdepfile"
4588108eb18Smrg  ;;
4598108eb18Smrg
4608108eb18SmrgdashXmstdout)
4618108eb18Smrg  # This case only exists to satisfy depend.m4.  It is never actually
4628108eb18Smrg  # run, as this mode is specially recognized in the preamble.
4638108eb18Smrg  exit 1
4648108eb18Smrg  ;;
4658108eb18Smrg
4668108eb18Smrgmakedepend)
4678108eb18Smrg  "$@" || exit $?
4688108eb18Smrg  # Remove any Libtool call
4698108eb18Smrg  if test "$libtool" = yes; then
4701a650d1eSmrg    while test "X$1" != 'X--mode=compile'; do
4718108eb18Smrg      shift
4728108eb18Smrg    done
4738108eb18Smrg    shift
4748108eb18Smrg  fi
4758108eb18Smrg  # X makedepend
4768108eb18Smrg  shift
4771a650d1eSmrg  cleared=no eat=no
4781a650d1eSmrg  for arg
4791a650d1eSmrg  do
4808108eb18Smrg    case $cleared in
4818108eb18Smrg    no)
4828108eb18Smrg      set ""; shift
4838108eb18Smrg      cleared=yes ;;
4848108eb18Smrg    esac
4851a650d1eSmrg    if test $eat = yes; then
4861a650d1eSmrg      eat=no
4871a650d1eSmrg      continue
4881a650d1eSmrg    fi
4898108eb18Smrg    case "$arg" in
4908108eb18Smrg    -D*|-I*)
4918108eb18Smrg      set fnord "$@" "$arg"; shift ;;
4928108eb18Smrg    # Strip any option that makedepend may not understand.  Remove
4938108eb18Smrg    # the object too, otherwise makedepend will parse it as a source file.
4941a650d1eSmrg    -arch)
4951a650d1eSmrg      eat=yes ;;
4968108eb18Smrg    -*|$object)
4978108eb18Smrg      ;;
4988108eb18Smrg    *)
4998108eb18Smrg      set fnord "$@" "$arg"; shift ;;
5008108eb18Smrg    esac
5018108eb18Smrg  done
5021a650d1eSmrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
5038108eb18Smrg  touch "$tmpdepfile"
5048108eb18Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
5058108eb18Smrg  rm -f "$depfile"
5068108eb18Smrg  cat < "$tmpdepfile" > "$depfile"
5078108eb18Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
5088108eb18Smrg' | \
5098108eb18Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
5108108eb18Smrg## correctly.  Breaking it into two sed invocations is a workaround.
5118108eb18Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
5128108eb18Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
5138108eb18Smrg  ;;
5148108eb18Smrg
5158108eb18Smrgcpp)
5168108eb18Smrg  # Important note: in order to support this mode, a compiler *must*
5178108eb18Smrg  # always write the preprocessed file to stdout.
5188108eb18Smrg  "$@" || exit $?
5198108eb18Smrg
5208108eb18Smrg  # Remove the call to Libtool.
5218108eb18Smrg  if test "$libtool" = yes; then
5221a650d1eSmrg    while test "X$1" != 'X--mode=compile'; do
5238108eb18Smrg      shift
5248108eb18Smrg    done
5258108eb18Smrg    shift
5268108eb18Smrg  fi
5278108eb18Smrg
5288108eb18Smrg  # Remove `-o $object'.
5298108eb18Smrg  IFS=" "
5308108eb18Smrg  for arg
5318108eb18Smrg  do
5328108eb18Smrg    case $arg in
5338108eb18Smrg    -o)
5348108eb18Smrg      shift
5358108eb18Smrg      ;;
5368108eb18Smrg    $object)
5378108eb18Smrg      shift
5388108eb18Smrg      ;;
5398108eb18Smrg    *)
5408108eb18Smrg      set fnord "$@" "$arg"
5418108eb18Smrg      shift # fnord
5428108eb18Smrg      shift # $arg
5438108eb18Smrg      ;;
5448108eb18Smrg    esac
5458108eb18Smrg  done
5468108eb18Smrg
5478108eb18Smrg  "$@" -E |
5481a650d1eSmrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
5491a650d1eSmrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
5508108eb18Smrg    sed '$ s: \\$::' > "$tmpdepfile"
5518108eb18Smrg  rm -f "$depfile"
5528108eb18Smrg  echo "$object : \\" > "$depfile"
5538108eb18Smrg  cat < "$tmpdepfile" >> "$depfile"
5548108eb18Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
5558108eb18Smrg  rm -f "$tmpdepfile"
5568108eb18Smrg  ;;
5578108eb18Smrg
5588108eb18Smrgmsvisualcpp)
5598108eb18Smrg  # Important note: in order to support this mode, a compiler *must*
5601a650d1eSmrg  # always write the preprocessed file to stdout.
5618108eb18Smrg  "$@" || exit $?
5621a650d1eSmrg
5631a650d1eSmrg  # Remove the call to Libtool.
5641a650d1eSmrg  if test "$libtool" = yes; then
5651a650d1eSmrg    while test "X$1" != 'X--mode=compile'; do
5661a650d1eSmrg      shift
5671a650d1eSmrg    done
5681a650d1eSmrg    shift
5691a650d1eSmrg  fi
5701a650d1eSmrg
5718108eb18Smrg  IFS=" "
5728108eb18Smrg  for arg
5738108eb18Smrg  do
5748108eb18Smrg    case "$arg" in
5751a650d1eSmrg    -o)
5761a650d1eSmrg      shift
5771a650d1eSmrg      ;;
5781a650d1eSmrg    $object)
5791a650d1eSmrg      shift
5801a650d1eSmrg      ;;
5818108eb18Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
5828108eb18Smrg	set fnord "$@"
5838108eb18Smrg	shift
5848108eb18Smrg	shift
5858108eb18Smrg	;;
5868108eb18Smrg    *)
5878108eb18Smrg	set fnord "$@" "$arg"
5888108eb18Smrg	shift
5898108eb18Smrg	shift
5908108eb18Smrg	;;
5918108eb18Smrg    esac
5928108eb18Smrg  done
5931a650d1eSmrg  "$@" -E 2>/dev/null |
5941a650d1eSmrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
5958108eb18Smrg  rm -f "$depfile"
5968108eb18Smrg  echo "$object : \\" > "$depfile"
5971a650d1eSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
5988108eb18Smrg  echo "	" >> "$depfile"
5991a650d1eSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
6008108eb18Smrg  rm -f "$tmpdepfile"
6018108eb18Smrg  ;;
6028108eb18Smrg
6031a650d1eSmrgmsvcmsys)
6041a650d1eSmrg  # This case exists only to let depend.m4 do its work.  It works by
6051a650d1eSmrg  # looking at the text of this script.  This case will never be run,
6061a650d1eSmrg  # since it is checked for above.
6071a650d1eSmrg  exit 1
6081a650d1eSmrg  ;;
6091a650d1eSmrg
6108108eb18Smrgnone)
6118108eb18Smrg  exec "$@"
6128108eb18Smrg  ;;
6138108eb18Smrg
6148108eb18Smrg*)
6158108eb18Smrg  echo "Unknown depmode $depmode" 1>&2
6168108eb18Smrg  exit 1
6178108eb18Smrg  ;;
6188108eb18Smrgesac
6198108eb18Smrg
6208108eb18Smrgexit 0
6211a650d1eSmrg
6221a650d1eSmrg# Local Variables:
6231a650d1eSmrg# mode: shell-script
6241a650d1eSmrg# sh-indentation: 2
6251a650d1eSmrg# eval: (add-hook 'write-file-hooks 'time-stamp)
6261a650d1eSmrg# time-stamp-start: "scriptversion="
6271a650d1eSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
6281a650d1eSmrg# time-stamp-time-zone: "UTC"
6291a650d1eSmrg# time-stamp-end: "; # UTC"
6301a650d1eSmrg# End:
631