depcomp revision 8b22bf3f
18b22bf3fSmrg#! /bin/sh
28b22bf3fSmrg# depcomp - compile a program generating dependencies as side-effects
38b22bf3fSmrg
48b22bf3fSmrgscriptversion=2006-10-15.18
58b22bf3fSmrg
68b22bf3fSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software
78b22bf3fSmrg# Foundation, Inc.
88b22bf3fSmrg
98b22bf3fSmrg# This program is free software; you can redistribute it and/or modify
108b22bf3fSmrg# it under the terms of the GNU General Public License as published by
118b22bf3fSmrg# the Free Software Foundation; either version 2, or (at your option)
128b22bf3fSmrg# any later version.
138b22bf3fSmrg
148b22bf3fSmrg# This program is distributed in the hope that it will be useful,
158b22bf3fSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
168b22bf3fSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
178b22bf3fSmrg# GNU General Public License for more details.
188b22bf3fSmrg
198b22bf3fSmrg# You should have received a copy of the GNU General Public License
208b22bf3fSmrg# along with this program; if not, write to the Free Software
218b22bf3fSmrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
228b22bf3fSmrg# 02110-1301, USA.
238b22bf3fSmrg
248b22bf3fSmrg# As a special exception to the GNU General Public License, if you
258b22bf3fSmrg# distribute this file as part of a program that contains a
268b22bf3fSmrg# configuration script generated by Autoconf, you may include it under
278b22bf3fSmrg# the same distribution terms that you use for the rest of that program.
288b22bf3fSmrg
298b22bf3fSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
308b22bf3fSmrg
318b22bf3fSmrgcase $1 in
328b22bf3fSmrg  '')
338b22bf3fSmrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
348b22bf3fSmrg     exit 1;
358b22bf3fSmrg     ;;
368b22bf3fSmrg  -h | --h*)
378b22bf3fSmrg    cat <<\EOF
388b22bf3fSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
398b22bf3fSmrg
408b22bf3fSmrgRun PROGRAMS ARGS to compile a file, generating dependencies
418b22bf3fSmrgas side-effects.
428b22bf3fSmrg
438b22bf3fSmrgEnvironment variables:
448b22bf3fSmrg  depmode     Dependency tracking mode.
458b22bf3fSmrg  source      Source file read by `PROGRAMS ARGS'.
468b22bf3fSmrg  object      Object file output by `PROGRAMS ARGS'.
478b22bf3fSmrg  DEPDIR      directory where to store dependencies.
488b22bf3fSmrg  depfile     Dependency file to output.
498b22bf3fSmrg  tmpdepfile  Temporary file to use when outputing dependencies.
508b22bf3fSmrg  libtool     Whether libtool is used (yes/no).
518b22bf3fSmrg
528b22bf3fSmrgReport bugs to <bug-automake@gnu.org>.
538b22bf3fSmrgEOF
548b22bf3fSmrg    exit $?
558b22bf3fSmrg    ;;
568b22bf3fSmrg  -v | --v*)
578b22bf3fSmrg    echo "depcomp $scriptversion"
588b22bf3fSmrg    exit $?
598b22bf3fSmrg    ;;
608b22bf3fSmrgesac
618b22bf3fSmrg
628b22bf3fSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
638b22bf3fSmrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
648b22bf3fSmrg  exit 1
658b22bf3fSmrgfi
668b22bf3fSmrg
678b22bf3fSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
688b22bf3fSmrgdepfile=${depfile-`echo "$object" |
698b22bf3fSmrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
708b22bf3fSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
718b22bf3fSmrg
728b22bf3fSmrgrm -f "$tmpdepfile"
738b22bf3fSmrg
748b22bf3fSmrg# Some modes work just like other modes, but use different flags.  We
758b22bf3fSmrg# parameterize here, but still list the modes in the big case below,
768b22bf3fSmrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
778b22bf3fSmrg# here, because this file can only contain one case statement.
788b22bf3fSmrgif test "$depmode" = hp; then
798b22bf3fSmrg  # HP compiler uses -M and no extra arg.
808b22bf3fSmrg  gccflag=-M
818b22bf3fSmrg  depmode=gcc
828b22bf3fSmrgfi
838b22bf3fSmrg
848b22bf3fSmrgif test "$depmode" = dashXmstdout; then
858b22bf3fSmrg   # This is just like dashmstdout with a different argument.
868b22bf3fSmrg   dashmflag=-xM
878b22bf3fSmrg   depmode=dashmstdout
888b22bf3fSmrgfi
898b22bf3fSmrg
908b22bf3fSmrgcase "$depmode" in
918b22bf3fSmrggcc3)
928b22bf3fSmrg## gcc 3 implements dependency tracking that does exactly what
938b22bf3fSmrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
948b22bf3fSmrg## it if -MD -MP comes after the -MF stuff.  Hmm.
958b22bf3fSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
968b22bf3fSmrg## the command line argument order; so add the flags where they
978b22bf3fSmrg## appear in depend2.am.  Note that the slowdown incurred here
988b22bf3fSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
998b22bf3fSmrg  for arg
1008b22bf3fSmrg  do
1018b22bf3fSmrg    case $arg in
1028b22bf3fSmrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
1038b22bf3fSmrg    *)  set fnord "$@" "$arg" ;;
1048b22bf3fSmrg    esac
1058b22bf3fSmrg    shift # fnord
1068b22bf3fSmrg    shift # $arg
1078b22bf3fSmrg  done
1088b22bf3fSmrg  "$@"
1098b22bf3fSmrg  stat=$?
1108b22bf3fSmrg  if test $stat -eq 0; then :
1118b22bf3fSmrg  else
1128b22bf3fSmrg    rm -f "$tmpdepfile"
1138b22bf3fSmrg    exit $stat
1148b22bf3fSmrg  fi
1158b22bf3fSmrg  mv "$tmpdepfile" "$depfile"
1168b22bf3fSmrg  ;;
1178b22bf3fSmrg
1188b22bf3fSmrggcc)
1198b22bf3fSmrg## There are various ways to get dependency output from gcc.  Here's
1208b22bf3fSmrg## why we pick this rather obscure method:
1218b22bf3fSmrg## - Don't want to use -MD because we'd like the dependencies to end
1228b22bf3fSmrg##   up in a subdir.  Having to rename by hand is ugly.
1238b22bf3fSmrg##   (We might end up doing this anyway to support other compilers.)
1248b22bf3fSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
1258b22bf3fSmrg##   -MM, not -M (despite what the docs say).
1268b22bf3fSmrg## - Using -M directly means running the compiler twice (even worse
1278b22bf3fSmrg##   than renaming).
1288b22bf3fSmrg  if test -z "$gccflag"; then
1298b22bf3fSmrg    gccflag=-MD,
1308b22bf3fSmrg  fi
1318b22bf3fSmrg  "$@" -Wp,"$gccflag$tmpdepfile"
1328b22bf3fSmrg  stat=$?
1338b22bf3fSmrg  if test $stat -eq 0; then :
1348b22bf3fSmrg  else
1358b22bf3fSmrg    rm -f "$tmpdepfile"
1368b22bf3fSmrg    exit $stat
1378b22bf3fSmrg  fi
1388b22bf3fSmrg  rm -f "$depfile"
1398b22bf3fSmrg  echo "$object : \\" > "$depfile"
1408b22bf3fSmrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
1418b22bf3fSmrg## The second -e expression handles DOS-style file names with drive letters.
1428b22bf3fSmrg  sed -e 's/^[^:]*: / /' \
1438b22bf3fSmrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
1448b22bf3fSmrg## This next piece of magic avoids the `deleted header file' problem.
1458b22bf3fSmrg## The problem is that when a header file which appears in a .P file
1468b22bf3fSmrg## is deleted, the dependency causes make to die (because there is
1478b22bf3fSmrg## typically no way to rebuild the header).  We avoid this by adding
1488b22bf3fSmrg## dummy dependencies for each header file.  Too bad gcc doesn't do
1498b22bf3fSmrg## this for us directly.
1508b22bf3fSmrg  tr ' ' '
1518b22bf3fSmrg' < "$tmpdepfile" |
1528b22bf3fSmrg## Some versions of gcc put a space before the `:'.  On the theory
1538b22bf3fSmrg## that the space means something, we add a space to the output as
1548b22bf3fSmrg## well.
1558b22bf3fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
1568b22bf3fSmrg## correctly.  Breaking it into two sed invocations is a workaround.
1578b22bf3fSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
1588b22bf3fSmrg  rm -f "$tmpdepfile"
1598b22bf3fSmrg  ;;
1608b22bf3fSmrg
1618b22bf3fSmrghp)
1628b22bf3fSmrg  # This case exists only to let depend.m4 do its work.  It works by
1638b22bf3fSmrg  # looking at the text of this script.  This case will never be run,
1648b22bf3fSmrg  # since it is checked for above.
1658b22bf3fSmrg  exit 1
1668b22bf3fSmrg  ;;
1678b22bf3fSmrg
1688b22bf3fSmrgsgi)
1698b22bf3fSmrg  if test "$libtool" = yes; then
1708b22bf3fSmrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
1718b22bf3fSmrg  else
1728b22bf3fSmrg    "$@" -MDupdate "$tmpdepfile"
1738b22bf3fSmrg  fi
1748b22bf3fSmrg  stat=$?
1758b22bf3fSmrg  if test $stat -eq 0; then :
1768b22bf3fSmrg  else
1778b22bf3fSmrg    rm -f "$tmpdepfile"
1788b22bf3fSmrg    exit $stat
1798b22bf3fSmrg  fi
1808b22bf3fSmrg  rm -f "$depfile"
1818b22bf3fSmrg
1828b22bf3fSmrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
1838b22bf3fSmrg    echo "$object : \\" > "$depfile"
1848b22bf3fSmrg
1858b22bf3fSmrg    # Clip off the initial element (the dependent).  Don't try to be
1868b22bf3fSmrg    # clever and replace this with sed code, as IRIX sed won't handle
1878b22bf3fSmrg    # lines with more than a fixed number of characters (4096 in
1888b22bf3fSmrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
1898b22bf3fSmrg    # the IRIX cc adds comments like `#:fec' to the end of the
1908b22bf3fSmrg    # dependency line.
1918b22bf3fSmrg    tr ' ' '
1928b22bf3fSmrg' < "$tmpdepfile" \
1938b22bf3fSmrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
1948b22bf3fSmrg    tr '
1958b22bf3fSmrg' ' ' >> $depfile
1968b22bf3fSmrg    echo >> $depfile
1978b22bf3fSmrg
1988b22bf3fSmrg    # The second pass generates a dummy entry for each header file.
1998b22bf3fSmrg    tr ' ' '
2008b22bf3fSmrg' < "$tmpdepfile" \
2018b22bf3fSmrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
2028b22bf3fSmrg   >> $depfile
2038b22bf3fSmrg  else
2048b22bf3fSmrg    # The sourcefile does not contain any dependencies, so just
2058b22bf3fSmrg    # store a dummy comment line, to avoid errors with the Makefile
2068b22bf3fSmrg    # "include basename.Plo" scheme.
2078b22bf3fSmrg    echo "#dummy" > "$depfile"
2088b22bf3fSmrg  fi
2098b22bf3fSmrg  rm -f "$tmpdepfile"
2108b22bf3fSmrg  ;;
2118b22bf3fSmrg
2128b22bf3fSmrgaix)
2138b22bf3fSmrg  # The C for AIX Compiler uses -M and outputs the dependencies
2148b22bf3fSmrg  # in a .u file.  In older versions, this file always lives in the
2158b22bf3fSmrg  # current directory.  Also, the AIX compiler puts `$object:' at the
2168b22bf3fSmrg  # start of each line; $object doesn't have directory information.
2178b22bf3fSmrg  # Version 6 uses the directory in both cases.
2188b22bf3fSmrg  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
2198b22bf3fSmrg  tmpdepfile="$stripped.u"
2208b22bf3fSmrg  if test "$libtool" = yes; then
2218b22bf3fSmrg    "$@" -Wc,-M
2228b22bf3fSmrg  else
2238b22bf3fSmrg    "$@" -M
2248b22bf3fSmrg  fi
2258b22bf3fSmrg  stat=$?
2268b22bf3fSmrg
2278b22bf3fSmrg  if test -f "$tmpdepfile"; then :
2288b22bf3fSmrg  else
2298b22bf3fSmrg    stripped=`echo "$stripped" | sed 's,^.*/,,'`
2308b22bf3fSmrg    tmpdepfile="$stripped.u"
2318b22bf3fSmrg  fi
2328b22bf3fSmrg
2338b22bf3fSmrg  if test $stat -eq 0; then :
2348b22bf3fSmrg  else
2358b22bf3fSmrg    rm -f "$tmpdepfile"
2368b22bf3fSmrg    exit $stat
2378b22bf3fSmrg  fi
2388b22bf3fSmrg
2398b22bf3fSmrg  if test -f "$tmpdepfile"; then
2408b22bf3fSmrg    outname="$stripped.o"
2418b22bf3fSmrg    # Each line is of the form `foo.o: dependent.h'.
2428b22bf3fSmrg    # Do two passes, one to just change these to
2438b22bf3fSmrg    # `$object: dependent.h' and one to simply `dependent.h:'.
2448b22bf3fSmrg    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
2458b22bf3fSmrg    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
2468b22bf3fSmrg  else
2478b22bf3fSmrg    # The sourcefile does not contain any dependencies, so just
2488b22bf3fSmrg    # store a dummy comment line, to avoid errors with the Makefile
2498b22bf3fSmrg    # "include basename.Plo" scheme.
2508b22bf3fSmrg    echo "#dummy" > "$depfile"
2518b22bf3fSmrg  fi
2528b22bf3fSmrg  rm -f "$tmpdepfile"
2538b22bf3fSmrg  ;;
2548b22bf3fSmrg
2558b22bf3fSmrgicc)
2568b22bf3fSmrg  # Intel's C compiler understands `-MD -MF file'.  However on
2578b22bf3fSmrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
2588b22bf3fSmrg  # ICC 7.0 will fill foo.d with something like
2598b22bf3fSmrg  #    foo.o: sub/foo.c
2608b22bf3fSmrg  #    foo.o: sub/foo.h
2618b22bf3fSmrg  # which is wrong.  We want:
2628b22bf3fSmrg  #    sub/foo.o: sub/foo.c
2638b22bf3fSmrg  #    sub/foo.o: sub/foo.h
2648b22bf3fSmrg  #    sub/foo.c:
2658b22bf3fSmrg  #    sub/foo.h:
2668b22bf3fSmrg  # ICC 7.1 will output
2678b22bf3fSmrg  #    foo.o: sub/foo.c sub/foo.h
2688b22bf3fSmrg  # and will wrap long lines using \ :
2698b22bf3fSmrg  #    foo.o: sub/foo.c ... \
2708b22bf3fSmrg  #     sub/foo.h ... \
2718b22bf3fSmrg  #     ...
2728b22bf3fSmrg
2738b22bf3fSmrg  "$@" -MD -MF "$tmpdepfile"
2748b22bf3fSmrg  stat=$?
2758b22bf3fSmrg  if test $stat -eq 0; then :
2768b22bf3fSmrg  else
2778b22bf3fSmrg    rm -f "$tmpdepfile"
2788b22bf3fSmrg    exit $stat
2798b22bf3fSmrg  fi
2808b22bf3fSmrg  rm -f "$depfile"
2818b22bf3fSmrg  # Each line is of the form `foo.o: dependent.h',
2828b22bf3fSmrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
2838b22bf3fSmrg  # Do two passes, one to just change these to
2848b22bf3fSmrg  # `$object: dependent.h' and one to simply `dependent.h:'.
2858b22bf3fSmrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
2868b22bf3fSmrg  # Some versions of the HPUX 10.20 sed can't process this invocation
2878b22bf3fSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
2888b22bf3fSmrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
2898b22bf3fSmrg    sed -e 's/$/ :/' >> "$depfile"
2908b22bf3fSmrg  rm -f "$tmpdepfile"
2918b22bf3fSmrg  ;;
2928b22bf3fSmrg
2938b22bf3fSmrghp2)
2948b22bf3fSmrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
2958b22bf3fSmrg  # compilers, which have integrated preprocessors.  The correct option
2968b22bf3fSmrg  # to use with these is +Maked; it writes dependencies to a file named
2978b22bf3fSmrg  # 'foo.d', which lands next to the object file, wherever that
2988b22bf3fSmrg  # happens to be.
2998b22bf3fSmrg  # Much of this is similar to the tru64 case; see comments there.
3008b22bf3fSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3018b22bf3fSmrg  test "x$dir" = "x$object" && dir=
3028b22bf3fSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3038b22bf3fSmrg  if test "$libtool" = yes; then
3048b22bf3fSmrg    tmpdepfile1=$dir$base.d
3058b22bf3fSmrg    tmpdepfile2=$dir.libs/$base.d
3068b22bf3fSmrg    "$@" -Wc,+Maked
3078b22bf3fSmrg  else
3088b22bf3fSmrg    tmpdepfile1=$dir$base.d
3098b22bf3fSmrg    tmpdepfile2=$dir$base.d
3108b22bf3fSmrg    "$@" +Maked
3118b22bf3fSmrg  fi
3128b22bf3fSmrg  stat=$?
3138b22bf3fSmrg  if test $stat -eq 0; then :
3148b22bf3fSmrg  else
3158b22bf3fSmrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
3168b22bf3fSmrg     exit $stat
3178b22bf3fSmrg  fi
3188b22bf3fSmrg
3198b22bf3fSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
3208b22bf3fSmrg  do
3218b22bf3fSmrg    test -f "$tmpdepfile" && break
3228b22bf3fSmrg  done
3238b22bf3fSmrg  if test -f "$tmpdepfile"; then
3248b22bf3fSmrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
3258b22bf3fSmrg    # Add `dependent.h:' lines.
3268b22bf3fSmrg    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
3278b22bf3fSmrg  else
3288b22bf3fSmrg    echo "#dummy" > "$depfile"
3298b22bf3fSmrg  fi
3308b22bf3fSmrg  rm -f "$tmpdepfile" "$tmpdepfile2"
3318b22bf3fSmrg  ;;
3328b22bf3fSmrg
3338b22bf3fSmrgtru64)
3348b22bf3fSmrg   # The Tru64 compiler uses -MD to generate dependencies as a side
3358b22bf3fSmrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
3368b22bf3fSmrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
3378b22bf3fSmrg   # dependencies in `foo.d' instead, so we check for that too.
3388b22bf3fSmrg   # Subdirectories are respected.
3398b22bf3fSmrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3408b22bf3fSmrg   test "x$dir" = "x$object" && dir=
3418b22bf3fSmrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3428b22bf3fSmrg
3438b22bf3fSmrg   if test "$libtool" = yes; then
3448b22bf3fSmrg      # With Tru64 cc, shared objects can also be used to make a
3458b22bf3fSmrg      # static library.  This mechanism is used in libtool 1.4 series to
3468b22bf3fSmrg      # handle both shared and static libraries in a single compilation.
3478b22bf3fSmrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
3488b22bf3fSmrg      #
3498b22bf3fSmrg      # With libtool 1.5 this exception was removed, and libtool now
3508b22bf3fSmrg      # generates 2 separate objects for the 2 libraries.  These two
3518b22bf3fSmrg      # compilations output dependencies in $dir.libs/$base.o.d and
3528b22bf3fSmrg      # in $dir$base.o.d.  We have to check for both files, because
3538b22bf3fSmrg      # one of the two compilations can be disabled.  We should prefer
3548b22bf3fSmrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
3558b22bf3fSmrg      # automatically cleaned when .libs/ is deleted, while ignoring
3568b22bf3fSmrg      # the former would cause a distcleancheck panic.
3578b22bf3fSmrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
3588b22bf3fSmrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
3598b22bf3fSmrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
3608b22bf3fSmrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
3618b22bf3fSmrg      "$@" -Wc,-MD
3628b22bf3fSmrg   else
3638b22bf3fSmrg      tmpdepfile1=$dir$base.o.d
3648b22bf3fSmrg      tmpdepfile2=$dir$base.d
3658b22bf3fSmrg      tmpdepfile3=$dir$base.d
3668b22bf3fSmrg      tmpdepfile4=$dir$base.d
3678b22bf3fSmrg      "$@" -MD
3688b22bf3fSmrg   fi
3698b22bf3fSmrg
3708b22bf3fSmrg   stat=$?
3718b22bf3fSmrg   if test $stat -eq 0; then :
3728b22bf3fSmrg   else
3738b22bf3fSmrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3748b22bf3fSmrg      exit $stat
3758b22bf3fSmrg   fi
3768b22bf3fSmrg
3778b22bf3fSmrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3788b22bf3fSmrg   do
3798b22bf3fSmrg     test -f "$tmpdepfile" && break
3808b22bf3fSmrg   done
3818b22bf3fSmrg   if test -f "$tmpdepfile"; then
3828b22bf3fSmrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
3838b22bf3fSmrg      # That's a tab and a space in the [].
3848b22bf3fSmrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
3858b22bf3fSmrg   else
3868b22bf3fSmrg      echo "#dummy" > "$depfile"
3878b22bf3fSmrg   fi
3888b22bf3fSmrg   rm -f "$tmpdepfile"
3898b22bf3fSmrg   ;;
3908b22bf3fSmrg
3918b22bf3fSmrg#nosideeffect)
3928b22bf3fSmrg  # This comment above is used by automake to tell side-effect
3938b22bf3fSmrg  # dependency tracking mechanisms from slower ones.
3948b22bf3fSmrg
3958b22bf3fSmrgdashmstdout)
3968b22bf3fSmrg  # Important note: in order to support this mode, a compiler *must*
3978b22bf3fSmrg  # always write the preprocessed file to stdout, regardless of -o.
3988b22bf3fSmrg  "$@" || exit $?
3998b22bf3fSmrg
4008b22bf3fSmrg  # Remove the call to Libtool.
4018b22bf3fSmrg  if test "$libtool" = yes; then
4028b22bf3fSmrg    while test $1 != '--mode=compile'; do
4038b22bf3fSmrg      shift
4048b22bf3fSmrg    done
4058b22bf3fSmrg    shift
4068b22bf3fSmrg  fi
4078b22bf3fSmrg
4088b22bf3fSmrg  # Remove `-o $object'.
4098b22bf3fSmrg  IFS=" "
4108b22bf3fSmrg  for arg
4118b22bf3fSmrg  do
4128b22bf3fSmrg    case $arg in
4138b22bf3fSmrg    -o)
4148b22bf3fSmrg      shift
4158b22bf3fSmrg      ;;
4168b22bf3fSmrg    $object)
4178b22bf3fSmrg      shift
4188b22bf3fSmrg      ;;
4198b22bf3fSmrg    *)
4208b22bf3fSmrg      set fnord "$@" "$arg"
4218b22bf3fSmrg      shift # fnord
4228b22bf3fSmrg      shift # $arg
4238b22bf3fSmrg      ;;
4248b22bf3fSmrg    esac
4258b22bf3fSmrg  done
4268b22bf3fSmrg
4278b22bf3fSmrg  test -z "$dashmflag" && dashmflag=-M
4288b22bf3fSmrg  # Require at least two characters before searching for `:'
4298b22bf3fSmrg  # in the target name.  This is to cope with DOS-style filenames:
4308b22bf3fSmrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
4318b22bf3fSmrg  "$@" $dashmflag |
4328b22bf3fSmrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
4338b22bf3fSmrg  rm -f "$depfile"
4348b22bf3fSmrg  cat < "$tmpdepfile" > "$depfile"
4358b22bf3fSmrg  tr ' ' '
4368b22bf3fSmrg' < "$tmpdepfile" | \
4378b22bf3fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
4388b22bf3fSmrg## correctly.  Breaking it into two sed invocations is a workaround.
4398b22bf3fSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
4408b22bf3fSmrg  rm -f "$tmpdepfile"
4418b22bf3fSmrg  ;;
4428b22bf3fSmrg
4438b22bf3fSmrgdashXmstdout)
4448b22bf3fSmrg  # This case only exists to satisfy depend.m4.  It is never actually
4458b22bf3fSmrg  # run, as this mode is specially recognized in the preamble.
4468b22bf3fSmrg  exit 1
4478b22bf3fSmrg  ;;
4488b22bf3fSmrg
4498b22bf3fSmrgmakedepend)
4508b22bf3fSmrg  "$@" || exit $?
4518b22bf3fSmrg  # Remove any Libtool call
4528b22bf3fSmrg  if test "$libtool" = yes; then
4538b22bf3fSmrg    while test $1 != '--mode=compile'; do
4548b22bf3fSmrg      shift
4558b22bf3fSmrg    done
4568b22bf3fSmrg    shift
4578b22bf3fSmrg  fi
4588b22bf3fSmrg  # X makedepend
4598b22bf3fSmrg  shift
4608b22bf3fSmrg  cleared=no
4618b22bf3fSmrg  for arg in "$@"; do
4628b22bf3fSmrg    case $cleared in
4638b22bf3fSmrg    no)
4648b22bf3fSmrg      set ""; shift
4658b22bf3fSmrg      cleared=yes ;;
4668b22bf3fSmrg    esac
4678b22bf3fSmrg    case "$arg" in
4688b22bf3fSmrg    -D*|-I*)
4698b22bf3fSmrg      set fnord "$@" "$arg"; shift ;;
4708b22bf3fSmrg    # Strip any option that makedepend may not understand.  Remove
4718b22bf3fSmrg    # the object too, otherwise makedepend will parse it as a source file.
4728b22bf3fSmrg    -*|$object)
4738b22bf3fSmrg      ;;
4748b22bf3fSmrg    *)
4758b22bf3fSmrg      set fnord "$@" "$arg"; shift ;;
4768b22bf3fSmrg    esac
4778b22bf3fSmrg  done
4788b22bf3fSmrg  obj_suffix="`echo $object | sed 's/^.*\././'`"
4798b22bf3fSmrg  touch "$tmpdepfile"
4808b22bf3fSmrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
4818b22bf3fSmrg  rm -f "$depfile"
4828b22bf3fSmrg  cat < "$tmpdepfile" > "$depfile"
4838b22bf3fSmrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
4848b22bf3fSmrg' | \
4858b22bf3fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
4868b22bf3fSmrg## correctly.  Breaking it into two sed invocations is a workaround.
4878b22bf3fSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
4888b22bf3fSmrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
4898b22bf3fSmrg  ;;
4908b22bf3fSmrg
4918b22bf3fSmrgcpp)
4928b22bf3fSmrg  # Important note: in order to support this mode, a compiler *must*
4938b22bf3fSmrg  # always write the preprocessed file to stdout.
4948b22bf3fSmrg  "$@" || exit $?
4958b22bf3fSmrg
4968b22bf3fSmrg  # Remove the call to Libtool.
4978b22bf3fSmrg  if test "$libtool" = yes; then
4988b22bf3fSmrg    while test $1 != '--mode=compile'; do
4998b22bf3fSmrg      shift
5008b22bf3fSmrg    done
5018b22bf3fSmrg    shift
5028b22bf3fSmrg  fi
5038b22bf3fSmrg
5048b22bf3fSmrg  # Remove `-o $object'.
5058b22bf3fSmrg  IFS=" "
5068b22bf3fSmrg  for arg
5078b22bf3fSmrg  do
5088b22bf3fSmrg    case $arg in
5098b22bf3fSmrg    -o)
5108b22bf3fSmrg      shift
5118b22bf3fSmrg      ;;
5128b22bf3fSmrg    $object)
5138b22bf3fSmrg      shift
5148b22bf3fSmrg      ;;
5158b22bf3fSmrg    *)
5168b22bf3fSmrg      set fnord "$@" "$arg"
5178b22bf3fSmrg      shift # fnord
5188b22bf3fSmrg      shift # $arg
5198b22bf3fSmrg      ;;
5208b22bf3fSmrg    esac
5218b22bf3fSmrg  done
5228b22bf3fSmrg
5238b22bf3fSmrg  "$@" -E |
5248b22bf3fSmrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
5258b22bf3fSmrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
5268b22bf3fSmrg    sed '$ s: \\$::' > "$tmpdepfile"
5278b22bf3fSmrg  rm -f "$depfile"
5288b22bf3fSmrg  echo "$object : \\" > "$depfile"
5298b22bf3fSmrg  cat < "$tmpdepfile" >> "$depfile"
5308b22bf3fSmrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
5318b22bf3fSmrg  rm -f "$tmpdepfile"
5328b22bf3fSmrg  ;;
5338b22bf3fSmrg
5348b22bf3fSmrgmsvisualcpp)
5358b22bf3fSmrg  # Important note: in order to support this mode, a compiler *must*
5368b22bf3fSmrg  # always write the preprocessed file to stdout, regardless of -o,
5378b22bf3fSmrg  # because we must use -o when running libtool.
5388b22bf3fSmrg  "$@" || exit $?
5398b22bf3fSmrg  IFS=" "
5408b22bf3fSmrg  for arg
5418b22bf3fSmrg  do
5428b22bf3fSmrg    case "$arg" in
5438b22bf3fSmrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
5448b22bf3fSmrg	set fnord "$@"
5458b22bf3fSmrg	shift
5468b22bf3fSmrg	shift
5478b22bf3fSmrg	;;
5488b22bf3fSmrg    *)
5498b22bf3fSmrg	set fnord "$@" "$arg"
5508b22bf3fSmrg	shift
5518b22bf3fSmrg	shift
5528b22bf3fSmrg	;;
5538b22bf3fSmrg    esac
5548b22bf3fSmrg  done
5558b22bf3fSmrg  "$@" -E |
5568b22bf3fSmrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
5578b22bf3fSmrg  rm -f "$depfile"
5588b22bf3fSmrg  echo "$object : \\" > "$depfile"
5598b22bf3fSmrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
5608b22bf3fSmrg  echo "	" >> "$depfile"
5618b22bf3fSmrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
5628b22bf3fSmrg  rm -f "$tmpdepfile"
5638b22bf3fSmrg  ;;
5648b22bf3fSmrg
5658b22bf3fSmrgnone)
5668b22bf3fSmrg  exec "$@"
5678b22bf3fSmrg  ;;
5688b22bf3fSmrg
5698b22bf3fSmrg*)
5708b22bf3fSmrg  echo "Unknown depmode $depmode" 1>&2
5718b22bf3fSmrg  exit 1
5728b22bf3fSmrg  ;;
5738b22bf3fSmrgesac
5748b22bf3fSmrg
5758b22bf3fSmrgexit 0
5768b22bf3fSmrg
5778b22bf3fSmrg# Local Variables:
5788b22bf3fSmrg# mode: shell-script
5798b22bf3fSmrg# sh-indentation: 2
5808b22bf3fSmrg# eval: (add-hook 'write-file-hooks 'time-stamp)
5818b22bf3fSmrg# time-stamp-start: "scriptversion="
5828b22bf3fSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
5838b22bf3fSmrg# time-stamp-end: "$"
5848b22bf3fSmrg# End:
585