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