depcomp revision 7e6fb56f
17e6fb56fSmrg#! /bin/sh
27e6fb56fSmrg# depcomp - compile a program generating dependencies as side-effects
37e6fb56fSmrg
47e6fb56fSmrgscriptversion=2009-04-28.21; # UTC
57e6fb56fSmrg
67e6fb56fSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
77e6fb56fSmrg# Software Foundation, Inc.
87e6fb56fSmrg
97e6fb56fSmrg# This program is free software; you can redistribute it and/or modify
107e6fb56fSmrg# it under the terms of the GNU General Public License as published by
117e6fb56fSmrg# the Free Software Foundation; either version 2, or (at your option)
127e6fb56fSmrg# any later version.
137e6fb56fSmrg
147e6fb56fSmrg# This program is distributed in the hope that it will be useful,
157e6fb56fSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
167e6fb56fSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
177e6fb56fSmrg# GNU General Public License for more details.
187e6fb56fSmrg
197e6fb56fSmrg# You should have received a copy of the GNU General Public License
207e6fb56fSmrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
217e6fb56fSmrg
227e6fb56fSmrg# As a special exception to the GNU General Public License, if you
237e6fb56fSmrg# distribute this file as part of a program that contains a
247e6fb56fSmrg# configuration script generated by Autoconf, you may include it under
257e6fb56fSmrg# the same distribution terms that you use for the rest of that program.
267e6fb56fSmrg
277e6fb56fSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
287e6fb56fSmrg
297e6fb56fSmrgcase $1 in
307e6fb56fSmrg  '')
317e6fb56fSmrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
327e6fb56fSmrg     exit 1;
337e6fb56fSmrg     ;;
347e6fb56fSmrg  -h | --h*)
357e6fb56fSmrg    cat <<\EOF
367e6fb56fSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
377e6fb56fSmrg
387e6fb56fSmrgRun PROGRAMS ARGS to compile a file, generating dependencies
397e6fb56fSmrgas side-effects.
407e6fb56fSmrg
417e6fb56fSmrgEnvironment variables:
427e6fb56fSmrg  depmode     Dependency tracking mode.
437e6fb56fSmrg  source      Source file read by `PROGRAMS ARGS'.
447e6fb56fSmrg  object      Object file output by `PROGRAMS ARGS'.
457e6fb56fSmrg  DEPDIR      directory where to store dependencies.
467e6fb56fSmrg  depfile     Dependency file to output.
477e6fb56fSmrg  tmpdepfile  Temporary file to use when outputing dependencies.
487e6fb56fSmrg  libtool     Whether libtool is used (yes/no).
497e6fb56fSmrg
507e6fb56fSmrgReport bugs to <bug-automake@gnu.org>.
517e6fb56fSmrgEOF
527e6fb56fSmrg    exit $?
537e6fb56fSmrg    ;;
547e6fb56fSmrg  -v | --v*)
557e6fb56fSmrg    echo "depcomp $scriptversion"
567e6fb56fSmrg    exit $?
577e6fb56fSmrg    ;;
587e6fb56fSmrgesac
597e6fb56fSmrg
607e6fb56fSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
617e6fb56fSmrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
627e6fb56fSmrg  exit 1
637e6fb56fSmrgfi
647e6fb56fSmrg
657e6fb56fSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
667e6fb56fSmrgdepfile=${depfile-`echo "$object" |
677e6fb56fSmrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
687e6fb56fSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
697e6fb56fSmrg
707e6fb56fSmrgrm -f "$tmpdepfile"
717e6fb56fSmrg
727e6fb56fSmrg# Some modes work just like other modes, but use different flags.  We
737e6fb56fSmrg# parameterize here, but still list the modes in the big case below,
747e6fb56fSmrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
757e6fb56fSmrg# here, because this file can only contain one case statement.
767e6fb56fSmrgif test "$depmode" = hp; then
777e6fb56fSmrg  # HP compiler uses -M and no extra arg.
787e6fb56fSmrg  gccflag=-M
797e6fb56fSmrg  depmode=gcc
807e6fb56fSmrgfi
817e6fb56fSmrg
827e6fb56fSmrgif test "$depmode" = dashXmstdout; then
837e6fb56fSmrg   # This is just like dashmstdout with a different argument.
847e6fb56fSmrg   dashmflag=-xM
857e6fb56fSmrg   depmode=dashmstdout
867e6fb56fSmrgfi
877e6fb56fSmrg
887e6fb56fSmrgcygpath_u="cygpath -u -f -"
897e6fb56fSmrgif test "$depmode" = msvcmsys; then
907e6fb56fSmrg   # This is just like msvisualcpp but w/o cygpath translation.
917e6fb56fSmrg   # Just convert the backslash-escaped backslashes to single forward
927e6fb56fSmrg   # slashes to satisfy depend.m4
937e6fb56fSmrg   cygpath_u="sed s,\\\\\\\\,/,g"
947e6fb56fSmrg   depmode=msvisualcpp
957e6fb56fSmrgfi
967e6fb56fSmrg
977e6fb56fSmrgcase "$depmode" in
987e6fb56fSmrggcc3)
997e6fb56fSmrg## gcc 3 implements dependency tracking that does exactly what
1007e6fb56fSmrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
1017e6fb56fSmrg## it if -MD -MP comes after the -MF stuff.  Hmm.
1027e6fb56fSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
1037e6fb56fSmrg## the command line argument order; so add the flags where they
1047e6fb56fSmrg## appear in depend2.am.  Note that the slowdown incurred here
1057e6fb56fSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
1067e6fb56fSmrg  for arg
1077e6fb56fSmrg  do
1087e6fb56fSmrg    case $arg in
1097e6fb56fSmrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
1107e6fb56fSmrg    *)  set fnord "$@" "$arg" ;;
1117e6fb56fSmrg    esac
1127e6fb56fSmrg    shift # fnord
1137e6fb56fSmrg    shift # $arg
1147e6fb56fSmrg  done
1157e6fb56fSmrg  "$@"
1167e6fb56fSmrg  stat=$?
1177e6fb56fSmrg  if test $stat -eq 0; then :
1187e6fb56fSmrg  else
1197e6fb56fSmrg    rm -f "$tmpdepfile"
1207e6fb56fSmrg    exit $stat
1217e6fb56fSmrg  fi
1227e6fb56fSmrg  mv "$tmpdepfile" "$depfile"
1237e6fb56fSmrg  ;;
1247e6fb56fSmrg
1257e6fb56fSmrggcc)
1267e6fb56fSmrg## There are various ways to get dependency output from gcc.  Here's
1277e6fb56fSmrg## why we pick this rather obscure method:
1287e6fb56fSmrg## - Don't want to use -MD because we'd like the dependencies to end
1297e6fb56fSmrg##   up in a subdir.  Having to rename by hand is ugly.
1307e6fb56fSmrg##   (We might end up doing this anyway to support other compilers.)
1317e6fb56fSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
1327e6fb56fSmrg##   -MM, not -M (despite what the docs say).
1337e6fb56fSmrg## - Using -M directly means running the compiler twice (even worse
1347e6fb56fSmrg##   than renaming).
1357e6fb56fSmrg  if test -z "$gccflag"; then
1367e6fb56fSmrg    gccflag=-MD,
1377e6fb56fSmrg  fi
1387e6fb56fSmrg  "$@" -Wp,"$gccflag$tmpdepfile"
1397e6fb56fSmrg  stat=$?
1407e6fb56fSmrg  if test $stat -eq 0; then :
1417e6fb56fSmrg  else
1427e6fb56fSmrg    rm -f "$tmpdepfile"
1437e6fb56fSmrg    exit $stat
1447e6fb56fSmrg  fi
1457e6fb56fSmrg  rm -f "$depfile"
1467e6fb56fSmrg  echo "$object : \\" > "$depfile"
1477e6fb56fSmrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
1487e6fb56fSmrg## The second -e expression handles DOS-style file names with drive letters.
1497e6fb56fSmrg  sed -e 's/^[^:]*: / /' \
1507e6fb56fSmrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
1517e6fb56fSmrg## This next piece of magic avoids the `deleted header file' problem.
1527e6fb56fSmrg## The problem is that when a header file which appears in a .P file
1537e6fb56fSmrg## is deleted, the dependency causes make to die (because there is
1547e6fb56fSmrg## typically no way to rebuild the header).  We avoid this by adding
1557e6fb56fSmrg## dummy dependencies for each header file.  Too bad gcc doesn't do
1567e6fb56fSmrg## this for us directly.
1577e6fb56fSmrg  tr ' ' '
1587e6fb56fSmrg' < "$tmpdepfile" |
1597e6fb56fSmrg## Some versions of gcc put a space before the `:'.  On the theory
1607e6fb56fSmrg## that the space means something, we add a space to the output as
1617e6fb56fSmrg## well.
1627e6fb56fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
1637e6fb56fSmrg## correctly.  Breaking it into two sed invocations is a workaround.
1647e6fb56fSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
1657e6fb56fSmrg  rm -f "$tmpdepfile"
1667e6fb56fSmrg  ;;
1677e6fb56fSmrg
1687e6fb56fSmrghp)
1697e6fb56fSmrg  # This case exists only to let depend.m4 do its work.  It works by
1707e6fb56fSmrg  # looking at the text of this script.  This case will never be run,
1717e6fb56fSmrg  # since it is checked for above.
1727e6fb56fSmrg  exit 1
1737e6fb56fSmrg  ;;
1747e6fb56fSmrg
1757e6fb56fSmrgsgi)
1767e6fb56fSmrg  if test "$libtool" = yes; then
1777e6fb56fSmrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
1787e6fb56fSmrg  else
1797e6fb56fSmrg    "$@" -MDupdate "$tmpdepfile"
1807e6fb56fSmrg  fi
1817e6fb56fSmrg  stat=$?
1827e6fb56fSmrg  if test $stat -eq 0; then :
1837e6fb56fSmrg  else
1847e6fb56fSmrg    rm -f "$tmpdepfile"
1857e6fb56fSmrg    exit $stat
1867e6fb56fSmrg  fi
1877e6fb56fSmrg  rm -f "$depfile"
1887e6fb56fSmrg
1897e6fb56fSmrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
1907e6fb56fSmrg    echo "$object : \\" > "$depfile"
1917e6fb56fSmrg
1927e6fb56fSmrg    # Clip off the initial element (the dependent).  Don't try to be
1937e6fb56fSmrg    # clever and replace this with sed code, as IRIX sed won't handle
1947e6fb56fSmrg    # lines with more than a fixed number of characters (4096 in
1957e6fb56fSmrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
1967e6fb56fSmrg    # the IRIX cc adds comments like `#:fec' to the end of the
1977e6fb56fSmrg    # dependency line.
1987e6fb56fSmrg    tr ' ' '
1997e6fb56fSmrg' < "$tmpdepfile" \
2007e6fb56fSmrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
2017e6fb56fSmrg    tr '
2027e6fb56fSmrg' ' ' >> "$depfile"
2037e6fb56fSmrg    echo >> "$depfile"
2047e6fb56fSmrg
2057e6fb56fSmrg    # The second pass generates a dummy entry for each header file.
2067e6fb56fSmrg    tr ' ' '
2077e6fb56fSmrg' < "$tmpdepfile" \
2087e6fb56fSmrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
2097e6fb56fSmrg   >> "$depfile"
2107e6fb56fSmrg  else
2117e6fb56fSmrg    # The sourcefile does not contain any dependencies, so just
2127e6fb56fSmrg    # store a dummy comment line, to avoid errors with the Makefile
2137e6fb56fSmrg    # "include basename.Plo" scheme.
2147e6fb56fSmrg    echo "#dummy" > "$depfile"
2157e6fb56fSmrg  fi
2167e6fb56fSmrg  rm -f "$tmpdepfile"
2177e6fb56fSmrg  ;;
2187e6fb56fSmrg
2197e6fb56fSmrgaix)
2207e6fb56fSmrg  # The C for AIX Compiler uses -M and outputs the dependencies
2217e6fb56fSmrg  # in a .u file.  In older versions, this file always lives in the
2227e6fb56fSmrg  # current directory.  Also, the AIX compiler puts `$object:' at the
2237e6fb56fSmrg  # start of each line; $object doesn't have directory information.
2247e6fb56fSmrg  # Version 6 uses the directory in both cases.
2257e6fb56fSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
2267e6fb56fSmrg  test "x$dir" = "x$object" && dir=
2277e6fb56fSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
2287e6fb56fSmrg  if test "$libtool" = yes; then
2297e6fb56fSmrg    tmpdepfile1=$dir$base.u
2307e6fb56fSmrg    tmpdepfile2=$base.u
2317e6fb56fSmrg    tmpdepfile3=$dir.libs/$base.u
2327e6fb56fSmrg    "$@" -Wc,-M
2337e6fb56fSmrg  else
2347e6fb56fSmrg    tmpdepfile1=$dir$base.u
2357e6fb56fSmrg    tmpdepfile2=$dir$base.u
2367e6fb56fSmrg    tmpdepfile3=$dir$base.u
2377e6fb56fSmrg    "$@" -M
2387e6fb56fSmrg  fi
2397e6fb56fSmrg  stat=$?
2407e6fb56fSmrg
2417e6fb56fSmrg  if test $stat -eq 0; then :
2427e6fb56fSmrg  else
2437e6fb56fSmrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2447e6fb56fSmrg    exit $stat
2457e6fb56fSmrg  fi
2467e6fb56fSmrg
2477e6fb56fSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2487e6fb56fSmrg  do
2497e6fb56fSmrg    test -f "$tmpdepfile" && break
2507e6fb56fSmrg  done
2517e6fb56fSmrg  if test -f "$tmpdepfile"; then
2527e6fb56fSmrg    # Each line is of the form `foo.o: dependent.h'.
2537e6fb56fSmrg    # Do two passes, one to just change these to
2547e6fb56fSmrg    # `$object: dependent.h' and one to simply `dependent.h:'.
2557e6fb56fSmrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
2567e6fb56fSmrg    # That's a tab and a space in the [].
2577e6fb56fSmrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
2587e6fb56fSmrg  else
2597e6fb56fSmrg    # The sourcefile does not contain any dependencies, so just
2607e6fb56fSmrg    # store a dummy comment line, to avoid errors with the Makefile
2617e6fb56fSmrg    # "include basename.Plo" scheme.
2627e6fb56fSmrg    echo "#dummy" > "$depfile"
2637e6fb56fSmrg  fi
2647e6fb56fSmrg  rm -f "$tmpdepfile"
2657e6fb56fSmrg  ;;
2667e6fb56fSmrg
2677e6fb56fSmrgicc)
2687e6fb56fSmrg  # Intel's C compiler understands `-MD -MF file'.  However on
2697e6fb56fSmrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
2707e6fb56fSmrg  # ICC 7.0 will fill foo.d with something like
2717e6fb56fSmrg  #    foo.o: sub/foo.c
2727e6fb56fSmrg  #    foo.o: sub/foo.h
2737e6fb56fSmrg  # which is wrong.  We want:
2747e6fb56fSmrg  #    sub/foo.o: sub/foo.c
2757e6fb56fSmrg  #    sub/foo.o: sub/foo.h
2767e6fb56fSmrg  #    sub/foo.c:
2777e6fb56fSmrg  #    sub/foo.h:
2787e6fb56fSmrg  # ICC 7.1 will output
2797e6fb56fSmrg  #    foo.o: sub/foo.c sub/foo.h
2807e6fb56fSmrg  # and will wrap long lines using \ :
2817e6fb56fSmrg  #    foo.o: sub/foo.c ... \
2827e6fb56fSmrg  #     sub/foo.h ... \
2837e6fb56fSmrg  #     ...
2847e6fb56fSmrg
2857e6fb56fSmrg  "$@" -MD -MF "$tmpdepfile"
2867e6fb56fSmrg  stat=$?
2877e6fb56fSmrg  if test $stat -eq 0; then :
2887e6fb56fSmrg  else
2897e6fb56fSmrg    rm -f "$tmpdepfile"
2907e6fb56fSmrg    exit $stat
2917e6fb56fSmrg  fi
2927e6fb56fSmrg  rm -f "$depfile"
2937e6fb56fSmrg  # Each line is of the form `foo.o: dependent.h',
2947e6fb56fSmrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
2957e6fb56fSmrg  # Do two passes, one to just change these to
2967e6fb56fSmrg  # `$object: dependent.h' and one to simply `dependent.h:'.
2977e6fb56fSmrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
2987e6fb56fSmrg  # Some versions of the HPUX 10.20 sed can't process this invocation
2997e6fb56fSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
3007e6fb56fSmrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
3017e6fb56fSmrg    sed -e 's/$/ :/' >> "$depfile"
3027e6fb56fSmrg  rm -f "$tmpdepfile"
3037e6fb56fSmrg  ;;
3047e6fb56fSmrg
3057e6fb56fSmrghp2)
3067e6fb56fSmrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
3077e6fb56fSmrg  # compilers, which have integrated preprocessors.  The correct option
3087e6fb56fSmrg  # to use with these is +Maked; it writes dependencies to a file named
3097e6fb56fSmrg  # 'foo.d', which lands next to the object file, wherever that
3107e6fb56fSmrg  # happens to be.
3117e6fb56fSmrg  # Much of this is similar to the tru64 case; see comments there.
3127e6fb56fSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3137e6fb56fSmrg  test "x$dir" = "x$object" && dir=
3147e6fb56fSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3157e6fb56fSmrg  if test "$libtool" = yes; then
3167e6fb56fSmrg    tmpdepfile1=$dir$base.d
3177e6fb56fSmrg    tmpdepfile2=$dir.libs/$base.d
3187e6fb56fSmrg    "$@" -Wc,+Maked
3197e6fb56fSmrg  else
3207e6fb56fSmrg    tmpdepfile1=$dir$base.d
3217e6fb56fSmrg    tmpdepfile2=$dir$base.d
3227e6fb56fSmrg    "$@" +Maked
3237e6fb56fSmrg  fi
3247e6fb56fSmrg  stat=$?
3257e6fb56fSmrg  if test $stat -eq 0; then :
3267e6fb56fSmrg  else
3277e6fb56fSmrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
3287e6fb56fSmrg     exit $stat
3297e6fb56fSmrg  fi
3307e6fb56fSmrg
3317e6fb56fSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
3327e6fb56fSmrg  do
3337e6fb56fSmrg    test -f "$tmpdepfile" && break
3347e6fb56fSmrg  done
3357e6fb56fSmrg  if test -f "$tmpdepfile"; then
3367e6fb56fSmrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
3377e6fb56fSmrg    # Add `dependent.h:' lines.
3387e6fb56fSmrg    sed -ne '2,${
3397e6fb56fSmrg	       s/^ *//
3407e6fb56fSmrg	       s/ \\*$//
3417e6fb56fSmrg	       s/$/:/
3427e6fb56fSmrg	       p
3437e6fb56fSmrg	     }' "$tmpdepfile" >> "$depfile"
3447e6fb56fSmrg  else
3457e6fb56fSmrg    echo "#dummy" > "$depfile"
3467e6fb56fSmrg  fi
3477e6fb56fSmrg  rm -f "$tmpdepfile" "$tmpdepfile2"
3487e6fb56fSmrg  ;;
3497e6fb56fSmrg
3507e6fb56fSmrgtru64)
3517e6fb56fSmrg   # The Tru64 compiler uses -MD to generate dependencies as a side
3527e6fb56fSmrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
3537e6fb56fSmrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
3547e6fb56fSmrg   # dependencies in `foo.d' instead, so we check for that too.
3557e6fb56fSmrg   # Subdirectories are respected.
3567e6fb56fSmrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3577e6fb56fSmrg   test "x$dir" = "x$object" && dir=
3587e6fb56fSmrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3597e6fb56fSmrg
3607e6fb56fSmrg   if test "$libtool" = yes; then
3617e6fb56fSmrg      # With Tru64 cc, shared objects can also be used to make a
3627e6fb56fSmrg      # static library.  This mechanism is used in libtool 1.4 series to
3637e6fb56fSmrg      # handle both shared and static libraries in a single compilation.
3647e6fb56fSmrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
3657e6fb56fSmrg      #
3667e6fb56fSmrg      # With libtool 1.5 this exception was removed, and libtool now
3677e6fb56fSmrg      # generates 2 separate objects for the 2 libraries.  These two
3687e6fb56fSmrg      # compilations output dependencies in $dir.libs/$base.o.d and
3697e6fb56fSmrg      # in $dir$base.o.d.  We have to check for both files, because
3707e6fb56fSmrg      # one of the two compilations can be disabled.  We should prefer
3717e6fb56fSmrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
3727e6fb56fSmrg      # automatically cleaned when .libs/ is deleted, while ignoring
3737e6fb56fSmrg      # the former would cause a distcleancheck panic.
3747e6fb56fSmrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
3757e6fb56fSmrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
3767e6fb56fSmrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
3777e6fb56fSmrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
3787e6fb56fSmrg      "$@" -Wc,-MD
3797e6fb56fSmrg   else
3807e6fb56fSmrg      tmpdepfile1=$dir$base.o.d
3817e6fb56fSmrg      tmpdepfile2=$dir$base.d
3827e6fb56fSmrg      tmpdepfile3=$dir$base.d
3837e6fb56fSmrg      tmpdepfile4=$dir$base.d
3847e6fb56fSmrg      "$@" -MD
3857e6fb56fSmrg   fi
3867e6fb56fSmrg
3877e6fb56fSmrg   stat=$?
3887e6fb56fSmrg   if test $stat -eq 0; then :
3897e6fb56fSmrg   else
3907e6fb56fSmrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3917e6fb56fSmrg      exit $stat
3927e6fb56fSmrg   fi
3937e6fb56fSmrg
3947e6fb56fSmrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3957e6fb56fSmrg   do
3967e6fb56fSmrg     test -f "$tmpdepfile" && break
3977e6fb56fSmrg   done
3987e6fb56fSmrg   if test -f "$tmpdepfile"; then
3997e6fb56fSmrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
4007e6fb56fSmrg      # That's a tab and a space in the [].
4017e6fb56fSmrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
4027e6fb56fSmrg   else
4037e6fb56fSmrg      echo "#dummy" > "$depfile"
4047e6fb56fSmrg   fi
4057e6fb56fSmrg   rm -f "$tmpdepfile"
4067e6fb56fSmrg   ;;
4077e6fb56fSmrg
4087e6fb56fSmrg#nosideeffect)
4097e6fb56fSmrg  # This comment above is used by automake to tell side-effect
4107e6fb56fSmrg  # dependency tracking mechanisms from slower ones.
4117e6fb56fSmrg
4127e6fb56fSmrgdashmstdout)
4137e6fb56fSmrg  # Important note: in order to support this mode, a compiler *must*
4147e6fb56fSmrg  # always write the preprocessed file to stdout, regardless of -o.
4157e6fb56fSmrg  "$@" || exit $?
4167e6fb56fSmrg
4177e6fb56fSmrg  # Remove the call to Libtool.
4187e6fb56fSmrg  if test "$libtool" = yes; then
4197e6fb56fSmrg    while test "X$1" != 'X--mode=compile'; do
4207e6fb56fSmrg      shift
4217e6fb56fSmrg    done
4227e6fb56fSmrg    shift
4237e6fb56fSmrg  fi
4247e6fb56fSmrg
4257e6fb56fSmrg  # Remove `-o $object'.
4267e6fb56fSmrg  IFS=" "
4277e6fb56fSmrg  for arg
4287e6fb56fSmrg  do
4297e6fb56fSmrg    case $arg in
4307e6fb56fSmrg    -o)
4317e6fb56fSmrg      shift
4327e6fb56fSmrg      ;;
4337e6fb56fSmrg    $object)
4347e6fb56fSmrg      shift
4357e6fb56fSmrg      ;;
4367e6fb56fSmrg    *)
4377e6fb56fSmrg      set fnord "$@" "$arg"
4387e6fb56fSmrg      shift # fnord
4397e6fb56fSmrg      shift # $arg
4407e6fb56fSmrg      ;;
4417e6fb56fSmrg    esac
4427e6fb56fSmrg  done
4437e6fb56fSmrg
4447e6fb56fSmrg  test -z "$dashmflag" && dashmflag=-M
4457e6fb56fSmrg  # Require at least two characters before searching for `:'
4467e6fb56fSmrg  # in the target name.  This is to cope with DOS-style filenames:
4477e6fb56fSmrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
4487e6fb56fSmrg  "$@" $dashmflag |
4497e6fb56fSmrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
4507e6fb56fSmrg  rm -f "$depfile"
4517e6fb56fSmrg  cat < "$tmpdepfile" > "$depfile"
4527e6fb56fSmrg  tr ' ' '
4537e6fb56fSmrg' < "$tmpdepfile" | \
4547e6fb56fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
4557e6fb56fSmrg## correctly.  Breaking it into two sed invocations is a workaround.
4567e6fb56fSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
4577e6fb56fSmrg  rm -f "$tmpdepfile"
4587e6fb56fSmrg  ;;
4597e6fb56fSmrg
4607e6fb56fSmrgdashXmstdout)
4617e6fb56fSmrg  # This case only exists to satisfy depend.m4.  It is never actually
4627e6fb56fSmrg  # run, as this mode is specially recognized in the preamble.
4637e6fb56fSmrg  exit 1
4647e6fb56fSmrg  ;;
4657e6fb56fSmrg
4667e6fb56fSmrgmakedepend)
4677e6fb56fSmrg  "$@" || exit $?
4687e6fb56fSmrg  # Remove any Libtool call
4697e6fb56fSmrg  if test "$libtool" = yes; then
4707e6fb56fSmrg    while test "X$1" != 'X--mode=compile'; do
4717e6fb56fSmrg      shift
4727e6fb56fSmrg    done
4737e6fb56fSmrg    shift
4747e6fb56fSmrg  fi
4757e6fb56fSmrg  # X makedepend
4767e6fb56fSmrg  shift
4777e6fb56fSmrg  cleared=no eat=no
4787e6fb56fSmrg  for arg
4797e6fb56fSmrg  do
4807e6fb56fSmrg    case $cleared in
4817e6fb56fSmrg    no)
4827e6fb56fSmrg      set ""; shift
4837e6fb56fSmrg      cleared=yes ;;
4847e6fb56fSmrg    esac
4857e6fb56fSmrg    if test $eat = yes; then
4867e6fb56fSmrg      eat=no
4877e6fb56fSmrg      continue
4887e6fb56fSmrg    fi
4897e6fb56fSmrg    case "$arg" in
4907e6fb56fSmrg    -D*|-I*)
4917e6fb56fSmrg      set fnord "$@" "$arg"; shift ;;
4927e6fb56fSmrg    # Strip any option that makedepend may not understand.  Remove
4937e6fb56fSmrg    # the object too, otherwise makedepend will parse it as a source file.
4947e6fb56fSmrg    -arch)
4957e6fb56fSmrg      eat=yes ;;
4967e6fb56fSmrg    -*|$object)
4977e6fb56fSmrg      ;;
4987e6fb56fSmrg    *)
4997e6fb56fSmrg      set fnord "$@" "$arg"; shift ;;
5007e6fb56fSmrg    esac
5017e6fb56fSmrg  done
5027e6fb56fSmrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
5037e6fb56fSmrg  touch "$tmpdepfile"
5047e6fb56fSmrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
5057e6fb56fSmrg  rm -f "$depfile"
5067e6fb56fSmrg  cat < "$tmpdepfile" > "$depfile"
5077e6fb56fSmrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
5087e6fb56fSmrg' | \
5097e6fb56fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
5107e6fb56fSmrg## correctly.  Breaking it into two sed invocations is a workaround.
5117e6fb56fSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
5127e6fb56fSmrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
5137e6fb56fSmrg  ;;
5147e6fb56fSmrg
5157e6fb56fSmrgcpp)
5167e6fb56fSmrg  # Important note: in order to support this mode, a compiler *must*
5177e6fb56fSmrg  # always write the preprocessed file to stdout.
5187e6fb56fSmrg  "$@" || exit $?
5197e6fb56fSmrg
5207e6fb56fSmrg  # Remove the call to Libtool.
5217e6fb56fSmrg  if test "$libtool" = yes; then
5227e6fb56fSmrg    while test "X$1" != 'X--mode=compile'; do
5237e6fb56fSmrg      shift
5247e6fb56fSmrg    done
5257e6fb56fSmrg    shift
5267e6fb56fSmrg  fi
5277e6fb56fSmrg
5287e6fb56fSmrg  # Remove `-o $object'.
5297e6fb56fSmrg  IFS=" "
5307e6fb56fSmrg  for arg
5317e6fb56fSmrg  do
5327e6fb56fSmrg    case $arg in
5337e6fb56fSmrg    -o)
5347e6fb56fSmrg      shift
5357e6fb56fSmrg      ;;
5367e6fb56fSmrg    $object)
5377e6fb56fSmrg      shift
5387e6fb56fSmrg      ;;
5397e6fb56fSmrg    *)
5407e6fb56fSmrg      set fnord "$@" "$arg"
5417e6fb56fSmrg      shift # fnord
5427e6fb56fSmrg      shift # $arg
5437e6fb56fSmrg      ;;
5447e6fb56fSmrg    esac
5457e6fb56fSmrg  done
5467e6fb56fSmrg
5477e6fb56fSmrg  "$@" -E |
5487e6fb56fSmrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
5497e6fb56fSmrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
5507e6fb56fSmrg    sed '$ s: \\$::' > "$tmpdepfile"
5517e6fb56fSmrg  rm -f "$depfile"
5527e6fb56fSmrg  echo "$object : \\" > "$depfile"
5537e6fb56fSmrg  cat < "$tmpdepfile" >> "$depfile"
5547e6fb56fSmrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
5557e6fb56fSmrg  rm -f "$tmpdepfile"
5567e6fb56fSmrg  ;;
5577e6fb56fSmrg
5587e6fb56fSmrgmsvisualcpp)
5597e6fb56fSmrg  # Important note: in order to support this mode, a compiler *must*
5607e6fb56fSmrg  # always write the preprocessed file to stdout.
5617e6fb56fSmrg  "$@" || exit $?
5627e6fb56fSmrg
5637e6fb56fSmrg  # Remove the call to Libtool.
5647e6fb56fSmrg  if test "$libtool" = yes; then
5657e6fb56fSmrg    while test "X$1" != 'X--mode=compile'; do
5667e6fb56fSmrg      shift
5677e6fb56fSmrg    done
5687e6fb56fSmrg    shift
5697e6fb56fSmrg  fi
5707e6fb56fSmrg
5717e6fb56fSmrg  IFS=" "
5727e6fb56fSmrg  for arg
5737e6fb56fSmrg  do
5747e6fb56fSmrg    case "$arg" in
5757e6fb56fSmrg    -o)
5767e6fb56fSmrg      shift
5777e6fb56fSmrg      ;;
5787e6fb56fSmrg    $object)
5797e6fb56fSmrg      shift
5807e6fb56fSmrg      ;;
5817e6fb56fSmrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
5827e6fb56fSmrg	set fnord "$@"
5837e6fb56fSmrg	shift
5847e6fb56fSmrg	shift
5857e6fb56fSmrg	;;
5867e6fb56fSmrg    *)
5877e6fb56fSmrg	set fnord "$@" "$arg"
5887e6fb56fSmrg	shift
5897e6fb56fSmrg	shift
5907e6fb56fSmrg	;;
5917e6fb56fSmrg    esac
5927e6fb56fSmrg  done
5937e6fb56fSmrg  "$@" -E 2>/dev/null |
5947e6fb56fSmrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
5957e6fb56fSmrg  rm -f "$depfile"
5967e6fb56fSmrg  echo "$object : \\" > "$depfile"
5977e6fb56fSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
5987e6fb56fSmrg  echo "	" >> "$depfile"
5997e6fb56fSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
6007e6fb56fSmrg  rm -f "$tmpdepfile"
6017e6fb56fSmrg  ;;
6027e6fb56fSmrg
6037e6fb56fSmrgmsvcmsys)
6047e6fb56fSmrg  # This case exists only to let depend.m4 do its work.  It works by
6057e6fb56fSmrg  # looking at the text of this script.  This case will never be run,
6067e6fb56fSmrg  # since it is checked for above.
6077e6fb56fSmrg  exit 1
6087e6fb56fSmrg  ;;
6097e6fb56fSmrg
6107e6fb56fSmrgnone)
6117e6fb56fSmrg  exec "$@"
6127e6fb56fSmrg  ;;
6137e6fb56fSmrg
6147e6fb56fSmrg*)
6157e6fb56fSmrg  echo "Unknown depmode $depmode" 1>&2
6167e6fb56fSmrg  exit 1
6177e6fb56fSmrg  ;;
6187e6fb56fSmrgesac
6197e6fb56fSmrg
6207e6fb56fSmrgexit 0
6217e6fb56fSmrg
6227e6fb56fSmrg# Local Variables:
6237e6fb56fSmrg# mode: shell-script
6247e6fb56fSmrg# sh-indentation: 2
6257e6fb56fSmrg# eval: (add-hook 'write-file-hooks 'time-stamp)
6267e6fb56fSmrg# time-stamp-start: "scriptversion="
6277e6fb56fSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
6287e6fb56fSmrg# time-stamp-time-zone: "UTC"
6297e6fb56fSmrg# time-stamp-end: "; # UTC"
6307e6fb56fSmrg# End:
631