depcomp revision 5977a007
18108eb18Smrg#! /bin/sh
28108eb18Smrg# depcomp - compile a program generating dependencies as side-effects
31a650d1eSmrg
45977a007Smrgscriptversion=2011-12-04.11; # UTC
51a650d1eSmrg
65977a007Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
75977a007Smrg# 2011 Free 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.
475977a007Smrg  tmpdepfile  Temporary file to use when outputting 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
935977a007Smrg   cygpath_u='sed s,\\\\,/,g'
941a650d1eSmrg   depmode=msvisualcpp
951a650d1eSmrgfi
961a650d1eSmrg
975977a007Smrgif test "$depmode" = msvc7msys; then
985977a007Smrg   # This is just like msvc7 but w/o cygpath translation.
995977a007Smrg   # Just convert the backslash-escaped backslashes to single forward
1005977a007Smrg   # slashes to satisfy depend.m4
1015977a007Smrg   cygpath_u='sed s,\\\\,/,g'
1025977a007Smrg   depmode=msvc7
1035977a007Smrgfi
1045977a007Smrg
1058108eb18Smrgcase "$depmode" in
1068108eb18Smrggcc3)
1078108eb18Smrg## gcc 3 implements dependency tracking that does exactly what
1088108eb18Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
1098108eb18Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
1101a650d1eSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
1111a650d1eSmrg## the command line argument order; so add the flags where they
1121a650d1eSmrg## appear in depend2.am.  Note that the slowdown incurred here
1131a650d1eSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
1141a650d1eSmrg  for arg
1151a650d1eSmrg  do
1161a650d1eSmrg    case $arg in
1171a650d1eSmrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
1181a650d1eSmrg    *)  set fnord "$@" "$arg" ;;
1191a650d1eSmrg    esac
1201a650d1eSmrg    shift # fnord
1211a650d1eSmrg    shift # $arg
1221a650d1eSmrg  done
1231a650d1eSmrg  "$@"
1248108eb18Smrg  stat=$?
1258108eb18Smrg  if test $stat -eq 0; then :
1268108eb18Smrg  else
1278108eb18Smrg    rm -f "$tmpdepfile"
1288108eb18Smrg    exit $stat
1298108eb18Smrg  fi
1308108eb18Smrg  mv "$tmpdepfile" "$depfile"
1318108eb18Smrg  ;;
1328108eb18Smrg
1338108eb18Smrggcc)
1348108eb18Smrg## There are various ways to get dependency output from gcc.  Here's
1358108eb18Smrg## why we pick this rather obscure method:
1368108eb18Smrg## - Don't want to use -MD because we'd like the dependencies to end
1378108eb18Smrg##   up in a subdir.  Having to rename by hand is ugly.
1388108eb18Smrg##   (We might end up doing this anyway to support other compilers.)
1398108eb18Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
1408108eb18Smrg##   -MM, not -M (despite what the docs say).
1418108eb18Smrg## - Using -M directly means running the compiler twice (even worse
1428108eb18Smrg##   than renaming).
1438108eb18Smrg  if test -z "$gccflag"; then
1448108eb18Smrg    gccflag=-MD,
1458108eb18Smrg  fi
1468108eb18Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
1478108eb18Smrg  stat=$?
1488108eb18Smrg  if test $stat -eq 0; then :
1498108eb18Smrg  else
1508108eb18Smrg    rm -f "$tmpdepfile"
1518108eb18Smrg    exit $stat
1528108eb18Smrg  fi
1538108eb18Smrg  rm -f "$depfile"
1548108eb18Smrg  echo "$object : \\" > "$depfile"
1558108eb18Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
1568108eb18Smrg## The second -e expression handles DOS-style file names with drive letters.
1578108eb18Smrg  sed -e 's/^[^:]*: / /' \
1588108eb18Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
1598108eb18Smrg## This next piece of magic avoids the `deleted header file' problem.
1608108eb18Smrg## The problem is that when a header file which appears in a .P file
1618108eb18Smrg## is deleted, the dependency causes make to die (because there is
1628108eb18Smrg## typically no way to rebuild the header).  We avoid this by adding
1638108eb18Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
1648108eb18Smrg## this for us directly.
1658108eb18Smrg  tr ' ' '
1668108eb18Smrg' < "$tmpdepfile" |
1678108eb18Smrg## Some versions of gcc put a space before the `:'.  On the theory
1688108eb18Smrg## that the space means something, we add a space to the output as
1695977a007Smrg## well.  hp depmode also adds that space, but also prefixes the VPATH
1705977a007Smrg## to the object.  Take care to not repeat it in the output.
1718108eb18Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
1728108eb18Smrg## correctly.  Breaking it into two sed invocations is a workaround.
1735977a007Smrg    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
1745977a007Smrg      | sed -e 's/$/ :/' >> "$depfile"
1758108eb18Smrg  rm -f "$tmpdepfile"
1768108eb18Smrg  ;;
1778108eb18Smrg
1788108eb18Smrghp)
1798108eb18Smrg  # This case exists only to let depend.m4 do its work.  It works by
1808108eb18Smrg  # looking at the text of this script.  This case will never be run,
1818108eb18Smrg  # since it is checked for above.
1828108eb18Smrg  exit 1
1838108eb18Smrg  ;;
1848108eb18Smrg
1858108eb18Smrgsgi)
1868108eb18Smrg  if test "$libtool" = yes; then
1878108eb18Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
1888108eb18Smrg  else
1898108eb18Smrg    "$@" -MDupdate "$tmpdepfile"
1908108eb18Smrg  fi
1918108eb18Smrg  stat=$?
1928108eb18Smrg  if test $stat -eq 0; then :
1938108eb18Smrg  else
1948108eb18Smrg    rm -f "$tmpdepfile"
1958108eb18Smrg    exit $stat
1968108eb18Smrg  fi
1978108eb18Smrg  rm -f "$depfile"
1988108eb18Smrg
1998108eb18Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
2008108eb18Smrg    echo "$object : \\" > "$depfile"
2018108eb18Smrg
2028108eb18Smrg    # Clip off the initial element (the dependent).  Don't try to be
2038108eb18Smrg    # clever and replace this with sed code, as IRIX sed won't handle
2048108eb18Smrg    # lines with more than a fixed number of characters (4096 in
2058108eb18Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
2068108eb18Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
2078108eb18Smrg    # dependency line.
2088108eb18Smrg    tr ' ' '
2098108eb18Smrg' < "$tmpdepfile" \
2108108eb18Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
2118108eb18Smrg    tr '
2121a650d1eSmrg' ' ' >> "$depfile"
2131a650d1eSmrg    echo >> "$depfile"
2148108eb18Smrg
2158108eb18Smrg    # The second pass generates a dummy entry for each header file.
2168108eb18Smrg    tr ' ' '
2178108eb18Smrg' < "$tmpdepfile" \
2188108eb18Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
2191a650d1eSmrg   >> "$depfile"
2208108eb18Smrg  else
2218108eb18Smrg    # The sourcefile does not contain any dependencies, so just
2228108eb18Smrg    # store a dummy comment line, to avoid errors with the Makefile
2238108eb18Smrg    # "include basename.Plo" scheme.
2248108eb18Smrg    echo "#dummy" > "$depfile"
2258108eb18Smrg  fi
2268108eb18Smrg  rm -f "$tmpdepfile"
2278108eb18Smrg  ;;
2288108eb18Smrg
2298108eb18Smrgaix)
2308108eb18Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
2318108eb18Smrg  # in a .u file.  In older versions, this file always lives in the
2328108eb18Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
2338108eb18Smrg  # start of each line; $object doesn't have directory information.
2348108eb18Smrg  # Version 6 uses the directory in both cases.
2351a650d1eSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
2361a650d1eSmrg  test "x$dir" = "x$object" && dir=
2371a650d1eSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
2388108eb18Smrg  if test "$libtool" = yes; then
2391a650d1eSmrg    tmpdepfile1=$dir$base.u
2401a650d1eSmrg    tmpdepfile2=$base.u
2411a650d1eSmrg    tmpdepfile3=$dir.libs/$base.u
2428108eb18Smrg    "$@" -Wc,-M
2438108eb18Smrg  else
2441a650d1eSmrg    tmpdepfile1=$dir$base.u
2451a650d1eSmrg    tmpdepfile2=$dir$base.u
2461a650d1eSmrg    tmpdepfile3=$dir$base.u
2478108eb18Smrg    "$@" -M
2488108eb18Smrg  fi
2498108eb18Smrg  stat=$?
2508108eb18Smrg
2518108eb18Smrg  if test $stat -eq 0; then :
2528108eb18Smrg  else
2531a650d1eSmrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2548108eb18Smrg    exit $stat
2558108eb18Smrg  fi
2568108eb18Smrg
2571a650d1eSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2581a650d1eSmrg  do
2591a650d1eSmrg    test -f "$tmpdepfile" && break
2601a650d1eSmrg  done
2618108eb18Smrg  if test -f "$tmpdepfile"; then
2628108eb18Smrg    # Each line is of the form `foo.o: dependent.h'.
2638108eb18Smrg    # Do two passes, one to just change these to
2648108eb18Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
2651a650d1eSmrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
2661a650d1eSmrg    # That's a tab and a space in the [].
2671a650d1eSmrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
2688108eb18Smrg  else
2698108eb18Smrg    # The sourcefile does not contain any dependencies, so just
2708108eb18Smrg    # store a dummy comment line, to avoid errors with the Makefile
2718108eb18Smrg    # "include basename.Plo" scheme.
2728108eb18Smrg    echo "#dummy" > "$depfile"
2738108eb18Smrg  fi
2748108eb18Smrg  rm -f "$tmpdepfile"
2758108eb18Smrg  ;;
2768108eb18Smrg
2778108eb18Smrgicc)
2788108eb18Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
2798108eb18Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
2808108eb18Smrg  # ICC 7.0 will fill foo.d with something like
2818108eb18Smrg  #    foo.o: sub/foo.c
2828108eb18Smrg  #    foo.o: sub/foo.h
2838108eb18Smrg  # which is wrong.  We want:
2848108eb18Smrg  #    sub/foo.o: sub/foo.c
2858108eb18Smrg  #    sub/foo.o: sub/foo.h
2868108eb18Smrg  #    sub/foo.c:
2878108eb18Smrg  #    sub/foo.h:
2888108eb18Smrg  # ICC 7.1 will output
2898108eb18Smrg  #    foo.o: sub/foo.c sub/foo.h
2908108eb18Smrg  # and will wrap long lines using \ :
2918108eb18Smrg  #    foo.o: sub/foo.c ... \
2928108eb18Smrg  #     sub/foo.h ... \
2938108eb18Smrg  #     ...
2948108eb18Smrg
2958108eb18Smrg  "$@" -MD -MF "$tmpdepfile"
2968108eb18Smrg  stat=$?
2978108eb18Smrg  if test $stat -eq 0; then :
2988108eb18Smrg  else
2998108eb18Smrg    rm -f "$tmpdepfile"
3008108eb18Smrg    exit $stat
3018108eb18Smrg  fi
3028108eb18Smrg  rm -f "$depfile"
3038108eb18Smrg  # Each line is of the form `foo.o: dependent.h',
3048108eb18Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
3058108eb18Smrg  # Do two passes, one to just change these to
3068108eb18Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
3078108eb18Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
3088108eb18Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
3098108eb18Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
3108108eb18Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
3118108eb18Smrg    sed -e 's/$/ :/' >> "$depfile"
3128108eb18Smrg  rm -f "$tmpdepfile"
3138108eb18Smrg  ;;
3148108eb18Smrg
3151a650d1eSmrghp2)
3161a650d1eSmrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
3171a650d1eSmrg  # compilers, which have integrated preprocessors.  The correct option
3181a650d1eSmrg  # to use with these is +Maked; it writes dependencies to a file named
3191a650d1eSmrg  # 'foo.d', which lands next to the object file, wherever that
3201a650d1eSmrg  # happens to be.
3211a650d1eSmrg  # Much of this is similar to the tru64 case; see comments there.
3221a650d1eSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3231a650d1eSmrg  test "x$dir" = "x$object" && dir=
3241a650d1eSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3251a650d1eSmrg  if test "$libtool" = yes; then
3261a650d1eSmrg    tmpdepfile1=$dir$base.d
3271a650d1eSmrg    tmpdepfile2=$dir.libs/$base.d
3281a650d1eSmrg    "$@" -Wc,+Maked
3291a650d1eSmrg  else
3301a650d1eSmrg    tmpdepfile1=$dir$base.d
3311a650d1eSmrg    tmpdepfile2=$dir$base.d
3321a650d1eSmrg    "$@" +Maked
3331a650d1eSmrg  fi
3341a650d1eSmrg  stat=$?
3351a650d1eSmrg  if test $stat -eq 0; then :
3361a650d1eSmrg  else
3371a650d1eSmrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
3381a650d1eSmrg     exit $stat
3391a650d1eSmrg  fi
3401a650d1eSmrg
3411a650d1eSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
3421a650d1eSmrg  do
3431a650d1eSmrg    test -f "$tmpdepfile" && break
3441a650d1eSmrg  done
3451a650d1eSmrg  if test -f "$tmpdepfile"; then
3461a650d1eSmrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
3471a650d1eSmrg    # Add `dependent.h:' lines.
3481a650d1eSmrg    sed -ne '2,${
3491a650d1eSmrg	       s/^ *//
3501a650d1eSmrg	       s/ \\*$//
3511a650d1eSmrg	       s/$/:/
3521a650d1eSmrg	       p
3531a650d1eSmrg	     }' "$tmpdepfile" >> "$depfile"
3541a650d1eSmrg  else
3551a650d1eSmrg    echo "#dummy" > "$depfile"
3561a650d1eSmrg  fi
3571a650d1eSmrg  rm -f "$tmpdepfile" "$tmpdepfile2"
3581a650d1eSmrg  ;;
3591a650d1eSmrg
3608108eb18Smrgtru64)
3618108eb18Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
3628108eb18Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
3638108eb18Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
3648108eb18Smrg   # dependencies in `foo.d' instead, so we check for that too.
3658108eb18Smrg   # Subdirectories are respected.
3668108eb18Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3678108eb18Smrg   test "x$dir" = "x$object" && dir=
3688108eb18Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3698108eb18Smrg
3708108eb18Smrg   if test "$libtool" = yes; then
3711a650d1eSmrg      # With Tru64 cc, shared objects can also be used to make a
3721a650d1eSmrg      # static library.  This mechanism is used in libtool 1.4 series to
3731a650d1eSmrg      # handle both shared and static libraries in a single compilation.
3741a650d1eSmrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
3751a650d1eSmrg      #
3761a650d1eSmrg      # With libtool 1.5 this exception was removed, and libtool now
3771a650d1eSmrg      # generates 2 separate objects for the 2 libraries.  These two
3781a650d1eSmrg      # compilations output dependencies in $dir.libs/$base.o.d and
3791a650d1eSmrg      # in $dir$base.o.d.  We have to check for both files, because
3801a650d1eSmrg      # one of the two compilations can be disabled.  We should prefer
3811a650d1eSmrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
3821a650d1eSmrg      # automatically cleaned when .libs/ is deleted, while ignoring
3831a650d1eSmrg      # the former would cause a distcleancheck panic.
3841a650d1eSmrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
3851a650d1eSmrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
3861a650d1eSmrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
3871a650d1eSmrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
3888108eb18Smrg      "$@" -Wc,-MD
3898108eb18Smrg   else
3901a650d1eSmrg      tmpdepfile1=$dir$base.o.d
3911a650d1eSmrg      tmpdepfile2=$dir$base.d
3921a650d1eSmrg      tmpdepfile3=$dir$base.d
3931a650d1eSmrg      tmpdepfile4=$dir$base.d
3948108eb18Smrg      "$@" -MD
3958108eb18Smrg   fi
3968108eb18Smrg
3978108eb18Smrg   stat=$?
3988108eb18Smrg   if test $stat -eq 0; then :
3998108eb18Smrg   else
4001a650d1eSmrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
4018108eb18Smrg      exit $stat
4028108eb18Smrg   fi
4038108eb18Smrg
4041a650d1eSmrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
4051a650d1eSmrg   do
4061a650d1eSmrg     test -f "$tmpdepfile" && break
4071a650d1eSmrg   done
4088108eb18Smrg   if test -f "$tmpdepfile"; then
4098108eb18Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
4108108eb18Smrg      # That's a tab and a space in the [].
4118108eb18Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
4128108eb18Smrg   else
4138108eb18Smrg      echo "#dummy" > "$depfile"
4148108eb18Smrg   fi
4158108eb18Smrg   rm -f "$tmpdepfile"
4168108eb18Smrg   ;;
4178108eb18Smrg
4185977a007Smrgmsvc7)
4195977a007Smrg  if test "$libtool" = yes; then
4205977a007Smrg    showIncludes=-Wc,-showIncludes
4215977a007Smrg  else
4225977a007Smrg    showIncludes=-showIncludes
4235977a007Smrg  fi
4245977a007Smrg  "$@" $showIncludes > "$tmpdepfile"
4255977a007Smrg  stat=$?
4265977a007Smrg  grep -v '^Note: including file: ' "$tmpdepfile"
4275977a007Smrg  if test "$stat" = 0; then :
4285977a007Smrg  else
4295977a007Smrg    rm -f "$tmpdepfile"
4305977a007Smrg    exit $stat
4315977a007Smrg  fi
4325977a007Smrg  rm -f "$depfile"
4335977a007Smrg  echo "$object : \\" > "$depfile"
4345977a007Smrg  # The first sed program below extracts the file names and escapes
4355977a007Smrg  # backslashes for cygpath.  The second sed program outputs the file
4365977a007Smrg  # name when reading, but also accumulates all include files in the
4375977a007Smrg  # hold buffer in order to output them again at the end.  This only
4385977a007Smrg  # works with sed implementations that can handle large buffers.
4395977a007Smrg  sed < "$tmpdepfile" -n '
4405977a007Smrg/^Note: including file:  *\(.*\)/ {
4415977a007Smrg  s//\1/
4425977a007Smrg  s/\\/\\\\/g
4435977a007Smrg  p
4445977a007Smrg}' | $cygpath_u | sort -u | sed -n '
4455977a007Smrgs/ /\\ /g
4465977a007Smrgs/\(.*\)/	\1 \\/p
4475977a007Smrgs/.\(.*\) \\/\1:/
4485977a007SmrgH
4495977a007Smrg$ {
4505977a007Smrg  s/.*/	/
4515977a007Smrg  G
4525977a007Smrg  p
4535977a007Smrg}' >> "$depfile"
4545977a007Smrg  rm -f "$tmpdepfile"
4555977a007Smrg  ;;
4565977a007Smrg
4575977a007Smrgmsvc7msys)
4585977a007Smrg  # This case exists only to let depend.m4 do its work.  It works by
4595977a007Smrg  # looking at the text of this script.  This case will never be run,
4605977a007Smrg  # since it is checked for above.
4615977a007Smrg  exit 1
4625977a007Smrg  ;;
4635977a007Smrg
4648108eb18Smrg#nosideeffect)
4658108eb18Smrg  # This comment above is used by automake to tell side-effect
4668108eb18Smrg  # dependency tracking mechanisms from slower ones.
4678108eb18Smrg
4688108eb18Smrgdashmstdout)
4698108eb18Smrg  # Important note: in order to support this mode, a compiler *must*
4708108eb18Smrg  # always write the preprocessed file to stdout, regardless of -o.
4718108eb18Smrg  "$@" || exit $?
4728108eb18Smrg
4738108eb18Smrg  # Remove the call to Libtool.
4748108eb18Smrg  if test "$libtool" = yes; then
4751a650d1eSmrg    while test "X$1" != 'X--mode=compile'; do
4768108eb18Smrg      shift
4778108eb18Smrg    done
4788108eb18Smrg    shift
4798108eb18Smrg  fi
4808108eb18Smrg
4818108eb18Smrg  # Remove `-o $object'.
4828108eb18Smrg  IFS=" "
4838108eb18Smrg  for arg
4848108eb18Smrg  do
4858108eb18Smrg    case $arg in
4868108eb18Smrg    -o)
4878108eb18Smrg      shift
4888108eb18Smrg      ;;
4898108eb18Smrg    $object)
4908108eb18Smrg      shift
4918108eb18Smrg      ;;
4928108eb18Smrg    *)
4938108eb18Smrg      set fnord "$@" "$arg"
4948108eb18Smrg      shift # fnord
4958108eb18Smrg      shift # $arg
4968108eb18Smrg      ;;
4978108eb18Smrg    esac
4988108eb18Smrg  done
4998108eb18Smrg
5008108eb18Smrg  test -z "$dashmflag" && dashmflag=-M
5018108eb18Smrg  # Require at least two characters before searching for `:'
5028108eb18Smrg  # in the target name.  This is to cope with DOS-style filenames:
5038108eb18Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
5048108eb18Smrg  "$@" $dashmflag |
5058108eb18Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
5068108eb18Smrg  rm -f "$depfile"
5078108eb18Smrg  cat < "$tmpdepfile" > "$depfile"
5088108eb18Smrg  tr ' ' '
5098108eb18Smrg' < "$tmpdepfile" | \
5108108eb18Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
5118108eb18Smrg## correctly.  Breaking it into two sed invocations is a workaround.
5128108eb18Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
5138108eb18Smrg  rm -f "$tmpdepfile"
5148108eb18Smrg  ;;
5158108eb18Smrg
5168108eb18SmrgdashXmstdout)
5178108eb18Smrg  # This case only exists to satisfy depend.m4.  It is never actually
5188108eb18Smrg  # run, as this mode is specially recognized in the preamble.
5198108eb18Smrg  exit 1
5208108eb18Smrg  ;;
5218108eb18Smrg
5228108eb18Smrgmakedepend)
5238108eb18Smrg  "$@" || exit $?
5248108eb18Smrg  # Remove any Libtool call
5258108eb18Smrg  if test "$libtool" = yes; then
5261a650d1eSmrg    while test "X$1" != 'X--mode=compile'; do
5278108eb18Smrg      shift
5288108eb18Smrg    done
5298108eb18Smrg    shift
5308108eb18Smrg  fi
5318108eb18Smrg  # X makedepend
5328108eb18Smrg  shift
5331a650d1eSmrg  cleared=no eat=no
5341a650d1eSmrg  for arg
5351a650d1eSmrg  do
5368108eb18Smrg    case $cleared in
5378108eb18Smrg    no)
5388108eb18Smrg      set ""; shift
5398108eb18Smrg      cleared=yes ;;
5408108eb18Smrg    esac
5411a650d1eSmrg    if test $eat = yes; then
5421a650d1eSmrg      eat=no
5431a650d1eSmrg      continue
5441a650d1eSmrg    fi
5458108eb18Smrg    case "$arg" in
5468108eb18Smrg    -D*|-I*)
5478108eb18Smrg      set fnord "$@" "$arg"; shift ;;
5488108eb18Smrg    # Strip any option that makedepend may not understand.  Remove
5498108eb18Smrg    # the object too, otherwise makedepend will parse it as a source file.
5501a650d1eSmrg    -arch)
5511a650d1eSmrg      eat=yes ;;
5528108eb18Smrg    -*|$object)
5538108eb18Smrg      ;;
5548108eb18Smrg    *)
5558108eb18Smrg      set fnord "$@" "$arg"; shift ;;
5568108eb18Smrg    esac
5578108eb18Smrg  done
5581a650d1eSmrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
5598108eb18Smrg  touch "$tmpdepfile"
5608108eb18Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
5618108eb18Smrg  rm -f "$depfile"
5625977a007Smrg  # makedepend may prepend the VPATH from the source file name to the object.
5635977a007Smrg  # No need to regex-escape $object, excess matching of '.' is harmless.
5645977a007Smrg  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
5658108eb18Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
5668108eb18Smrg' | \
5678108eb18Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
5688108eb18Smrg## correctly.  Breaking it into two sed invocations is a workaround.
5698108eb18Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
5708108eb18Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
5718108eb18Smrg  ;;
5728108eb18Smrg
5738108eb18Smrgcpp)
5748108eb18Smrg  # Important note: in order to support this mode, a compiler *must*
5758108eb18Smrg  # always write the preprocessed file to stdout.
5768108eb18Smrg  "$@" || exit $?
5778108eb18Smrg
5788108eb18Smrg  # Remove the call to Libtool.
5798108eb18Smrg  if test "$libtool" = yes; then
5801a650d1eSmrg    while test "X$1" != 'X--mode=compile'; do
5818108eb18Smrg      shift
5828108eb18Smrg    done
5838108eb18Smrg    shift
5848108eb18Smrg  fi
5858108eb18Smrg
5868108eb18Smrg  # Remove `-o $object'.
5878108eb18Smrg  IFS=" "
5888108eb18Smrg  for arg
5898108eb18Smrg  do
5908108eb18Smrg    case $arg in
5918108eb18Smrg    -o)
5928108eb18Smrg      shift
5938108eb18Smrg      ;;
5948108eb18Smrg    $object)
5958108eb18Smrg      shift
5968108eb18Smrg      ;;
5978108eb18Smrg    *)
5988108eb18Smrg      set fnord "$@" "$arg"
5998108eb18Smrg      shift # fnord
6008108eb18Smrg      shift # $arg
6018108eb18Smrg      ;;
6028108eb18Smrg    esac
6038108eb18Smrg  done
6048108eb18Smrg
6058108eb18Smrg  "$@" -E |
6061a650d1eSmrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
6071a650d1eSmrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
6088108eb18Smrg    sed '$ s: \\$::' > "$tmpdepfile"
6098108eb18Smrg  rm -f "$depfile"
6108108eb18Smrg  echo "$object : \\" > "$depfile"
6118108eb18Smrg  cat < "$tmpdepfile" >> "$depfile"
6128108eb18Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
6138108eb18Smrg  rm -f "$tmpdepfile"
6148108eb18Smrg  ;;
6158108eb18Smrg
6168108eb18Smrgmsvisualcpp)
6178108eb18Smrg  # Important note: in order to support this mode, a compiler *must*
6181a650d1eSmrg  # always write the preprocessed file to stdout.
6198108eb18Smrg  "$@" || exit $?
6201a650d1eSmrg
6211a650d1eSmrg  # Remove the call to Libtool.
6221a650d1eSmrg  if test "$libtool" = yes; then
6231a650d1eSmrg    while test "X$1" != 'X--mode=compile'; do
6241a650d1eSmrg      shift
6251a650d1eSmrg    done
6261a650d1eSmrg    shift
6271a650d1eSmrg  fi
6281a650d1eSmrg
6298108eb18Smrg  IFS=" "
6308108eb18Smrg  for arg
6318108eb18Smrg  do
6328108eb18Smrg    case "$arg" in
6331a650d1eSmrg    -o)
6341a650d1eSmrg      shift
6351a650d1eSmrg      ;;
6361a650d1eSmrg    $object)
6371a650d1eSmrg      shift
6381a650d1eSmrg      ;;
6398108eb18Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
6408108eb18Smrg	set fnord "$@"
6418108eb18Smrg	shift
6428108eb18Smrg	shift
6438108eb18Smrg	;;
6448108eb18Smrg    *)
6458108eb18Smrg	set fnord "$@" "$arg"
6468108eb18Smrg	shift
6478108eb18Smrg	shift
6488108eb18Smrg	;;
6498108eb18Smrg    esac
6508108eb18Smrg  done
6511a650d1eSmrg  "$@" -E 2>/dev/null |
6521a650d1eSmrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
6538108eb18Smrg  rm -f "$depfile"
6548108eb18Smrg  echo "$object : \\" > "$depfile"
6551a650d1eSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
6568108eb18Smrg  echo "	" >> "$depfile"
6571a650d1eSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
6588108eb18Smrg  rm -f "$tmpdepfile"
6598108eb18Smrg  ;;
6608108eb18Smrg
6611a650d1eSmrgmsvcmsys)
6621a650d1eSmrg  # This case exists only to let depend.m4 do its work.  It works by
6631a650d1eSmrg  # looking at the text of this script.  This case will never be run,
6641a650d1eSmrg  # since it is checked for above.
6651a650d1eSmrg  exit 1
6661a650d1eSmrg  ;;
6671a650d1eSmrg
6688108eb18Smrgnone)
6698108eb18Smrg  exec "$@"
6708108eb18Smrg  ;;
6718108eb18Smrg
6728108eb18Smrg*)
6738108eb18Smrg  echo "Unknown depmode $depmode" 1>&2
6748108eb18Smrg  exit 1
6758108eb18Smrg  ;;
6768108eb18Smrgesac
6778108eb18Smrg
6788108eb18Smrgexit 0
6791a650d1eSmrg
6801a650d1eSmrg# Local Variables:
6811a650d1eSmrg# mode: shell-script
6821a650d1eSmrg# sh-indentation: 2
6831a650d1eSmrg# eval: (add-hook 'write-file-hooks 'time-stamp)
6841a650d1eSmrg# time-stamp-start: "scriptversion="
6851a650d1eSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
6861a650d1eSmrg# time-stamp-time-zone: "UTC"
6871a650d1eSmrg# time-stamp-end: "; # UTC"
6881a650d1eSmrg# End:
689