depcomp revision 8512f934
14d9b34d9Smrg#! /bin/sh
24d9b34d9Smrg# depcomp - compile a program generating dependencies as side-effects
34d9b34d9Smrg
48512f934Smrgscriptversion=2009-04-28.21; # UTC
54d9b34d9Smrg
68512f934Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
78512f934Smrg# Software Foundation, Inc.
84d9b34d9Smrg
94d9b34d9Smrg# This program is free software; you can redistribute it and/or modify
104d9b34d9Smrg# it under the terms of the GNU General Public License as published by
114d9b34d9Smrg# the Free Software Foundation; either version 2, or (at your option)
124d9b34d9Smrg# any later version.
134d9b34d9Smrg
144d9b34d9Smrg# This program is distributed in the hope that it will be useful,
154d9b34d9Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
164d9b34d9Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
174d9b34d9Smrg# GNU General Public License for more details.
184d9b34d9Smrg
194d9b34d9Smrg# You should have received a copy of the GNU General Public License
208512f934Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
214d9b34d9Smrg
224d9b34d9Smrg# As a special exception to the GNU General Public License, if you
234d9b34d9Smrg# distribute this file as part of a program that contains a
244d9b34d9Smrg# configuration script generated by Autoconf, you may include it under
254d9b34d9Smrg# the same distribution terms that you use for the rest of that program.
264d9b34d9Smrg
274d9b34d9Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
284d9b34d9Smrg
294d9b34d9Smrgcase $1 in
304d9b34d9Smrg  '')
314d9b34d9Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
324d9b34d9Smrg     exit 1;
334d9b34d9Smrg     ;;
344d9b34d9Smrg  -h | --h*)
354d9b34d9Smrg    cat <<\EOF
364d9b34d9SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
374d9b34d9Smrg
384d9b34d9SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
394d9b34d9Smrgas side-effects.
404d9b34d9Smrg
414d9b34d9SmrgEnvironment variables:
424d9b34d9Smrg  depmode     Dependency tracking mode.
434d9b34d9Smrg  source      Source file read by `PROGRAMS ARGS'.
444d9b34d9Smrg  object      Object file output by `PROGRAMS ARGS'.
454d9b34d9Smrg  DEPDIR      directory where to store dependencies.
464d9b34d9Smrg  depfile     Dependency file to output.
474d9b34d9Smrg  tmpdepfile  Temporary file to use when outputing dependencies.
484d9b34d9Smrg  libtool     Whether libtool is used (yes/no).
494d9b34d9Smrg
504d9b34d9SmrgReport bugs to <bug-automake@gnu.org>.
514d9b34d9SmrgEOF
524d9b34d9Smrg    exit $?
534d9b34d9Smrg    ;;
544d9b34d9Smrg  -v | --v*)
554d9b34d9Smrg    echo "depcomp $scriptversion"
564d9b34d9Smrg    exit $?
574d9b34d9Smrg    ;;
584d9b34d9Smrgesac
594d9b34d9Smrg
604d9b34d9Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
614d9b34d9Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
624d9b34d9Smrg  exit 1
634d9b34d9Smrgfi
644d9b34d9Smrg
654d9b34d9Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
664d9b34d9Smrgdepfile=${depfile-`echo "$object" |
674d9b34d9Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
684d9b34d9Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
694d9b34d9Smrg
704d9b34d9Smrgrm -f "$tmpdepfile"
714d9b34d9Smrg
724d9b34d9Smrg# Some modes work just like other modes, but use different flags.  We
734d9b34d9Smrg# parameterize here, but still list the modes in the big case below,
744d9b34d9Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
754d9b34d9Smrg# here, because this file can only contain one case statement.
764d9b34d9Smrgif test "$depmode" = hp; then
774d9b34d9Smrg  # HP compiler uses -M and no extra arg.
784d9b34d9Smrg  gccflag=-M
794d9b34d9Smrg  depmode=gcc
804d9b34d9Smrgfi
814d9b34d9Smrg
824d9b34d9Smrgif test "$depmode" = dashXmstdout; then
834d9b34d9Smrg   # This is just like dashmstdout with a different argument.
844d9b34d9Smrg   dashmflag=-xM
854d9b34d9Smrg   depmode=dashmstdout
864d9b34d9Smrgfi
874d9b34d9Smrg
888512f934Smrgcygpath_u="cygpath -u -f -"
898512f934Smrgif test "$depmode" = msvcmsys; then
908512f934Smrg   # This is just like msvisualcpp but w/o cygpath translation.
918512f934Smrg   # Just convert the backslash-escaped backslashes to single forward
928512f934Smrg   # slashes to satisfy depend.m4
938512f934Smrg   cygpath_u="sed s,\\\\\\\\,/,g"
948512f934Smrg   depmode=msvisualcpp
958512f934Smrgfi
968512f934Smrg
974d9b34d9Smrgcase "$depmode" in
984d9b34d9Smrggcc3)
994d9b34d9Smrg## gcc 3 implements dependency tracking that does exactly what
1004d9b34d9Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
1014d9b34d9Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
1024d9b34d9Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
1034d9b34d9Smrg## the command line argument order; so add the flags where they
1044d9b34d9Smrg## appear in depend2.am.  Note that the slowdown incurred here
1054d9b34d9Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
1064d9b34d9Smrg  for arg
1074d9b34d9Smrg  do
1084d9b34d9Smrg    case $arg in
1094d9b34d9Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
1104d9b34d9Smrg    *)  set fnord "$@" "$arg" ;;
1114d9b34d9Smrg    esac
1124d9b34d9Smrg    shift # fnord
1134d9b34d9Smrg    shift # $arg
1144d9b34d9Smrg  done
1154d9b34d9Smrg  "$@"
1164d9b34d9Smrg  stat=$?
1174d9b34d9Smrg  if test $stat -eq 0; then :
1184d9b34d9Smrg  else
1194d9b34d9Smrg    rm -f "$tmpdepfile"
1204d9b34d9Smrg    exit $stat
1214d9b34d9Smrg  fi
1224d9b34d9Smrg  mv "$tmpdepfile" "$depfile"
1234d9b34d9Smrg  ;;
1244d9b34d9Smrg
1254d9b34d9Smrggcc)
1264d9b34d9Smrg## There are various ways to get dependency output from gcc.  Here's
1274d9b34d9Smrg## why we pick this rather obscure method:
1284d9b34d9Smrg## - Don't want to use -MD because we'd like the dependencies to end
1294d9b34d9Smrg##   up in a subdir.  Having to rename by hand is ugly.
1304d9b34d9Smrg##   (We might end up doing this anyway to support other compilers.)
1314d9b34d9Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
1324d9b34d9Smrg##   -MM, not -M (despite what the docs say).
1334d9b34d9Smrg## - Using -M directly means running the compiler twice (even worse
1344d9b34d9Smrg##   than renaming).
1354d9b34d9Smrg  if test -z "$gccflag"; then
1364d9b34d9Smrg    gccflag=-MD,
1374d9b34d9Smrg  fi
1384d9b34d9Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
1394d9b34d9Smrg  stat=$?
1404d9b34d9Smrg  if test $stat -eq 0; then :
1414d9b34d9Smrg  else
1424d9b34d9Smrg    rm -f "$tmpdepfile"
1434d9b34d9Smrg    exit $stat
1444d9b34d9Smrg  fi
1454d9b34d9Smrg  rm -f "$depfile"
1464d9b34d9Smrg  echo "$object : \\" > "$depfile"
1474d9b34d9Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
1484d9b34d9Smrg## The second -e expression handles DOS-style file names with drive letters.
1494d9b34d9Smrg  sed -e 's/^[^:]*: / /' \
1504d9b34d9Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
1514d9b34d9Smrg## This next piece of magic avoids the `deleted header file' problem.
1524d9b34d9Smrg## The problem is that when a header file which appears in a .P file
1534d9b34d9Smrg## is deleted, the dependency causes make to die (because there is
1544d9b34d9Smrg## typically no way to rebuild the header).  We avoid this by adding
1554d9b34d9Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
1564d9b34d9Smrg## this for us directly.
1574d9b34d9Smrg  tr ' ' '
1584d9b34d9Smrg' < "$tmpdepfile" |
1594d9b34d9Smrg## Some versions of gcc put a space before the `:'.  On the theory
1604d9b34d9Smrg## that the space means something, we add a space to the output as
1614d9b34d9Smrg## well.
1624d9b34d9Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
1634d9b34d9Smrg## correctly.  Breaking it into two sed invocations is a workaround.
1644d9b34d9Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
1654d9b34d9Smrg  rm -f "$tmpdepfile"
1664d9b34d9Smrg  ;;
1674d9b34d9Smrg
1684d9b34d9Smrghp)
1694d9b34d9Smrg  # This case exists only to let depend.m4 do its work.  It works by
1704d9b34d9Smrg  # looking at the text of this script.  This case will never be run,
1714d9b34d9Smrg  # since it is checked for above.
1724d9b34d9Smrg  exit 1
1734d9b34d9Smrg  ;;
1744d9b34d9Smrg
1754d9b34d9Smrgsgi)
1764d9b34d9Smrg  if test "$libtool" = yes; then
1774d9b34d9Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
1784d9b34d9Smrg  else
1794d9b34d9Smrg    "$@" -MDupdate "$tmpdepfile"
1804d9b34d9Smrg  fi
1814d9b34d9Smrg  stat=$?
1824d9b34d9Smrg  if test $stat -eq 0; then :
1834d9b34d9Smrg  else
1844d9b34d9Smrg    rm -f "$tmpdepfile"
1854d9b34d9Smrg    exit $stat
1864d9b34d9Smrg  fi
1874d9b34d9Smrg  rm -f "$depfile"
1884d9b34d9Smrg
1894d9b34d9Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
1904d9b34d9Smrg    echo "$object : \\" > "$depfile"
1914d9b34d9Smrg
1924d9b34d9Smrg    # Clip off the initial element (the dependent).  Don't try to be
1934d9b34d9Smrg    # clever and replace this with sed code, as IRIX sed won't handle
1944d9b34d9Smrg    # lines with more than a fixed number of characters (4096 in
1954d9b34d9Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
1964d9b34d9Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
1974d9b34d9Smrg    # dependency line.
1984d9b34d9Smrg    tr ' ' '
1994d9b34d9Smrg' < "$tmpdepfile" \
2004d9b34d9Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
2014d9b34d9Smrg    tr '
2028512f934Smrg' ' ' >> "$depfile"
2038512f934Smrg    echo >> "$depfile"
2044d9b34d9Smrg
2054d9b34d9Smrg    # The second pass generates a dummy entry for each header file.
2064d9b34d9Smrg    tr ' ' '
2074d9b34d9Smrg' < "$tmpdepfile" \
2084d9b34d9Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
2098512f934Smrg   >> "$depfile"
2104d9b34d9Smrg  else
2114d9b34d9Smrg    # The sourcefile does not contain any dependencies, so just
2124d9b34d9Smrg    # store a dummy comment line, to avoid errors with the Makefile
2134d9b34d9Smrg    # "include basename.Plo" scheme.
2144d9b34d9Smrg    echo "#dummy" > "$depfile"
2154d9b34d9Smrg  fi
2164d9b34d9Smrg  rm -f "$tmpdepfile"
2174d9b34d9Smrg  ;;
2184d9b34d9Smrg
2194d9b34d9Smrgaix)
2204d9b34d9Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
2214d9b34d9Smrg  # in a .u file.  In older versions, this file always lives in the
2224d9b34d9Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
2234d9b34d9Smrg  # start of each line; $object doesn't have directory information.
2244d9b34d9Smrg  # Version 6 uses the directory in both cases.
2258512f934Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
2268512f934Smrg  test "x$dir" = "x$object" && dir=
2278512f934Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
2284d9b34d9Smrg  if test "$libtool" = yes; then
2298512f934Smrg    tmpdepfile1=$dir$base.u
2308512f934Smrg    tmpdepfile2=$base.u
2318512f934Smrg    tmpdepfile3=$dir.libs/$base.u
2324d9b34d9Smrg    "$@" -Wc,-M
2334d9b34d9Smrg  else
2348512f934Smrg    tmpdepfile1=$dir$base.u
2358512f934Smrg    tmpdepfile2=$dir$base.u
2368512f934Smrg    tmpdepfile3=$dir$base.u
2374d9b34d9Smrg    "$@" -M
2384d9b34d9Smrg  fi
2394d9b34d9Smrg  stat=$?
2404d9b34d9Smrg
2414d9b34d9Smrg  if test $stat -eq 0; then :
2424d9b34d9Smrg  else
2438512f934Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2444d9b34d9Smrg    exit $stat
2454d9b34d9Smrg  fi
2464d9b34d9Smrg
2478512f934Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2488512f934Smrg  do
2498512f934Smrg    test -f "$tmpdepfile" && break
2508512f934Smrg  done
2514d9b34d9Smrg  if test -f "$tmpdepfile"; then
2524d9b34d9Smrg    # Each line is of the form `foo.o: dependent.h'.
2534d9b34d9Smrg    # Do two passes, one to just change these to
2544d9b34d9Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
2558512f934Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
2568512f934Smrg    # That's a tab and a space in the [].
2578512f934Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
2584d9b34d9Smrg  else
2594d9b34d9Smrg    # The sourcefile does not contain any dependencies, so just
2604d9b34d9Smrg    # store a dummy comment line, to avoid errors with the Makefile
2614d9b34d9Smrg    # "include basename.Plo" scheme.
2624d9b34d9Smrg    echo "#dummy" > "$depfile"
2634d9b34d9Smrg  fi
2644d9b34d9Smrg  rm -f "$tmpdepfile"
2654d9b34d9Smrg  ;;
2664d9b34d9Smrg
2674d9b34d9Smrgicc)
2684d9b34d9Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
2694d9b34d9Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
2704d9b34d9Smrg  # ICC 7.0 will fill foo.d with something like
2714d9b34d9Smrg  #    foo.o: sub/foo.c
2724d9b34d9Smrg  #    foo.o: sub/foo.h
2734d9b34d9Smrg  # which is wrong.  We want:
2744d9b34d9Smrg  #    sub/foo.o: sub/foo.c
2754d9b34d9Smrg  #    sub/foo.o: sub/foo.h
2764d9b34d9Smrg  #    sub/foo.c:
2774d9b34d9Smrg  #    sub/foo.h:
2784d9b34d9Smrg  # ICC 7.1 will output
2794d9b34d9Smrg  #    foo.o: sub/foo.c sub/foo.h
2804d9b34d9Smrg  # and will wrap long lines using \ :
2814d9b34d9Smrg  #    foo.o: sub/foo.c ... \
2824d9b34d9Smrg  #     sub/foo.h ... \
2834d9b34d9Smrg  #     ...
2844d9b34d9Smrg
2854d9b34d9Smrg  "$@" -MD -MF "$tmpdepfile"
2864d9b34d9Smrg  stat=$?
2874d9b34d9Smrg  if test $stat -eq 0; then :
2884d9b34d9Smrg  else
2894d9b34d9Smrg    rm -f "$tmpdepfile"
2904d9b34d9Smrg    exit $stat
2914d9b34d9Smrg  fi
2924d9b34d9Smrg  rm -f "$depfile"
2934d9b34d9Smrg  # Each line is of the form `foo.o: dependent.h',
2944d9b34d9Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
2954d9b34d9Smrg  # Do two passes, one to just change these to
2964d9b34d9Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
2974d9b34d9Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
2984d9b34d9Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
2994d9b34d9Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
3004d9b34d9Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
3014d9b34d9Smrg    sed -e 's/$/ :/' >> "$depfile"
3024d9b34d9Smrg  rm -f "$tmpdepfile"
3034d9b34d9Smrg  ;;
3044d9b34d9Smrg
3054d9b34d9Smrghp2)
3064d9b34d9Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
3074d9b34d9Smrg  # compilers, which have integrated preprocessors.  The correct option
3084d9b34d9Smrg  # to use with these is +Maked; it writes dependencies to a file named
3094d9b34d9Smrg  # 'foo.d', which lands next to the object file, wherever that
3104d9b34d9Smrg  # happens to be.
3114d9b34d9Smrg  # Much of this is similar to the tru64 case; see comments there.
3124d9b34d9Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3134d9b34d9Smrg  test "x$dir" = "x$object" && dir=
3144d9b34d9Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3154d9b34d9Smrg  if test "$libtool" = yes; then
3164d9b34d9Smrg    tmpdepfile1=$dir$base.d
3174d9b34d9Smrg    tmpdepfile2=$dir.libs/$base.d
3184d9b34d9Smrg    "$@" -Wc,+Maked
3194d9b34d9Smrg  else
3204d9b34d9Smrg    tmpdepfile1=$dir$base.d
3214d9b34d9Smrg    tmpdepfile2=$dir$base.d
3224d9b34d9Smrg    "$@" +Maked
3234d9b34d9Smrg  fi
3244d9b34d9Smrg  stat=$?
3254d9b34d9Smrg  if test $stat -eq 0; then :
3264d9b34d9Smrg  else
3274d9b34d9Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
3284d9b34d9Smrg     exit $stat
3294d9b34d9Smrg  fi
3304d9b34d9Smrg
3314d9b34d9Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
3324d9b34d9Smrg  do
3334d9b34d9Smrg    test -f "$tmpdepfile" && break
3344d9b34d9Smrg  done
3354d9b34d9Smrg  if test -f "$tmpdepfile"; then
3364d9b34d9Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
3374d9b34d9Smrg    # Add `dependent.h:' lines.
3388512f934Smrg    sed -ne '2,${
3398512f934Smrg	       s/^ *//
3408512f934Smrg	       s/ \\*$//
3418512f934Smrg	       s/$/:/
3428512f934Smrg	       p
3438512f934Smrg	     }' "$tmpdepfile" >> "$depfile"
3444d9b34d9Smrg  else
3454d9b34d9Smrg    echo "#dummy" > "$depfile"
3464d9b34d9Smrg  fi
3474d9b34d9Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
3484d9b34d9Smrg  ;;
3494d9b34d9Smrg
3504d9b34d9Smrgtru64)
3514d9b34d9Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
3524d9b34d9Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
3534d9b34d9Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
3544d9b34d9Smrg   # dependencies in `foo.d' instead, so we check for that too.
3554d9b34d9Smrg   # Subdirectories are respected.
3564d9b34d9Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3574d9b34d9Smrg   test "x$dir" = "x$object" && dir=
3584d9b34d9Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3594d9b34d9Smrg
3604d9b34d9Smrg   if test "$libtool" = yes; then
3614d9b34d9Smrg      # With Tru64 cc, shared objects can also be used to make a
3624d9b34d9Smrg      # static library.  This mechanism is used in libtool 1.4 series to
3634d9b34d9Smrg      # handle both shared and static libraries in a single compilation.
3644d9b34d9Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
3654d9b34d9Smrg      #
3664d9b34d9Smrg      # With libtool 1.5 this exception was removed, and libtool now
3674d9b34d9Smrg      # generates 2 separate objects for the 2 libraries.  These two
3684d9b34d9Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
3694d9b34d9Smrg      # in $dir$base.o.d.  We have to check for both files, because
3704d9b34d9Smrg      # one of the two compilations can be disabled.  We should prefer
3714d9b34d9Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
3724d9b34d9Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
3734d9b34d9Smrg      # the former would cause a distcleancheck panic.
3744d9b34d9Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
3754d9b34d9Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
3764d9b34d9Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
3774d9b34d9Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
3784d9b34d9Smrg      "$@" -Wc,-MD
3794d9b34d9Smrg   else
3804d9b34d9Smrg      tmpdepfile1=$dir$base.o.d
3814d9b34d9Smrg      tmpdepfile2=$dir$base.d
3824d9b34d9Smrg      tmpdepfile3=$dir$base.d
3834d9b34d9Smrg      tmpdepfile4=$dir$base.d
3844d9b34d9Smrg      "$@" -MD
3854d9b34d9Smrg   fi
3864d9b34d9Smrg
3874d9b34d9Smrg   stat=$?
3884d9b34d9Smrg   if test $stat -eq 0; then :
3894d9b34d9Smrg   else
3904d9b34d9Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3914d9b34d9Smrg      exit $stat
3924d9b34d9Smrg   fi
3934d9b34d9Smrg
3944d9b34d9Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3954d9b34d9Smrg   do
3964d9b34d9Smrg     test -f "$tmpdepfile" && break
3974d9b34d9Smrg   done
3984d9b34d9Smrg   if test -f "$tmpdepfile"; then
3994d9b34d9Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
4004d9b34d9Smrg      # That's a tab and a space in the [].
4014d9b34d9Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
4024d9b34d9Smrg   else
4034d9b34d9Smrg      echo "#dummy" > "$depfile"
4044d9b34d9Smrg   fi
4054d9b34d9Smrg   rm -f "$tmpdepfile"
4064d9b34d9Smrg   ;;
4074d9b34d9Smrg
4084d9b34d9Smrg#nosideeffect)
4094d9b34d9Smrg  # This comment above is used by automake to tell side-effect
4104d9b34d9Smrg  # dependency tracking mechanisms from slower ones.
4114d9b34d9Smrg
4124d9b34d9Smrgdashmstdout)
4134d9b34d9Smrg  # Important note: in order to support this mode, a compiler *must*
4144d9b34d9Smrg  # always write the preprocessed file to stdout, regardless of -o.
4154d9b34d9Smrg  "$@" || exit $?
4164d9b34d9Smrg
4174d9b34d9Smrg  # Remove the call to Libtool.
4184d9b34d9Smrg  if test "$libtool" = yes; then
4198512f934Smrg    while test "X$1" != 'X--mode=compile'; do
4204d9b34d9Smrg      shift
4214d9b34d9Smrg    done
4224d9b34d9Smrg    shift
4234d9b34d9Smrg  fi
4244d9b34d9Smrg
4254d9b34d9Smrg  # Remove `-o $object'.
4264d9b34d9Smrg  IFS=" "
4274d9b34d9Smrg  for arg
4284d9b34d9Smrg  do
4294d9b34d9Smrg    case $arg in
4304d9b34d9Smrg    -o)
4314d9b34d9Smrg      shift
4324d9b34d9Smrg      ;;
4334d9b34d9Smrg    $object)
4344d9b34d9Smrg      shift
4354d9b34d9Smrg      ;;
4364d9b34d9Smrg    *)
4374d9b34d9Smrg      set fnord "$@" "$arg"
4384d9b34d9Smrg      shift # fnord
4394d9b34d9Smrg      shift # $arg
4404d9b34d9Smrg      ;;
4414d9b34d9Smrg    esac
4424d9b34d9Smrg  done
4434d9b34d9Smrg
4444d9b34d9Smrg  test -z "$dashmflag" && dashmflag=-M
4454d9b34d9Smrg  # Require at least two characters before searching for `:'
4464d9b34d9Smrg  # in the target name.  This is to cope with DOS-style filenames:
4474d9b34d9Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
4484d9b34d9Smrg  "$@" $dashmflag |
4494d9b34d9Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
4504d9b34d9Smrg  rm -f "$depfile"
4514d9b34d9Smrg  cat < "$tmpdepfile" > "$depfile"
4524d9b34d9Smrg  tr ' ' '
4534d9b34d9Smrg' < "$tmpdepfile" | \
4544d9b34d9Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
4554d9b34d9Smrg## correctly.  Breaking it into two sed invocations is a workaround.
4564d9b34d9Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
4574d9b34d9Smrg  rm -f "$tmpdepfile"
4584d9b34d9Smrg  ;;
4594d9b34d9Smrg
4604d9b34d9SmrgdashXmstdout)
4614d9b34d9Smrg  # This case only exists to satisfy depend.m4.  It is never actually
4624d9b34d9Smrg  # run, as this mode is specially recognized in the preamble.
4634d9b34d9Smrg  exit 1
4644d9b34d9Smrg  ;;
4654d9b34d9Smrg
4664d9b34d9Smrgmakedepend)
4674d9b34d9Smrg  "$@" || exit $?
4684d9b34d9Smrg  # Remove any Libtool call
4694d9b34d9Smrg  if test "$libtool" = yes; then
4708512f934Smrg    while test "X$1" != 'X--mode=compile'; do
4714d9b34d9Smrg      shift
4724d9b34d9Smrg    done
4734d9b34d9Smrg    shift
4744d9b34d9Smrg  fi
4754d9b34d9Smrg  # X makedepend
4764d9b34d9Smrg  shift
4778512f934Smrg  cleared=no eat=no
4788512f934Smrg  for arg
4798512f934Smrg  do
4804d9b34d9Smrg    case $cleared in
4814d9b34d9Smrg    no)
4824d9b34d9Smrg      set ""; shift
4834d9b34d9Smrg      cleared=yes ;;
4844d9b34d9Smrg    esac
4858512f934Smrg    if test $eat = yes; then
4868512f934Smrg      eat=no
4878512f934Smrg      continue
4888512f934Smrg    fi
4894d9b34d9Smrg    case "$arg" in
4904d9b34d9Smrg    -D*|-I*)
4914d9b34d9Smrg      set fnord "$@" "$arg"; shift ;;
4924d9b34d9Smrg    # Strip any option that makedepend may not understand.  Remove
4934d9b34d9Smrg    # the object too, otherwise makedepend will parse it as a source file.
4948512f934Smrg    -arch)
4958512f934Smrg      eat=yes ;;
4964d9b34d9Smrg    -*|$object)
4974d9b34d9Smrg      ;;
4984d9b34d9Smrg    *)
4994d9b34d9Smrg      set fnord "$@" "$arg"; shift ;;
5004d9b34d9Smrg    esac
5014d9b34d9Smrg  done
5028512f934Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
5034d9b34d9Smrg  touch "$tmpdepfile"
5044d9b34d9Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
5054d9b34d9Smrg  rm -f "$depfile"
5064d9b34d9Smrg  cat < "$tmpdepfile" > "$depfile"
5074d9b34d9Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
5084d9b34d9Smrg' | \
5094d9b34d9Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
5104d9b34d9Smrg## correctly.  Breaking it into two sed invocations is a workaround.
5114d9b34d9Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
5124d9b34d9Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
5134d9b34d9Smrg  ;;
5144d9b34d9Smrg
5154d9b34d9Smrgcpp)
5164d9b34d9Smrg  # Important note: in order to support this mode, a compiler *must*
5174d9b34d9Smrg  # always write the preprocessed file to stdout.
5184d9b34d9Smrg  "$@" || exit $?
5194d9b34d9Smrg
5204d9b34d9Smrg  # Remove the call to Libtool.
5214d9b34d9Smrg  if test "$libtool" = yes; then
5228512f934Smrg    while test "X$1" != 'X--mode=compile'; do
5234d9b34d9Smrg      shift
5244d9b34d9Smrg    done
5254d9b34d9Smrg    shift
5264d9b34d9Smrg  fi
5274d9b34d9Smrg
5284d9b34d9Smrg  # Remove `-o $object'.
5294d9b34d9Smrg  IFS=" "
5304d9b34d9Smrg  for arg
5314d9b34d9Smrg  do
5324d9b34d9Smrg    case $arg in
5334d9b34d9Smrg    -o)
5344d9b34d9Smrg      shift
5354d9b34d9Smrg      ;;
5364d9b34d9Smrg    $object)
5374d9b34d9Smrg      shift
5384d9b34d9Smrg      ;;
5394d9b34d9Smrg    *)
5404d9b34d9Smrg      set fnord "$@" "$arg"
5414d9b34d9Smrg      shift # fnord
5424d9b34d9Smrg      shift # $arg
5434d9b34d9Smrg      ;;
5444d9b34d9Smrg    esac
5454d9b34d9Smrg  done
5464d9b34d9Smrg
5474d9b34d9Smrg  "$@" -E |
5484d9b34d9Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
5494d9b34d9Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
5504d9b34d9Smrg    sed '$ s: \\$::' > "$tmpdepfile"
5514d9b34d9Smrg  rm -f "$depfile"
5524d9b34d9Smrg  echo "$object : \\" > "$depfile"
5534d9b34d9Smrg  cat < "$tmpdepfile" >> "$depfile"
5544d9b34d9Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
5554d9b34d9Smrg  rm -f "$tmpdepfile"
5564d9b34d9Smrg  ;;
5574d9b34d9Smrg
5584d9b34d9Smrgmsvisualcpp)
5594d9b34d9Smrg  # Important note: in order to support this mode, a compiler *must*
5608512f934Smrg  # always write the preprocessed file to stdout.
5614d9b34d9Smrg  "$@" || exit $?
5628512f934Smrg
5638512f934Smrg  # Remove the call to Libtool.
5648512f934Smrg  if test "$libtool" = yes; then
5658512f934Smrg    while test "X$1" != 'X--mode=compile'; do
5668512f934Smrg      shift
5678512f934Smrg    done
5688512f934Smrg    shift
5698512f934Smrg  fi
5708512f934Smrg
5714d9b34d9Smrg  IFS=" "
5724d9b34d9Smrg  for arg
5734d9b34d9Smrg  do
5744d9b34d9Smrg    case "$arg" in
5758512f934Smrg    -o)
5768512f934Smrg      shift
5778512f934Smrg      ;;
5788512f934Smrg    $object)
5798512f934Smrg      shift
5808512f934Smrg      ;;
5814d9b34d9Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
5824d9b34d9Smrg	set fnord "$@"
5834d9b34d9Smrg	shift
5844d9b34d9Smrg	shift
5854d9b34d9Smrg	;;
5864d9b34d9Smrg    *)
5874d9b34d9Smrg	set fnord "$@" "$arg"
5884d9b34d9Smrg	shift
5894d9b34d9Smrg	shift
5904d9b34d9Smrg	;;
5914d9b34d9Smrg    esac
5924d9b34d9Smrg  done
5938512f934Smrg  "$@" -E 2>/dev/null |
5948512f934Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
5954d9b34d9Smrg  rm -f "$depfile"
5964d9b34d9Smrg  echo "$object : \\" > "$depfile"
5978512f934Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
5984d9b34d9Smrg  echo "	" >> "$depfile"
5998512f934Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
6004d9b34d9Smrg  rm -f "$tmpdepfile"
6014d9b34d9Smrg  ;;
6024d9b34d9Smrg
6038512f934Smrgmsvcmsys)
6048512f934Smrg  # This case exists only to let depend.m4 do its work.  It works by
6058512f934Smrg  # looking at the text of this script.  This case will never be run,
6068512f934Smrg  # since it is checked for above.
6078512f934Smrg  exit 1
6088512f934Smrg  ;;
6098512f934Smrg
6104d9b34d9Smrgnone)
6114d9b34d9Smrg  exec "$@"
6124d9b34d9Smrg  ;;
6134d9b34d9Smrg
6144d9b34d9Smrg*)
6154d9b34d9Smrg  echo "Unknown depmode $depmode" 1>&2
6164d9b34d9Smrg  exit 1
6174d9b34d9Smrg  ;;
6184d9b34d9Smrgesac
6194d9b34d9Smrg
6204d9b34d9Smrgexit 0
6214d9b34d9Smrg
6224d9b34d9Smrg# Local Variables:
6234d9b34d9Smrg# mode: shell-script
6244d9b34d9Smrg# sh-indentation: 2
6254d9b34d9Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
6264d9b34d9Smrg# time-stamp-start: "scriptversion="
6274d9b34d9Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
6288512f934Smrg# time-stamp-time-zone: "UTC"
6298512f934Smrg# time-stamp-end: "; # UTC"
6304d9b34d9Smrg# End:
631