depcomp revision c05e22d7
15dfecf96Smrg#! /bin/sh
25dfecf96Smrg# depcomp - compile a program generating dependencies as side-effects
35dfecf96Smrg
4c05e22d7Smrgscriptversion=2009-04-28.21; # UTC
55dfecf96Smrg
6c05e22d7Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
7c05e22d7Smrg# Software Foundation, Inc.
85dfecf96Smrg
95dfecf96Smrg# This program is free software; you can redistribute it and/or modify
105dfecf96Smrg# it under the terms of the GNU General Public License as published by
115dfecf96Smrg# the Free Software Foundation; either version 2, or (at your option)
125dfecf96Smrg# any later version.
135dfecf96Smrg
145dfecf96Smrg# This program is distributed in the hope that it will be useful,
155dfecf96Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
165dfecf96Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
175dfecf96Smrg# GNU General Public License for more details.
185dfecf96Smrg
195dfecf96Smrg# You should have received a copy of the GNU General Public License
20c05e22d7Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
215dfecf96Smrg
225dfecf96Smrg# As a special exception to the GNU General Public License, if you
235dfecf96Smrg# distribute this file as part of a program that contains a
245dfecf96Smrg# configuration script generated by Autoconf, you may include it under
255dfecf96Smrg# the same distribution terms that you use for the rest of that program.
265dfecf96Smrg
275dfecf96Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
285dfecf96Smrg
295dfecf96Smrgcase $1 in
305dfecf96Smrg  '')
315dfecf96Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
325dfecf96Smrg     exit 1;
335dfecf96Smrg     ;;
345dfecf96Smrg  -h | --h*)
355dfecf96Smrg    cat <<\EOF
365dfecf96SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
375dfecf96Smrg
385dfecf96SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
395dfecf96Smrgas side-effects.
405dfecf96Smrg
415dfecf96SmrgEnvironment variables:
425dfecf96Smrg  depmode     Dependency tracking mode.
435dfecf96Smrg  source      Source file read by `PROGRAMS ARGS'.
445dfecf96Smrg  object      Object file output by `PROGRAMS ARGS'.
455dfecf96Smrg  DEPDIR      directory where to store dependencies.
465dfecf96Smrg  depfile     Dependency file to output.
475dfecf96Smrg  tmpdepfile  Temporary file to use when outputing dependencies.
485dfecf96Smrg  libtool     Whether libtool is used (yes/no).
495dfecf96Smrg
505dfecf96SmrgReport bugs to <bug-automake@gnu.org>.
515dfecf96SmrgEOF
525dfecf96Smrg    exit $?
535dfecf96Smrg    ;;
545dfecf96Smrg  -v | --v*)
555dfecf96Smrg    echo "depcomp $scriptversion"
565dfecf96Smrg    exit $?
575dfecf96Smrg    ;;
585dfecf96Smrgesac
595dfecf96Smrg
605dfecf96Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
615dfecf96Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
625dfecf96Smrg  exit 1
635dfecf96Smrgfi
645dfecf96Smrg
655dfecf96Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
665dfecf96Smrgdepfile=${depfile-`echo "$object" |
675dfecf96Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
685dfecf96Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
695dfecf96Smrg
705dfecf96Smrgrm -f "$tmpdepfile"
715dfecf96Smrg
725dfecf96Smrg# Some modes work just like other modes, but use different flags.  We
735dfecf96Smrg# parameterize here, but still list the modes in the big case below,
745dfecf96Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
755dfecf96Smrg# here, because this file can only contain one case statement.
765dfecf96Smrgif test "$depmode" = hp; then
775dfecf96Smrg  # HP compiler uses -M and no extra arg.
785dfecf96Smrg  gccflag=-M
795dfecf96Smrg  depmode=gcc
805dfecf96Smrgfi
815dfecf96Smrg
825dfecf96Smrgif test "$depmode" = dashXmstdout; then
835dfecf96Smrg   # This is just like dashmstdout with a different argument.
845dfecf96Smrg   dashmflag=-xM
855dfecf96Smrg   depmode=dashmstdout
865dfecf96Smrgfi
875dfecf96Smrg
88c05e22d7Smrgcygpath_u="cygpath -u -f -"
89c05e22d7Smrgif test "$depmode" = msvcmsys; then
90c05e22d7Smrg   # This is just like msvisualcpp but w/o cygpath translation.
91c05e22d7Smrg   # Just convert the backslash-escaped backslashes to single forward
92c05e22d7Smrg   # slashes to satisfy depend.m4
93c05e22d7Smrg   cygpath_u="sed s,\\\\\\\\,/,g"
94c05e22d7Smrg   depmode=msvisualcpp
95c05e22d7Smrgfi
96c05e22d7Smrg
975dfecf96Smrgcase "$depmode" in
985dfecf96Smrggcc3)
995dfecf96Smrg## gcc 3 implements dependency tracking that does exactly what
1005dfecf96Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
1015dfecf96Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
102f14f4646Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
103f14f4646Smrg## the command line argument order; so add the flags where they
104f14f4646Smrg## appear in depend2.am.  Note that the slowdown incurred here
105f14f4646Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
106f14f4646Smrg  for arg
107f14f4646Smrg  do
108f14f4646Smrg    case $arg in
109f14f4646Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
110f14f4646Smrg    *)  set fnord "$@" "$arg" ;;
111f14f4646Smrg    esac
112f14f4646Smrg    shift # fnord
113f14f4646Smrg    shift # $arg
114f14f4646Smrg  done
115f14f4646Smrg  "$@"
1165dfecf96Smrg  stat=$?
1175dfecf96Smrg  if test $stat -eq 0; then :
1185dfecf96Smrg  else
1195dfecf96Smrg    rm -f "$tmpdepfile"
1205dfecf96Smrg    exit $stat
1215dfecf96Smrg  fi
1225dfecf96Smrg  mv "$tmpdepfile" "$depfile"
1235dfecf96Smrg  ;;
1245dfecf96Smrg
1255dfecf96Smrggcc)
1265dfecf96Smrg## There are various ways to get dependency output from gcc.  Here's
1275dfecf96Smrg## why we pick this rather obscure method:
1285dfecf96Smrg## - Don't want to use -MD because we'd like the dependencies to end
1295dfecf96Smrg##   up in a subdir.  Having to rename by hand is ugly.
1305dfecf96Smrg##   (We might end up doing this anyway to support other compilers.)
1315dfecf96Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
1325dfecf96Smrg##   -MM, not -M (despite what the docs say).
1335dfecf96Smrg## - Using -M directly means running the compiler twice (even worse
1345dfecf96Smrg##   than renaming).
1355dfecf96Smrg  if test -z "$gccflag"; then
1365dfecf96Smrg    gccflag=-MD,
1375dfecf96Smrg  fi
1385dfecf96Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
1395dfecf96Smrg  stat=$?
1405dfecf96Smrg  if test $stat -eq 0; then :
1415dfecf96Smrg  else
1425dfecf96Smrg    rm -f "$tmpdepfile"
1435dfecf96Smrg    exit $stat
1445dfecf96Smrg  fi
1455dfecf96Smrg  rm -f "$depfile"
1465dfecf96Smrg  echo "$object : \\" > "$depfile"
1475dfecf96Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
1485dfecf96Smrg## The second -e expression handles DOS-style file names with drive letters.
1495dfecf96Smrg  sed -e 's/^[^:]*: / /' \
1505dfecf96Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
1515dfecf96Smrg## This next piece of magic avoids the `deleted header file' problem.
1525dfecf96Smrg## The problem is that when a header file which appears in a .P file
1535dfecf96Smrg## is deleted, the dependency causes make to die (because there is
1545dfecf96Smrg## typically no way to rebuild the header).  We avoid this by adding
1555dfecf96Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
1565dfecf96Smrg## this for us directly.
1575dfecf96Smrg  tr ' ' '
1585dfecf96Smrg' < "$tmpdepfile" |
1595dfecf96Smrg## Some versions of gcc put a space before the `:'.  On the theory
1605dfecf96Smrg## that the space means something, we add a space to the output as
1615dfecf96Smrg## well.
1625dfecf96Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
1635dfecf96Smrg## correctly.  Breaking it into two sed invocations is a workaround.
1645dfecf96Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
1655dfecf96Smrg  rm -f "$tmpdepfile"
1665dfecf96Smrg  ;;
1675dfecf96Smrg
1685dfecf96Smrghp)
1695dfecf96Smrg  # This case exists only to let depend.m4 do its work.  It works by
1705dfecf96Smrg  # looking at the text of this script.  This case will never be run,
1715dfecf96Smrg  # since it is checked for above.
1725dfecf96Smrg  exit 1
1735dfecf96Smrg  ;;
1745dfecf96Smrg
1755dfecf96Smrgsgi)
1765dfecf96Smrg  if test "$libtool" = yes; then
1775dfecf96Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
1785dfecf96Smrg  else
1795dfecf96Smrg    "$@" -MDupdate "$tmpdepfile"
1805dfecf96Smrg  fi
1815dfecf96Smrg  stat=$?
1825dfecf96Smrg  if test $stat -eq 0; then :
1835dfecf96Smrg  else
1845dfecf96Smrg    rm -f "$tmpdepfile"
1855dfecf96Smrg    exit $stat
1865dfecf96Smrg  fi
1875dfecf96Smrg  rm -f "$depfile"
1885dfecf96Smrg
1895dfecf96Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
1905dfecf96Smrg    echo "$object : \\" > "$depfile"
1915dfecf96Smrg
1925dfecf96Smrg    # Clip off the initial element (the dependent).  Don't try to be
1935dfecf96Smrg    # clever and replace this with sed code, as IRIX sed won't handle
1945dfecf96Smrg    # lines with more than a fixed number of characters (4096 in
1955dfecf96Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
1965dfecf96Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
1975dfecf96Smrg    # dependency line.
1985dfecf96Smrg    tr ' ' '
1995dfecf96Smrg' < "$tmpdepfile" \
2005dfecf96Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
2015dfecf96Smrg    tr '
202c05e22d7Smrg' ' ' >> "$depfile"
203c05e22d7Smrg    echo >> "$depfile"
2045dfecf96Smrg
2055dfecf96Smrg    # The second pass generates a dummy entry for each header file.
2065dfecf96Smrg    tr ' ' '
2075dfecf96Smrg' < "$tmpdepfile" \
2085dfecf96Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
209c05e22d7Smrg   >> "$depfile"
2105dfecf96Smrg  else
2115dfecf96Smrg    # The sourcefile does not contain any dependencies, so just
2125dfecf96Smrg    # store a dummy comment line, to avoid errors with the Makefile
2135dfecf96Smrg    # "include basename.Plo" scheme.
2145dfecf96Smrg    echo "#dummy" > "$depfile"
2155dfecf96Smrg  fi
2165dfecf96Smrg  rm -f "$tmpdepfile"
2175dfecf96Smrg  ;;
2185dfecf96Smrg
2195dfecf96Smrgaix)
2205dfecf96Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
2215dfecf96Smrg  # in a .u file.  In older versions, this file always lives in the
2225dfecf96Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
2235dfecf96Smrg  # start of each line; $object doesn't have directory information.
2245dfecf96Smrg  # Version 6 uses the directory in both cases.
225f14f4646Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
226f14f4646Smrg  test "x$dir" = "x$object" && dir=
227f14f4646Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
2285dfecf96Smrg  if test "$libtool" = yes; then
229f14f4646Smrg    tmpdepfile1=$dir$base.u
230f14f4646Smrg    tmpdepfile2=$base.u
231f14f4646Smrg    tmpdepfile3=$dir.libs/$base.u
2325dfecf96Smrg    "$@" -Wc,-M
2335dfecf96Smrg  else
234f14f4646Smrg    tmpdepfile1=$dir$base.u
235f14f4646Smrg    tmpdepfile2=$dir$base.u
236f14f4646Smrg    tmpdepfile3=$dir$base.u
2375dfecf96Smrg    "$@" -M
2385dfecf96Smrg  fi
2395dfecf96Smrg  stat=$?
2405dfecf96Smrg
2415dfecf96Smrg  if test $stat -eq 0; then :
2425dfecf96Smrg  else
243f14f4646Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2445dfecf96Smrg    exit $stat
2455dfecf96Smrg  fi
2465dfecf96Smrg
247f14f4646Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
248f14f4646Smrg  do
249f14f4646Smrg    test -f "$tmpdepfile" && break
250f14f4646Smrg  done
2515dfecf96Smrg  if test -f "$tmpdepfile"; then
2525dfecf96Smrg    # Each line is of the form `foo.o: dependent.h'.
2535dfecf96Smrg    # Do two passes, one to just change these to
2545dfecf96Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
255f14f4646Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
256f14f4646Smrg    # That's a tab and a space in the [].
257f14f4646Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
2585dfecf96Smrg  else
2595dfecf96Smrg    # The sourcefile does not contain any dependencies, so just
2605dfecf96Smrg    # store a dummy comment line, to avoid errors with the Makefile
2615dfecf96Smrg    # "include basename.Plo" scheme.
2625dfecf96Smrg    echo "#dummy" > "$depfile"
2635dfecf96Smrg  fi
2645dfecf96Smrg  rm -f "$tmpdepfile"
2655dfecf96Smrg  ;;
2665dfecf96Smrg
2675dfecf96Smrgicc)
2685dfecf96Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
2695dfecf96Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
2705dfecf96Smrg  # ICC 7.0 will fill foo.d with something like
2715dfecf96Smrg  #    foo.o: sub/foo.c
2725dfecf96Smrg  #    foo.o: sub/foo.h
2735dfecf96Smrg  # which is wrong.  We want:
2745dfecf96Smrg  #    sub/foo.o: sub/foo.c
2755dfecf96Smrg  #    sub/foo.o: sub/foo.h
2765dfecf96Smrg  #    sub/foo.c:
2775dfecf96Smrg  #    sub/foo.h:
2785dfecf96Smrg  # ICC 7.1 will output
2795dfecf96Smrg  #    foo.o: sub/foo.c sub/foo.h
2805dfecf96Smrg  # and will wrap long lines using \ :
2815dfecf96Smrg  #    foo.o: sub/foo.c ... \
2825dfecf96Smrg  #     sub/foo.h ... \
2835dfecf96Smrg  #     ...
2845dfecf96Smrg
2855dfecf96Smrg  "$@" -MD -MF "$tmpdepfile"
2865dfecf96Smrg  stat=$?
2875dfecf96Smrg  if test $stat -eq 0; then :
2885dfecf96Smrg  else
2895dfecf96Smrg    rm -f "$tmpdepfile"
2905dfecf96Smrg    exit $stat
2915dfecf96Smrg  fi
2925dfecf96Smrg  rm -f "$depfile"
2935dfecf96Smrg  # Each line is of the form `foo.o: dependent.h',
2945dfecf96Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
2955dfecf96Smrg  # Do two passes, one to just change these to
2965dfecf96Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
2975dfecf96Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
2985dfecf96Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
2995dfecf96Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
3005dfecf96Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
3015dfecf96Smrg    sed -e 's/$/ :/' >> "$depfile"
3025dfecf96Smrg  rm -f "$tmpdepfile"
3035dfecf96Smrg  ;;
3045dfecf96Smrg
305f14f4646Smrghp2)
306f14f4646Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
307f14f4646Smrg  # compilers, which have integrated preprocessors.  The correct option
308f14f4646Smrg  # to use with these is +Maked; it writes dependencies to a file named
309f14f4646Smrg  # 'foo.d', which lands next to the object file, wherever that
310f14f4646Smrg  # happens to be.
311f14f4646Smrg  # Much of this is similar to the tru64 case; see comments there.
312f14f4646Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
313f14f4646Smrg  test "x$dir" = "x$object" && dir=
314f14f4646Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
315f14f4646Smrg  if test "$libtool" = yes; then
316f14f4646Smrg    tmpdepfile1=$dir$base.d
317f14f4646Smrg    tmpdepfile2=$dir.libs/$base.d
318f14f4646Smrg    "$@" -Wc,+Maked
319f14f4646Smrg  else
320f14f4646Smrg    tmpdepfile1=$dir$base.d
321f14f4646Smrg    tmpdepfile2=$dir$base.d
322f14f4646Smrg    "$@" +Maked
323f14f4646Smrg  fi
324f14f4646Smrg  stat=$?
325f14f4646Smrg  if test $stat -eq 0; then :
326f14f4646Smrg  else
327f14f4646Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
328f14f4646Smrg     exit $stat
329f14f4646Smrg  fi
330f14f4646Smrg
331f14f4646Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
332f14f4646Smrg  do
333f14f4646Smrg    test -f "$tmpdepfile" && break
334f14f4646Smrg  done
335f14f4646Smrg  if test -f "$tmpdepfile"; then
336f14f4646Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
337f14f4646Smrg    # Add `dependent.h:' lines.
338c05e22d7Smrg    sed -ne '2,${
339c05e22d7Smrg	       s/^ *//
340c05e22d7Smrg	       s/ \\*$//
341c05e22d7Smrg	       s/$/:/
342c05e22d7Smrg	       p
343c05e22d7Smrg	     }' "$tmpdepfile" >> "$depfile"
344f14f4646Smrg  else
345f14f4646Smrg    echo "#dummy" > "$depfile"
346f14f4646Smrg  fi
347f14f4646Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
348f14f4646Smrg  ;;
349f14f4646Smrg
3505dfecf96Smrgtru64)
3515dfecf96Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
3525dfecf96Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
3535dfecf96Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
3545dfecf96Smrg   # dependencies in `foo.d' instead, so we check for that too.
3555dfecf96Smrg   # Subdirectories are respected.
3565dfecf96Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3575dfecf96Smrg   test "x$dir" = "x$object" && dir=
3585dfecf96Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3595dfecf96Smrg
3605dfecf96Smrg   if test "$libtool" = yes; then
3615dfecf96Smrg      # With Tru64 cc, shared objects can also be used to make a
362f14f4646Smrg      # static library.  This mechanism is used in libtool 1.4 series to
3635dfecf96Smrg      # handle both shared and static libraries in a single compilation.
3645dfecf96Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
3655dfecf96Smrg      #
3665dfecf96Smrg      # With libtool 1.5 this exception was removed, and libtool now
3675dfecf96Smrg      # generates 2 separate objects for the 2 libraries.  These two
368f14f4646Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
3695dfecf96Smrg      # in $dir$base.o.d.  We have to check for both files, because
3705dfecf96Smrg      # one of the two compilations can be disabled.  We should prefer
3715dfecf96Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
3725dfecf96Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
3735dfecf96Smrg      # the former would cause a distcleancheck panic.
3745dfecf96Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
3755dfecf96Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
3765dfecf96Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
3775dfecf96Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
3785dfecf96Smrg      "$@" -Wc,-MD
3795dfecf96Smrg   else
3805dfecf96Smrg      tmpdepfile1=$dir$base.o.d
3815dfecf96Smrg      tmpdepfile2=$dir$base.d
3825dfecf96Smrg      tmpdepfile3=$dir$base.d
3835dfecf96Smrg      tmpdepfile4=$dir$base.d
3845dfecf96Smrg      "$@" -MD
3855dfecf96Smrg   fi
3865dfecf96Smrg
3875dfecf96Smrg   stat=$?
3885dfecf96Smrg   if test $stat -eq 0; then :
3895dfecf96Smrg   else
3905dfecf96Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3915dfecf96Smrg      exit $stat
3925dfecf96Smrg   fi
3935dfecf96Smrg
3945dfecf96Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3955dfecf96Smrg   do
3965dfecf96Smrg     test -f "$tmpdepfile" && break
3975dfecf96Smrg   done
3985dfecf96Smrg   if test -f "$tmpdepfile"; then
3995dfecf96Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
4005dfecf96Smrg      # That's a tab and a space in the [].
4015dfecf96Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
4025dfecf96Smrg   else
4035dfecf96Smrg      echo "#dummy" > "$depfile"
4045dfecf96Smrg   fi
4055dfecf96Smrg   rm -f "$tmpdepfile"
4065dfecf96Smrg   ;;
4075dfecf96Smrg
4085dfecf96Smrg#nosideeffect)
4095dfecf96Smrg  # This comment above is used by automake to tell side-effect
4105dfecf96Smrg  # dependency tracking mechanisms from slower ones.
4115dfecf96Smrg
4125dfecf96Smrgdashmstdout)
4135dfecf96Smrg  # Important note: in order to support this mode, a compiler *must*
4145dfecf96Smrg  # always write the preprocessed file to stdout, regardless of -o.
4155dfecf96Smrg  "$@" || exit $?
4165dfecf96Smrg
4175dfecf96Smrg  # Remove the call to Libtool.
4185dfecf96Smrg  if test "$libtool" = yes; then
419c05e22d7Smrg    while test "X$1" != 'X--mode=compile'; do
4205dfecf96Smrg      shift
4215dfecf96Smrg    done
4225dfecf96Smrg    shift
4235dfecf96Smrg  fi
4245dfecf96Smrg
4255dfecf96Smrg  # Remove `-o $object'.
4265dfecf96Smrg  IFS=" "
4275dfecf96Smrg  for arg
4285dfecf96Smrg  do
4295dfecf96Smrg    case $arg in
4305dfecf96Smrg    -o)
4315dfecf96Smrg      shift
4325dfecf96Smrg      ;;
4335dfecf96Smrg    $object)
4345dfecf96Smrg      shift
4355dfecf96Smrg      ;;
4365dfecf96Smrg    *)
4375dfecf96Smrg      set fnord "$@" "$arg"
4385dfecf96Smrg      shift # fnord
4395dfecf96Smrg      shift # $arg
4405dfecf96Smrg      ;;
4415dfecf96Smrg    esac
4425dfecf96Smrg  done
4435dfecf96Smrg
4445dfecf96Smrg  test -z "$dashmflag" && dashmflag=-M
4455dfecf96Smrg  # Require at least two characters before searching for `:'
4465dfecf96Smrg  # in the target name.  This is to cope with DOS-style filenames:
4475dfecf96Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
4485dfecf96Smrg  "$@" $dashmflag |
4495dfecf96Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
4505dfecf96Smrg  rm -f "$depfile"
4515dfecf96Smrg  cat < "$tmpdepfile" > "$depfile"
4525dfecf96Smrg  tr ' ' '
4535dfecf96Smrg' < "$tmpdepfile" | \
4545dfecf96Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
4555dfecf96Smrg## correctly.  Breaking it into two sed invocations is a workaround.
4565dfecf96Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
4575dfecf96Smrg  rm -f "$tmpdepfile"
4585dfecf96Smrg  ;;
4595dfecf96Smrg
4605dfecf96SmrgdashXmstdout)
4615dfecf96Smrg  # This case only exists to satisfy depend.m4.  It is never actually
4625dfecf96Smrg  # run, as this mode is specially recognized in the preamble.
4635dfecf96Smrg  exit 1
4645dfecf96Smrg  ;;
4655dfecf96Smrg
4665dfecf96Smrgmakedepend)
4675dfecf96Smrg  "$@" || exit $?
4685dfecf96Smrg  # Remove any Libtool call
4695dfecf96Smrg  if test "$libtool" = yes; then
470c05e22d7Smrg    while test "X$1" != 'X--mode=compile'; do
4715dfecf96Smrg      shift
4725dfecf96Smrg    done
4735dfecf96Smrg    shift
4745dfecf96Smrg  fi
4755dfecf96Smrg  # X makedepend
4765dfecf96Smrg  shift
477c05e22d7Smrg  cleared=no eat=no
478c05e22d7Smrg  for arg
479c05e22d7Smrg  do
4805dfecf96Smrg    case $cleared in
4815dfecf96Smrg    no)
4825dfecf96Smrg      set ""; shift
4835dfecf96Smrg      cleared=yes ;;
4845dfecf96Smrg    esac
485c05e22d7Smrg    if test $eat = yes; then
486c05e22d7Smrg      eat=no
487c05e22d7Smrg      continue
488c05e22d7Smrg    fi
4895dfecf96Smrg    case "$arg" in
4905dfecf96Smrg    -D*|-I*)
4915dfecf96Smrg      set fnord "$@" "$arg"; shift ;;
4925dfecf96Smrg    # Strip any option that makedepend may not understand.  Remove
4935dfecf96Smrg    # the object too, otherwise makedepend will parse it as a source file.
494c05e22d7Smrg    -arch)
495c05e22d7Smrg      eat=yes ;;
4965dfecf96Smrg    -*|$object)
4975dfecf96Smrg      ;;
4985dfecf96Smrg    *)
4995dfecf96Smrg      set fnord "$@" "$arg"; shift ;;
5005dfecf96Smrg    esac
5015dfecf96Smrg  done
502c05e22d7Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
5035dfecf96Smrg  touch "$tmpdepfile"
5045dfecf96Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
5055dfecf96Smrg  rm -f "$depfile"
5065dfecf96Smrg  cat < "$tmpdepfile" > "$depfile"
5075dfecf96Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
5085dfecf96Smrg' | \
5095dfecf96Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
5105dfecf96Smrg## correctly.  Breaking it into two sed invocations is a workaround.
5115dfecf96Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
5125dfecf96Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
5135dfecf96Smrg  ;;
5145dfecf96Smrg
5155dfecf96Smrgcpp)
5165dfecf96Smrg  # Important note: in order to support this mode, a compiler *must*
5175dfecf96Smrg  # always write the preprocessed file to stdout.
5185dfecf96Smrg  "$@" || exit $?
5195dfecf96Smrg
5205dfecf96Smrg  # Remove the call to Libtool.
5215dfecf96Smrg  if test "$libtool" = yes; then
522c05e22d7Smrg    while test "X$1" != 'X--mode=compile'; do
5235dfecf96Smrg      shift
5245dfecf96Smrg    done
5255dfecf96Smrg    shift
5265dfecf96Smrg  fi
5275dfecf96Smrg
5285dfecf96Smrg  # Remove `-o $object'.
5295dfecf96Smrg  IFS=" "
5305dfecf96Smrg  for arg
5315dfecf96Smrg  do
5325dfecf96Smrg    case $arg in
5335dfecf96Smrg    -o)
5345dfecf96Smrg      shift
5355dfecf96Smrg      ;;
5365dfecf96Smrg    $object)
5375dfecf96Smrg      shift
5385dfecf96Smrg      ;;
5395dfecf96Smrg    *)
5405dfecf96Smrg      set fnord "$@" "$arg"
5415dfecf96Smrg      shift # fnord
5425dfecf96Smrg      shift # $arg
5435dfecf96Smrg      ;;
5445dfecf96Smrg    esac
5455dfecf96Smrg  done
5465dfecf96Smrg
5475dfecf96Smrg  "$@" -E |
5485dfecf96Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
5495dfecf96Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
5505dfecf96Smrg    sed '$ s: \\$::' > "$tmpdepfile"
5515dfecf96Smrg  rm -f "$depfile"
5525dfecf96Smrg  echo "$object : \\" > "$depfile"
5535dfecf96Smrg  cat < "$tmpdepfile" >> "$depfile"
5545dfecf96Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
5555dfecf96Smrg  rm -f "$tmpdepfile"
5565dfecf96Smrg  ;;
5575dfecf96Smrg
5585dfecf96Smrgmsvisualcpp)
5595dfecf96Smrg  # Important note: in order to support this mode, a compiler *must*
560c05e22d7Smrg  # always write the preprocessed file to stdout.
5615dfecf96Smrg  "$@" || exit $?
562c05e22d7Smrg
563c05e22d7Smrg  # Remove the call to Libtool.
564c05e22d7Smrg  if test "$libtool" = yes; then
565c05e22d7Smrg    while test "X$1" != 'X--mode=compile'; do
566c05e22d7Smrg      shift
567c05e22d7Smrg    done
568c05e22d7Smrg    shift
569c05e22d7Smrg  fi
570c05e22d7Smrg
5715dfecf96Smrg  IFS=" "
5725dfecf96Smrg  for arg
5735dfecf96Smrg  do
5745dfecf96Smrg    case "$arg" in
575c05e22d7Smrg    -o)
576c05e22d7Smrg      shift
577c05e22d7Smrg      ;;
578c05e22d7Smrg    $object)
579c05e22d7Smrg      shift
580c05e22d7Smrg      ;;
5815dfecf96Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
5825dfecf96Smrg	set fnord "$@"
5835dfecf96Smrg	shift
5845dfecf96Smrg	shift
5855dfecf96Smrg	;;
5865dfecf96Smrg    *)
5875dfecf96Smrg	set fnord "$@" "$arg"
5885dfecf96Smrg	shift
5895dfecf96Smrg	shift
5905dfecf96Smrg	;;
5915dfecf96Smrg    esac
5925dfecf96Smrg  done
593c05e22d7Smrg  "$@" -E 2>/dev/null |
594c05e22d7Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
5955dfecf96Smrg  rm -f "$depfile"
5965dfecf96Smrg  echo "$object : \\" > "$depfile"
597c05e22d7Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
5985dfecf96Smrg  echo "	" >> "$depfile"
599c05e22d7Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
6005dfecf96Smrg  rm -f "$tmpdepfile"
6015dfecf96Smrg  ;;
6025dfecf96Smrg
603c05e22d7Smrgmsvcmsys)
604c05e22d7Smrg  # This case exists only to let depend.m4 do its work.  It works by
605c05e22d7Smrg  # looking at the text of this script.  This case will never be run,
606c05e22d7Smrg  # since it is checked for above.
607c05e22d7Smrg  exit 1
608c05e22d7Smrg  ;;
609c05e22d7Smrg
6105dfecf96Smrgnone)
6115dfecf96Smrg  exec "$@"
6125dfecf96Smrg  ;;
6135dfecf96Smrg
6145dfecf96Smrg*)
6155dfecf96Smrg  echo "Unknown depmode $depmode" 1>&2
6165dfecf96Smrg  exit 1
6175dfecf96Smrg  ;;
6185dfecf96Smrgesac
6195dfecf96Smrg
6205dfecf96Smrgexit 0
6215dfecf96Smrg
6225dfecf96Smrg# Local Variables:
6235dfecf96Smrg# mode: shell-script
6245dfecf96Smrg# sh-indentation: 2
6255dfecf96Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
6265dfecf96Smrg# time-stamp-start: "scriptversion="
6275dfecf96Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
628c05e22d7Smrg# time-stamp-time-zone: "UTC"
629c05e22d7Smrg# time-stamp-end: "; # UTC"
6305dfecf96Smrg# End:
631