depcomp revision b4ee4795
11ab64890Smrg#! /bin/sh
21ab64890Smrg# depcomp - compile a program generating dependencies as side-effects
31ab64890Smrg
4b4ee4795Smrgscriptversion=2009-04-28.21; # UTC
51ab64890Smrg
6b4ee4795Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
7b4ee4795Smrg# Software Foundation, Inc.
81ab64890Smrg
91ab64890Smrg# This program is free software; you can redistribute it and/or modify
101ab64890Smrg# it under the terms of the GNU General Public License as published by
111ab64890Smrg# the Free Software Foundation; either version 2, or (at your option)
121ab64890Smrg# any later version.
131ab64890Smrg
141ab64890Smrg# This program is distributed in the hope that it will be useful,
151ab64890Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
161ab64890Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
171ab64890Smrg# GNU General Public License for more details.
181ab64890Smrg
191ab64890Smrg# You should have received a copy of the GNU General Public License
20b4ee4795Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
211ab64890Smrg
221ab64890Smrg# As a special exception to the GNU General Public License, if you
231ab64890Smrg# distribute this file as part of a program that contains a
241ab64890Smrg# configuration script generated by Autoconf, you may include it under
251ab64890Smrg# the same distribution terms that you use for the rest of that program.
261ab64890Smrg
271ab64890Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
281ab64890Smrg
291ab64890Smrgcase $1 in
301ab64890Smrg  '')
311ab64890Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
321ab64890Smrg     exit 1;
331ab64890Smrg     ;;
341ab64890Smrg  -h | --h*)
351ab64890Smrg    cat <<\EOF
361ab64890SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
371ab64890Smrg
381ab64890SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
391ab64890Smrgas side-effects.
401ab64890Smrg
411ab64890SmrgEnvironment variables:
421ab64890Smrg  depmode     Dependency tracking mode.
431ab64890Smrg  source      Source file read by `PROGRAMS ARGS'.
441ab64890Smrg  object      Object file output by `PROGRAMS ARGS'.
451ab64890Smrg  DEPDIR      directory where to store dependencies.
461ab64890Smrg  depfile     Dependency file to output.
471ab64890Smrg  tmpdepfile  Temporary file to use when outputing dependencies.
481ab64890Smrg  libtool     Whether libtool is used (yes/no).
491ab64890Smrg
501ab64890SmrgReport bugs to <bug-automake@gnu.org>.
511ab64890SmrgEOF
521ab64890Smrg    exit $?
531ab64890Smrg    ;;
541ab64890Smrg  -v | --v*)
551ab64890Smrg    echo "depcomp $scriptversion"
561ab64890Smrg    exit $?
571ab64890Smrg    ;;
581ab64890Smrgesac
591ab64890Smrg
601ab64890Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
611ab64890Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
621ab64890Smrg  exit 1
631ab64890Smrgfi
641ab64890Smrg
651ab64890Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
661ab64890Smrgdepfile=${depfile-`echo "$object" |
671ab64890Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
681ab64890Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
691ab64890Smrg
701ab64890Smrgrm -f "$tmpdepfile"
711ab64890Smrg
721ab64890Smrg# Some modes work just like other modes, but use different flags.  We
731ab64890Smrg# parameterize here, but still list the modes in the big case below,
741ab64890Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
751ab64890Smrg# here, because this file can only contain one case statement.
761ab64890Smrgif test "$depmode" = hp; then
771ab64890Smrg  # HP compiler uses -M and no extra arg.
781ab64890Smrg  gccflag=-M
791ab64890Smrg  depmode=gcc
801ab64890Smrgfi
811ab64890Smrg
821ab64890Smrgif test "$depmode" = dashXmstdout; then
831ab64890Smrg   # This is just like dashmstdout with a different argument.
841ab64890Smrg   dashmflag=-xM
851ab64890Smrg   depmode=dashmstdout
861ab64890Smrgfi
871ab64890Smrg
88b4ee4795Smrgcygpath_u="cygpath -u -f -"
89b4ee4795Smrgif test "$depmode" = msvcmsys; then
90b4ee4795Smrg   # This is just like msvisualcpp but w/o cygpath translation.
91b4ee4795Smrg   # Just convert the backslash-escaped backslashes to single forward
92b4ee4795Smrg   # slashes to satisfy depend.m4
93b4ee4795Smrg   cygpath_u="sed s,\\\\\\\\,/,g"
94b4ee4795Smrg   depmode=msvisualcpp
95b4ee4795Smrgfi
96b4ee4795Smrg
971ab64890Smrgcase "$depmode" in
981ab64890Smrggcc3)
991ab64890Smrg## gcc 3 implements dependency tracking that does exactly what
1001ab64890Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
1011ab64890Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
1021ab64890Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
1031ab64890Smrg## the command line argument order; so add the flags where they
1041ab64890Smrg## appear in depend2.am.  Note that the slowdown incurred here
1051ab64890Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
1061ab64890Smrg  for arg
1071ab64890Smrg  do
1081ab64890Smrg    case $arg in
1091ab64890Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
1101ab64890Smrg    *)  set fnord "$@" "$arg" ;;
1111ab64890Smrg    esac
1121ab64890Smrg    shift # fnord
1131ab64890Smrg    shift # $arg
1141ab64890Smrg  done
1151ab64890Smrg  "$@"
1161ab64890Smrg  stat=$?
1171ab64890Smrg  if test $stat -eq 0; then :
1181ab64890Smrg  else
1191ab64890Smrg    rm -f "$tmpdepfile"
1201ab64890Smrg    exit $stat
1211ab64890Smrg  fi
1221ab64890Smrg  mv "$tmpdepfile" "$depfile"
1231ab64890Smrg  ;;
1241ab64890Smrg
1251ab64890Smrggcc)
1261ab64890Smrg## There are various ways to get dependency output from gcc.  Here's
1271ab64890Smrg## why we pick this rather obscure method:
1281ab64890Smrg## - Don't want to use -MD because we'd like the dependencies to end
1291ab64890Smrg##   up in a subdir.  Having to rename by hand is ugly.
1301ab64890Smrg##   (We might end up doing this anyway to support other compilers.)
1311ab64890Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
1321ab64890Smrg##   -MM, not -M (despite what the docs say).
1331ab64890Smrg## - Using -M directly means running the compiler twice (even worse
1341ab64890Smrg##   than renaming).
1351ab64890Smrg  if test -z "$gccflag"; then
1361ab64890Smrg    gccflag=-MD,
1371ab64890Smrg  fi
1381ab64890Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
1391ab64890Smrg  stat=$?
1401ab64890Smrg  if test $stat -eq 0; then :
1411ab64890Smrg  else
1421ab64890Smrg    rm -f "$tmpdepfile"
1431ab64890Smrg    exit $stat
1441ab64890Smrg  fi
1451ab64890Smrg  rm -f "$depfile"
1461ab64890Smrg  echo "$object : \\" > "$depfile"
1471ab64890Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
1481ab64890Smrg## The second -e expression handles DOS-style file names with drive letters.
1491ab64890Smrg  sed -e 's/^[^:]*: / /' \
1501ab64890Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
1511ab64890Smrg## This next piece of magic avoids the `deleted header file' problem.
1521ab64890Smrg## The problem is that when a header file which appears in a .P file
1531ab64890Smrg## is deleted, the dependency causes make to die (because there is
1541ab64890Smrg## typically no way to rebuild the header).  We avoid this by adding
1551ab64890Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
1561ab64890Smrg## this for us directly.
1571ab64890Smrg  tr ' ' '
1581ab64890Smrg' < "$tmpdepfile" |
1591ab64890Smrg## Some versions of gcc put a space before the `:'.  On the theory
1601ab64890Smrg## that the space means something, we add a space to the output as
1611ab64890Smrg## well.
1621ab64890Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
1631ab64890Smrg## correctly.  Breaking it into two sed invocations is a workaround.
1641ab64890Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
1651ab64890Smrg  rm -f "$tmpdepfile"
1661ab64890Smrg  ;;
1671ab64890Smrg
1681ab64890Smrghp)
1691ab64890Smrg  # This case exists only to let depend.m4 do its work.  It works by
1701ab64890Smrg  # looking at the text of this script.  This case will never be run,
1711ab64890Smrg  # since it is checked for above.
1721ab64890Smrg  exit 1
1731ab64890Smrg  ;;
1741ab64890Smrg
1751ab64890Smrgsgi)
1761ab64890Smrg  if test "$libtool" = yes; then
1771ab64890Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
1781ab64890Smrg  else
1791ab64890Smrg    "$@" -MDupdate "$tmpdepfile"
1801ab64890Smrg  fi
1811ab64890Smrg  stat=$?
1821ab64890Smrg  if test $stat -eq 0; then :
1831ab64890Smrg  else
1841ab64890Smrg    rm -f "$tmpdepfile"
1851ab64890Smrg    exit $stat
1861ab64890Smrg  fi
1871ab64890Smrg  rm -f "$depfile"
1881ab64890Smrg
1891ab64890Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
1901ab64890Smrg    echo "$object : \\" > "$depfile"
1911ab64890Smrg
1921ab64890Smrg    # Clip off the initial element (the dependent).  Don't try to be
1931ab64890Smrg    # clever and replace this with sed code, as IRIX sed won't handle
1941ab64890Smrg    # lines with more than a fixed number of characters (4096 in
1951ab64890Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
1961ab64890Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
1971ab64890Smrg    # dependency line.
1981ab64890Smrg    tr ' ' '
1991ab64890Smrg' < "$tmpdepfile" \
2001ab64890Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
2011ab64890Smrg    tr '
202b4ee4795Smrg' ' ' >> "$depfile"
203b4ee4795Smrg    echo >> "$depfile"
2041ab64890Smrg
2051ab64890Smrg    # The second pass generates a dummy entry for each header file.
2061ab64890Smrg    tr ' ' '
2071ab64890Smrg' < "$tmpdepfile" \
2081ab64890Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
209b4ee4795Smrg   >> "$depfile"
2101ab64890Smrg  else
2111ab64890Smrg    # The sourcefile does not contain any dependencies, so just
2121ab64890Smrg    # store a dummy comment line, to avoid errors with the Makefile
2131ab64890Smrg    # "include basename.Plo" scheme.
2141ab64890Smrg    echo "#dummy" > "$depfile"
2151ab64890Smrg  fi
2161ab64890Smrg  rm -f "$tmpdepfile"
2171ab64890Smrg  ;;
2181ab64890Smrg
2191ab64890Smrgaix)
2201ab64890Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
2211ab64890Smrg  # in a .u file.  In older versions, this file always lives in the
2221ab64890Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
2231ab64890Smrg  # start of each line; $object doesn't have directory information.
2241ab64890Smrg  # Version 6 uses the directory in both cases.
2251ab64890Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
2261ab64890Smrg  test "x$dir" = "x$object" && dir=
2271ab64890Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
2281ab64890Smrg  if test "$libtool" = yes; then
2291ab64890Smrg    tmpdepfile1=$dir$base.u
2301ab64890Smrg    tmpdepfile2=$base.u
2311ab64890Smrg    tmpdepfile3=$dir.libs/$base.u
2321ab64890Smrg    "$@" -Wc,-M
2331ab64890Smrg  else
2341ab64890Smrg    tmpdepfile1=$dir$base.u
2351ab64890Smrg    tmpdepfile2=$dir$base.u
2361ab64890Smrg    tmpdepfile3=$dir$base.u
2371ab64890Smrg    "$@" -M
2381ab64890Smrg  fi
2391ab64890Smrg  stat=$?
2401ab64890Smrg
2411ab64890Smrg  if test $stat -eq 0; then :
2421ab64890Smrg  else
2431ab64890Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2441ab64890Smrg    exit $stat
2451ab64890Smrg  fi
2461ab64890Smrg
2471ab64890Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2481ab64890Smrg  do
2491ab64890Smrg    test -f "$tmpdepfile" && break
2501ab64890Smrg  done
2511ab64890Smrg  if test -f "$tmpdepfile"; then
2521ab64890Smrg    # Each line is of the form `foo.o: dependent.h'.
2531ab64890Smrg    # Do two passes, one to just change these to
2541ab64890Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
2551ab64890Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
2561ab64890Smrg    # That's a tab and a space in the [].
2571ab64890Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
2581ab64890Smrg  else
2591ab64890Smrg    # The sourcefile does not contain any dependencies, so just
2601ab64890Smrg    # store a dummy comment line, to avoid errors with the Makefile
2611ab64890Smrg    # "include basename.Plo" scheme.
2621ab64890Smrg    echo "#dummy" > "$depfile"
2631ab64890Smrg  fi
2641ab64890Smrg  rm -f "$tmpdepfile"
2651ab64890Smrg  ;;
2661ab64890Smrg
2671ab64890Smrgicc)
2681ab64890Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
2691ab64890Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
2701ab64890Smrg  # ICC 7.0 will fill foo.d with something like
2711ab64890Smrg  #    foo.o: sub/foo.c
2721ab64890Smrg  #    foo.o: sub/foo.h
2731ab64890Smrg  # which is wrong.  We want:
2741ab64890Smrg  #    sub/foo.o: sub/foo.c
2751ab64890Smrg  #    sub/foo.o: sub/foo.h
2761ab64890Smrg  #    sub/foo.c:
2771ab64890Smrg  #    sub/foo.h:
2781ab64890Smrg  # ICC 7.1 will output
2791ab64890Smrg  #    foo.o: sub/foo.c sub/foo.h
2801ab64890Smrg  # and will wrap long lines using \ :
2811ab64890Smrg  #    foo.o: sub/foo.c ... \
2821ab64890Smrg  #     sub/foo.h ... \
2831ab64890Smrg  #     ...
2841ab64890Smrg
2851ab64890Smrg  "$@" -MD -MF "$tmpdepfile"
2861ab64890Smrg  stat=$?
2871ab64890Smrg  if test $stat -eq 0; then :
2881ab64890Smrg  else
2891ab64890Smrg    rm -f "$tmpdepfile"
2901ab64890Smrg    exit $stat
2911ab64890Smrg  fi
2921ab64890Smrg  rm -f "$depfile"
2931ab64890Smrg  # Each line is of the form `foo.o: dependent.h',
2941ab64890Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
2951ab64890Smrg  # Do two passes, one to just change these to
2961ab64890Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
2971ab64890Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
2981ab64890Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
2991ab64890Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
3001ab64890Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
3011ab64890Smrg    sed -e 's/$/ :/' >> "$depfile"
3021ab64890Smrg  rm -f "$tmpdepfile"
3031ab64890Smrg  ;;
3041ab64890Smrg
3051ab64890Smrghp2)
3061ab64890Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
3071ab64890Smrg  # compilers, which have integrated preprocessors.  The correct option
3081ab64890Smrg  # to use with these is +Maked; it writes dependencies to a file named
3091ab64890Smrg  # 'foo.d', which lands next to the object file, wherever that
3101ab64890Smrg  # happens to be.
3111ab64890Smrg  # Much of this is similar to the tru64 case; see comments there.
3121ab64890Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3131ab64890Smrg  test "x$dir" = "x$object" && dir=
3141ab64890Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3151ab64890Smrg  if test "$libtool" = yes; then
3161ab64890Smrg    tmpdepfile1=$dir$base.d
3171ab64890Smrg    tmpdepfile2=$dir.libs/$base.d
3181ab64890Smrg    "$@" -Wc,+Maked
3191ab64890Smrg  else
3201ab64890Smrg    tmpdepfile1=$dir$base.d
3211ab64890Smrg    tmpdepfile2=$dir$base.d
3221ab64890Smrg    "$@" +Maked
3231ab64890Smrg  fi
3241ab64890Smrg  stat=$?
3251ab64890Smrg  if test $stat -eq 0; then :
3261ab64890Smrg  else
3271ab64890Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
3281ab64890Smrg     exit $stat
3291ab64890Smrg  fi
3301ab64890Smrg
3311ab64890Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
3321ab64890Smrg  do
3331ab64890Smrg    test -f "$tmpdepfile" && break
3341ab64890Smrg  done
3351ab64890Smrg  if test -f "$tmpdepfile"; then
3361ab64890Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
3371ab64890Smrg    # Add `dependent.h:' lines.
338b4ee4795Smrg    sed -ne '2,${
339b4ee4795Smrg	       s/^ *//
340b4ee4795Smrg	       s/ \\*$//
341b4ee4795Smrg	       s/$/:/
342b4ee4795Smrg	       p
343b4ee4795Smrg	     }' "$tmpdepfile" >> "$depfile"
3441ab64890Smrg  else
3451ab64890Smrg    echo "#dummy" > "$depfile"
3461ab64890Smrg  fi
3471ab64890Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
3481ab64890Smrg  ;;
3491ab64890Smrg
3501ab64890Smrgtru64)
3511ab64890Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
3521ab64890Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
3531ab64890Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
3541ab64890Smrg   # dependencies in `foo.d' instead, so we check for that too.
3551ab64890Smrg   # Subdirectories are respected.
3561ab64890Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3571ab64890Smrg   test "x$dir" = "x$object" && dir=
3581ab64890Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3591ab64890Smrg
3601ab64890Smrg   if test "$libtool" = yes; then
3611ab64890Smrg      # With Tru64 cc, shared objects can also be used to make a
3621ab64890Smrg      # static library.  This mechanism is used in libtool 1.4 series to
3631ab64890Smrg      # handle both shared and static libraries in a single compilation.
3641ab64890Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
3651ab64890Smrg      #
3661ab64890Smrg      # With libtool 1.5 this exception was removed, and libtool now
3671ab64890Smrg      # generates 2 separate objects for the 2 libraries.  These two
3681ab64890Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
3691ab64890Smrg      # in $dir$base.o.d.  We have to check for both files, because
3701ab64890Smrg      # one of the two compilations can be disabled.  We should prefer
3711ab64890Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
3721ab64890Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
3731ab64890Smrg      # the former would cause a distcleancheck panic.
3741ab64890Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
3751ab64890Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
3761ab64890Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
3771ab64890Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
3781ab64890Smrg      "$@" -Wc,-MD
3791ab64890Smrg   else
3801ab64890Smrg      tmpdepfile1=$dir$base.o.d
3811ab64890Smrg      tmpdepfile2=$dir$base.d
3821ab64890Smrg      tmpdepfile3=$dir$base.d
3831ab64890Smrg      tmpdepfile4=$dir$base.d
3841ab64890Smrg      "$@" -MD
3851ab64890Smrg   fi
3861ab64890Smrg
3871ab64890Smrg   stat=$?
3881ab64890Smrg   if test $stat -eq 0; then :
3891ab64890Smrg   else
3901ab64890Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3911ab64890Smrg      exit $stat
3921ab64890Smrg   fi
3931ab64890Smrg
3941ab64890Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3951ab64890Smrg   do
3961ab64890Smrg     test -f "$tmpdepfile" && break
3971ab64890Smrg   done
3981ab64890Smrg   if test -f "$tmpdepfile"; then
3991ab64890Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
4001ab64890Smrg      # That's a tab and a space in the [].
4011ab64890Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
4021ab64890Smrg   else
4031ab64890Smrg      echo "#dummy" > "$depfile"
4041ab64890Smrg   fi
4051ab64890Smrg   rm -f "$tmpdepfile"
4061ab64890Smrg   ;;
4071ab64890Smrg
4081ab64890Smrg#nosideeffect)
4091ab64890Smrg  # This comment above is used by automake to tell side-effect
4101ab64890Smrg  # dependency tracking mechanisms from slower ones.
4111ab64890Smrg
4121ab64890Smrgdashmstdout)
4131ab64890Smrg  # Important note: in order to support this mode, a compiler *must*
4141ab64890Smrg  # always write the preprocessed file to stdout, regardless of -o.
4151ab64890Smrg  "$@" || exit $?
4161ab64890Smrg
4171ab64890Smrg  # Remove the call to Libtool.
4181ab64890Smrg  if test "$libtool" = yes; then
419b4ee4795Smrg    while test "X$1" != 'X--mode=compile'; do
4201ab64890Smrg      shift
4211ab64890Smrg    done
4221ab64890Smrg    shift
4231ab64890Smrg  fi
4241ab64890Smrg
4251ab64890Smrg  # Remove `-o $object'.
4261ab64890Smrg  IFS=" "
4271ab64890Smrg  for arg
4281ab64890Smrg  do
4291ab64890Smrg    case $arg in
4301ab64890Smrg    -o)
4311ab64890Smrg      shift
4321ab64890Smrg      ;;
4331ab64890Smrg    $object)
4341ab64890Smrg      shift
4351ab64890Smrg      ;;
4361ab64890Smrg    *)
4371ab64890Smrg      set fnord "$@" "$arg"
4381ab64890Smrg      shift # fnord
4391ab64890Smrg      shift # $arg
4401ab64890Smrg      ;;
4411ab64890Smrg    esac
4421ab64890Smrg  done
4431ab64890Smrg
4441ab64890Smrg  test -z "$dashmflag" && dashmflag=-M
4451ab64890Smrg  # Require at least two characters before searching for `:'
4461ab64890Smrg  # in the target name.  This is to cope with DOS-style filenames:
4471ab64890Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
4481ab64890Smrg  "$@" $dashmflag |
4491ab64890Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
4501ab64890Smrg  rm -f "$depfile"
4511ab64890Smrg  cat < "$tmpdepfile" > "$depfile"
4521ab64890Smrg  tr ' ' '
4531ab64890Smrg' < "$tmpdepfile" | \
4541ab64890Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
4551ab64890Smrg## correctly.  Breaking it into two sed invocations is a workaround.
4561ab64890Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
4571ab64890Smrg  rm -f "$tmpdepfile"
4581ab64890Smrg  ;;
4591ab64890Smrg
4601ab64890SmrgdashXmstdout)
4611ab64890Smrg  # This case only exists to satisfy depend.m4.  It is never actually
4621ab64890Smrg  # run, as this mode is specially recognized in the preamble.
4631ab64890Smrg  exit 1
4641ab64890Smrg  ;;
4651ab64890Smrg
4661ab64890Smrgmakedepend)
4671ab64890Smrg  "$@" || exit $?
4681ab64890Smrg  # Remove any Libtool call
4691ab64890Smrg  if test "$libtool" = yes; then
470b4ee4795Smrg    while test "X$1" != 'X--mode=compile'; do
4711ab64890Smrg      shift
4721ab64890Smrg    done
4731ab64890Smrg    shift
4741ab64890Smrg  fi
4751ab64890Smrg  # X makedepend
4761ab64890Smrg  shift
477b4ee4795Smrg  cleared=no eat=no
478b4ee4795Smrg  for arg
479b4ee4795Smrg  do
4801ab64890Smrg    case $cleared in
4811ab64890Smrg    no)
4821ab64890Smrg      set ""; shift
4831ab64890Smrg      cleared=yes ;;
4841ab64890Smrg    esac
485b4ee4795Smrg    if test $eat = yes; then
486b4ee4795Smrg      eat=no
487b4ee4795Smrg      continue
488b4ee4795Smrg    fi
4891ab64890Smrg    case "$arg" in
4901ab64890Smrg    -D*|-I*)
4911ab64890Smrg      set fnord "$@" "$arg"; shift ;;
4921ab64890Smrg    # Strip any option that makedepend may not understand.  Remove
4931ab64890Smrg    # the object too, otherwise makedepend will parse it as a source file.
494b4ee4795Smrg    -arch)
495b4ee4795Smrg      eat=yes ;;
4961ab64890Smrg    -*|$object)
4971ab64890Smrg      ;;
4981ab64890Smrg    *)
4991ab64890Smrg      set fnord "$@" "$arg"; shift ;;
5001ab64890Smrg    esac
5011ab64890Smrg  done
502b4ee4795Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
5031ab64890Smrg  touch "$tmpdepfile"
5041ab64890Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
5051ab64890Smrg  rm -f "$depfile"
5061ab64890Smrg  cat < "$tmpdepfile" > "$depfile"
5071ab64890Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
5081ab64890Smrg' | \
5091ab64890Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
5101ab64890Smrg## correctly.  Breaking it into two sed invocations is a workaround.
5111ab64890Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
5121ab64890Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
5131ab64890Smrg  ;;
5141ab64890Smrg
5151ab64890Smrgcpp)
5161ab64890Smrg  # Important note: in order to support this mode, a compiler *must*
5171ab64890Smrg  # always write the preprocessed file to stdout.
5181ab64890Smrg  "$@" || exit $?
5191ab64890Smrg
5201ab64890Smrg  # Remove the call to Libtool.
5211ab64890Smrg  if test "$libtool" = yes; then
522b4ee4795Smrg    while test "X$1" != 'X--mode=compile'; do
5231ab64890Smrg      shift
5241ab64890Smrg    done
5251ab64890Smrg    shift
5261ab64890Smrg  fi
5271ab64890Smrg
5281ab64890Smrg  # Remove `-o $object'.
5291ab64890Smrg  IFS=" "
5301ab64890Smrg  for arg
5311ab64890Smrg  do
5321ab64890Smrg    case $arg in
5331ab64890Smrg    -o)
5341ab64890Smrg      shift
5351ab64890Smrg      ;;
5361ab64890Smrg    $object)
5371ab64890Smrg      shift
5381ab64890Smrg      ;;
5391ab64890Smrg    *)
5401ab64890Smrg      set fnord "$@" "$arg"
5411ab64890Smrg      shift # fnord
5421ab64890Smrg      shift # $arg
5431ab64890Smrg      ;;
5441ab64890Smrg    esac
5451ab64890Smrg  done
5461ab64890Smrg
5471ab64890Smrg  "$@" -E |
5481ab64890Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
5491ab64890Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
5501ab64890Smrg    sed '$ s: \\$::' > "$tmpdepfile"
5511ab64890Smrg  rm -f "$depfile"
5521ab64890Smrg  echo "$object : \\" > "$depfile"
5531ab64890Smrg  cat < "$tmpdepfile" >> "$depfile"
5541ab64890Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
5551ab64890Smrg  rm -f "$tmpdepfile"
5561ab64890Smrg  ;;
5571ab64890Smrg
5581ab64890Smrgmsvisualcpp)
5591ab64890Smrg  # Important note: in order to support this mode, a compiler *must*
560b4ee4795Smrg  # always write the preprocessed file to stdout.
5611ab64890Smrg  "$@" || exit $?
562b4ee4795Smrg
563b4ee4795Smrg  # Remove the call to Libtool.
564b4ee4795Smrg  if test "$libtool" = yes; then
565b4ee4795Smrg    while test "X$1" != 'X--mode=compile'; do
566b4ee4795Smrg      shift
567b4ee4795Smrg    done
568b4ee4795Smrg    shift
569b4ee4795Smrg  fi
570b4ee4795Smrg
5711ab64890Smrg  IFS=" "
5721ab64890Smrg  for arg
5731ab64890Smrg  do
5741ab64890Smrg    case "$arg" in
575b4ee4795Smrg    -o)
576b4ee4795Smrg      shift
577b4ee4795Smrg      ;;
578b4ee4795Smrg    $object)
579b4ee4795Smrg      shift
580b4ee4795Smrg      ;;
5811ab64890Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
5821ab64890Smrg	set fnord "$@"
5831ab64890Smrg	shift
5841ab64890Smrg	shift
5851ab64890Smrg	;;
5861ab64890Smrg    *)
5871ab64890Smrg	set fnord "$@" "$arg"
5881ab64890Smrg	shift
5891ab64890Smrg	shift
5901ab64890Smrg	;;
5911ab64890Smrg    esac
5921ab64890Smrg  done
593b4ee4795Smrg  "$@" -E 2>/dev/null |
594b4ee4795Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
5951ab64890Smrg  rm -f "$depfile"
5961ab64890Smrg  echo "$object : \\" > "$depfile"
597b4ee4795Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
5981ab64890Smrg  echo "	" >> "$depfile"
599b4ee4795Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
6001ab64890Smrg  rm -f "$tmpdepfile"
6011ab64890Smrg  ;;
6021ab64890Smrg
603b4ee4795Smrgmsvcmsys)
604b4ee4795Smrg  # This case exists only to let depend.m4 do its work.  It works by
605b4ee4795Smrg  # looking at the text of this script.  This case will never be run,
606b4ee4795Smrg  # since it is checked for above.
607b4ee4795Smrg  exit 1
608b4ee4795Smrg  ;;
609b4ee4795Smrg
6101ab64890Smrgnone)
6111ab64890Smrg  exec "$@"
6121ab64890Smrg  ;;
6131ab64890Smrg
6141ab64890Smrg*)
6151ab64890Smrg  echo "Unknown depmode $depmode" 1>&2
6161ab64890Smrg  exit 1
6171ab64890Smrg  ;;
6181ab64890Smrgesac
6191ab64890Smrg
6201ab64890Smrgexit 0
6211ab64890Smrg
6221ab64890Smrg# Local Variables:
6231ab64890Smrg# mode: shell-script
6241ab64890Smrg# sh-indentation: 2
6251ab64890Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
6261ab64890Smrg# time-stamp-start: "scriptversion="
6271ab64890Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
628b4ee4795Smrg# time-stamp-time-zone: "UTC"
629b4ee4795Smrg# time-stamp-end: "; # UTC"
6301ab64890Smrg# End:
631