depcomp revision 52b01e16
14b0ead49Smrg#! /bin/sh
24b0ead49Smrg# depcomp - compile a program generating dependencies as side-effects
34b0ead49Smrg
452b01e16Smrgscriptversion=2009-04-28.21; # UTC
54b0ead49Smrg
652b01e16Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
752b01e16Smrg# Software Foundation, Inc.
84b0ead49Smrg
94b0ead49Smrg# This program is free software; you can redistribute it and/or modify
104b0ead49Smrg# it under the terms of the GNU General Public License as published by
114b0ead49Smrg# the Free Software Foundation; either version 2, or (at your option)
124b0ead49Smrg# any later version.
134b0ead49Smrg
144b0ead49Smrg# This program is distributed in the hope that it will be useful,
154b0ead49Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
164b0ead49Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
174b0ead49Smrg# GNU General Public License for more details.
184b0ead49Smrg
194b0ead49Smrg# You should have received a copy of the GNU General Public License
2052b01e16Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
214b0ead49Smrg
224b0ead49Smrg# As a special exception to the GNU General Public License, if you
234b0ead49Smrg# distribute this file as part of a program that contains a
244b0ead49Smrg# configuration script generated by Autoconf, you may include it under
254b0ead49Smrg# the same distribution terms that you use for the rest of that program.
264b0ead49Smrg
274b0ead49Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
284b0ead49Smrg
294b0ead49Smrgcase $1 in
304b0ead49Smrg  '')
314b0ead49Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
324b0ead49Smrg     exit 1;
334b0ead49Smrg     ;;
344b0ead49Smrg  -h | --h*)
354b0ead49Smrg    cat <<\EOF
364b0ead49SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
374b0ead49Smrg
384b0ead49SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
394b0ead49Smrgas side-effects.
404b0ead49Smrg
414b0ead49SmrgEnvironment variables:
424b0ead49Smrg  depmode     Dependency tracking mode.
434b0ead49Smrg  source      Source file read by `PROGRAMS ARGS'.
444b0ead49Smrg  object      Object file output by `PROGRAMS ARGS'.
454b0ead49Smrg  DEPDIR      directory where to store dependencies.
464b0ead49Smrg  depfile     Dependency file to output.
474b0ead49Smrg  tmpdepfile  Temporary file to use when outputing dependencies.
484b0ead49Smrg  libtool     Whether libtool is used (yes/no).
494b0ead49Smrg
504b0ead49SmrgReport bugs to <bug-automake@gnu.org>.
514b0ead49SmrgEOF
524b0ead49Smrg    exit $?
534b0ead49Smrg    ;;
544b0ead49Smrg  -v | --v*)
554b0ead49Smrg    echo "depcomp $scriptversion"
564b0ead49Smrg    exit $?
574b0ead49Smrg    ;;
584b0ead49Smrgesac
594b0ead49Smrg
604b0ead49Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
614b0ead49Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
624b0ead49Smrg  exit 1
634b0ead49Smrgfi
644b0ead49Smrg
654b0ead49Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
664b0ead49Smrgdepfile=${depfile-`echo "$object" |
674b0ead49Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
684b0ead49Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
694b0ead49Smrg
704b0ead49Smrgrm -f "$tmpdepfile"
714b0ead49Smrg
724b0ead49Smrg# Some modes work just like other modes, but use different flags.  We
734b0ead49Smrg# parameterize here, but still list the modes in the big case below,
744b0ead49Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
754b0ead49Smrg# here, because this file can only contain one case statement.
764b0ead49Smrgif test "$depmode" = hp; then
774b0ead49Smrg  # HP compiler uses -M and no extra arg.
784b0ead49Smrg  gccflag=-M
794b0ead49Smrg  depmode=gcc
804b0ead49Smrgfi
814b0ead49Smrg
824b0ead49Smrgif test "$depmode" = dashXmstdout; then
834b0ead49Smrg   # This is just like dashmstdout with a different argument.
844b0ead49Smrg   dashmflag=-xM
854b0ead49Smrg   depmode=dashmstdout
864b0ead49Smrgfi
874b0ead49Smrg
8852b01e16Smrgcygpath_u="cygpath -u -f -"
8952b01e16Smrgif test "$depmode" = msvcmsys; then
9052b01e16Smrg   # This is just like msvisualcpp but w/o cygpath translation.
9152b01e16Smrg   # Just convert the backslash-escaped backslashes to single forward
9252b01e16Smrg   # slashes to satisfy depend.m4
9352b01e16Smrg   cygpath_u="sed s,\\\\\\\\,/,g"
9452b01e16Smrg   depmode=msvisualcpp
9552b01e16Smrgfi
9652b01e16Smrg
974b0ead49Smrgcase "$depmode" in
984b0ead49Smrggcc3)
994b0ead49Smrg## gcc 3 implements dependency tracking that does exactly what
1004b0ead49Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
1014b0ead49Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
10252b01e16Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
10352b01e16Smrg## the command line argument order; so add the flags where they
10452b01e16Smrg## appear in depend2.am.  Note that the slowdown incurred here
10552b01e16Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
10652b01e16Smrg  for arg
10752b01e16Smrg  do
10852b01e16Smrg    case $arg in
10952b01e16Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
11052b01e16Smrg    *)  set fnord "$@" "$arg" ;;
11152b01e16Smrg    esac
11252b01e16Smrg    shift # fnord
11352b01e16Smrg    shift # $arg
11452b01e16Smrg  done
11552b01e16Smrg  "$@"
1164b0ead49Smrg  stat=$?
1174b0ead49Smrg  if test $stat -eq 0; then :
1184b0ead49Smrg  else
1194b0ead49Smrg    rm -f "$tmpdepfile"
1204b0ead49Smrg    exit $stat
1214b0ead49Smrg  fi
1224b0ead49Smrg  mv "$tmpdepfile" "$depfile"
1234b0ead49Smrg  ;;
1244b0ead49Smrg
1254b0ead49Smrggcc)
1264b0ead49Smrg## There are various ways to get dependency output from gcc.  Here's
1274b0ead49Smrg## why we pick this rather obscure method:
1284b0ead49Smrg## - Don't want to use -MD because we'd like the dependencies to end
1294b0ead49Smrg##   up in a subdir.  Having to rename by hand is ugly.
1304b0ead49Smrg##   (We might end up doing this anyway to support other compilers.)
1314b0ead49Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
1324b0ead49Smrg##   -MM, not -M (despite what the docs say).
1334b0ead49Smrg## - Using -M directly means running the compiler twice (even worse
1344b0ead49Smrg##   than renaming).
1354b0ead49Smrg  if test -z "$gccflag"; then
1364b0ead49Smrg    gccflag=-MD,
1374b0ead49Smrg  fi
1384b0ead49Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
1394b0ead49Smrg  stat=$?
1404b0ead49Smrg  if test $stat -eq 0; then :
1414b0ead49Smrg  else
1424b0ead49Smrg    rm -f "$tmpdepfile"
1434b0ead49Smrg    exit $stat
1444b0ead49Smrg  fi
1454b0ead49Smrg  rm -f "$depfile"
1464b0ead49Smrg  echo "$object : \\" > "$depfile"
1474b0ead49Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
1484b0ead49Smrg## The second -e expression handles DOS-style file names with drive letters.
1494b0ead49Smrg  sed -e 's/^[^:]*: / /' \
1504b0ead49Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
1514b0ead49Smrg## This next piece of magic avoids the `deleted header file' problem.
1524b0ead49Smrg## The problem is that when a header file which appears in a .P file
1534b0ead49Smrg## is deleted, the dependency causes make to die (because there is
1544b0ead49Smrg## typically no way to rebuild the header).  We avoid this by adding
1554b0ead49Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
1564b0ead49Smrg## this for us directly.
1574b0ead49Smrg  tr ' ' '
1584b0ead49Smrg' < "$tmpdepfile" |
1594b0ead49Smrg## Some versions of gcc put a space before the `:'.  On the theory
1604b0ead49Smrg## that the space means something, we add a space to the output as
1614b0ead49Smrg## well.
1624b0ead49Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
1634b0ead49Smrg## correctly.  Breaking it into two sed invocations is a workaround.
1644b0ead49Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
1654b0ead49Smrg  rm -f "$tmpdepfile"
1664b0ead49Smrg  ;;
1674b0ead49Smrg
1684b0ead49Smrghp)
1694b0ead49Smrg  # This case exists only to let depend.m4 do its work.  It works by
1704b0ead49Smrg  # looking at the text of this script.  This case will never be run,
1714b0ead49Smrg  # since it is checked for above.
1724b0ead49Smrg  exit 1
1734b0ead49Smrg  ;;
1744b0ead49Smrg
1754b0ead49Smrgsgi)
1764b0ead49Smrg  if test "$libtool" = yes; then
1774b0ead49Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
1784b0ead49Smrg  else
1794b0ead49Smrg    "$@" -MDupdate "$tmpdepfile"
1804b0ead49Smrg  fi
1814b0ead49Smrg  stat=$?
1824b0ead49Smrg  if test $stat -eq 0; then :
1834b0ead49Smrg  else
1844b0ead49Smrg    rm -f "$tmpdepfile"
1854b0ead49Smrg    exit $stat
1864b0ead49Smrg  fi
1874b0ead49Smrg  rm -f "$depfile"
1884b0ead49Smrg
1894b0ead49Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
1904b0ead49Smrg    echo "$object : \\" > "$depfile"
1914b0ead49Smrg
1924b0ead49Smrg    # Clip off the initial element (the dependent).  Don't try to be
1934b0ead49Smrg    # clever and replace this with sed code, as IRIX sed won't handle
1944b0ead49Smrg    # lines with more than a fixed number of characters (4096 in
1954b0ead49Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
1964b0ead49Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
1974b0ead49Smrg    # dependency line.
1984b0ead49Smrg    tr ' ' '
1994b0ead49Smrg' < "$tmpdepfile" \
2004b0ead49Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
2014b0ead49Smrg    tr '
20252b01e16Smrg' ' ' >> "$depfile"
20352b01e16Smrg    echo >> "$depfile"
2044b0ead49Smrg
2054b0ead49Smrg    # The second pass generates a dummy entry for each header file.
2064b0ead49Smrg    tr ' ' '
2074b0ead49Smrg' < "$tmpdepfile" \
2084b0ead49Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
20952b01e16Smrg   >> "$depfile"
2104b0ead49Smrg  else
2114b0ead49Smrg    # The sourcefile does not contain any dependencies, so just
2124b0ead49Smrg    # store a dummy comment line, to avoid errors with the Makefile
2134b0ead49Smrg    # "include basename.Plo" scheme.
2144b0ead49Smrg    echo "#dummy" > "$depfile"
2154b0ead49Smrg  fi
2164b0ead49Smrg  rm -f "$tmpdepfile"
2174b0ead49Smrg  ;;
2184b0ead49Smrg
2194b0ead49Smrgaix)
2204b0ead49Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
2214b0ead49Smrg  # in a .u file.  In older versions, this file always lives in the
2224b0ead49Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
2234b0ead49Smrg  # start of each line; $object doesn't have directory information.
2244b0ead49Smrg  # Version 6 uses the directory in both cases.
22552b01e16Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
22652b01e16Smrg  test "x$dir" = "x$object" && dir=
22752b01e16Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
2284b0ead49Smrg  if test "$libtool" = yes; then
22952b01e16Smrg    tmpdepfile1=$dir$base.u
23052b01e16Smrg    tmpdepfile2=$base.u
23152b01e16Smrg    tmpdepfile3=$dir.libs/$base.u
2324b0ead49Smrg    "$@" -Wc,-M
2334b0ead49Smrg  else
23452b01e16Smrg    tmpdepfile1=$dir$base.u
23552b01e16Smrg    tmpdepfile2=$dir$base.u
23652b01e16Smrg    tmpdepfile3=$dir$base.u
2374b0ead49Smrg    "$@" -M
2384b0ead49Smrg  fi
2394b0ead49Smrg  stat=$?
2404b0ead49Smrg
2414b0ead49Smrg  if test $stat -eq 0; then :
2424b0ead49Smrg  else
24352b01e16Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2444b0ead49Smrg    exit $stat
2454b0ead49Smrg  fi
2464b0ead49Smrg
24752b01e16Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
24852b01e16Smrg  do
24952b01e16Smrg    test -f "$tmpdepfile" && break
25052b01e16Smrg  done
2514b0ead49Smrg  if test -f "$tmpdepfile"; then
2524b0ead49Smrg    # Each line is of the form `foo.o: dependent.h'.
2534b0ead49Smrg    # Do two passes, one to just change these to
2544b0ead49Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
25552b01e16Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
25652b01e16Smrg    # That's a tab and a space in the [].
25752b01e16Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
2584b0ead49Smrg  else
2594b0ead49Smrg    # The sourcefile does not contain any dependencies, so just
2604b0ead49Smrg    # store a dummy comment line, to avoid errors with the Makefile
2614b0ead49Smrg    # "include basename.Plo" scheme.
2624b0ead49Smrg    echo "#dummy" > "$depfile"
2634b0ead49Smrg  fi
2644b0ead49Smrg  rm -f "$tmpdepfile"
2654b0ead49Smrg  ;;
2664b0ead49Smrg
2674b0ead49Smrgicc)
2684b0ead49Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
2694b0ead49Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
2704b0ead49Smrg  # ICC 7.0 will fill foo.d with something like
2714b0ead49Smrg  #    foo.o: sub/foo.c
2724b0ead49Smrg  #    foo.o: sub/foo.h
2734b0ead49Smrg  # which is wrong.  We want:
2744b0ead49Smrg  #    sub/foo.o: sub/foo.c
2754b0ead49Smrg  #    sub/foo.o: sub/foo.h
2764b0ead49Smrg  #    sub/foo.c:
2774b0ead49Smrg  #    sub/foo.h:
2784b0ead49Smrg  # ICC 7.1 will output
2794b0ead49Smrg  #    foo.o: sub/foo.c sub/foo.h
2804b0ead49Smrg  # and will wrap long lines using \ :
2814b0ead49Smrg  #    foo.o: sub/foo.c ... \
2824b0ead49Smrg  #     sub/foo.h ... \
2834b0ead49Smrg  #     ...
2844b0ead49Smrg
2854b0ead49Smrg  "$@" -MD -MF "$tmpdepfile"
2864b0ead49Smrg  stat=$?
2874b0ead49Smrg  if test $stat -eq 0; then :
2884b0ead49Smrg  else
2894b0ead49Smrg    rm -f "$tmpdepfile"
2904b0ead49Smrg    exit $stat
2914b0ead49Smrg  fi
2924b0ead49Smrg  rm -f "$depfile"
2934b0ead49Smrg  # Each line is of the form `foo.o: dependent.h',
2944b0ead49Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
2954b0ead49Smrg  # Do two passes, one to just change these to
2964b0ead49Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
2974b0ead49Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
2984b0ead49Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
2994b0ead49Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
3004b0ead49Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
3014b0ead49Smrg    sed -e 's/$/ :/' >> "$depfile"
3024b0ead49Smrg  rm -f "$tmpdepfile"
3034b0ead49Smrg  ;;
3044b0ead49Smrg
30552b01e16Smrghp2)
30652b01e16Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
30752b01e16Smrg  # compilers, which have integrated preprocessors.  The correct option
30852b01e16Smrg  # to use with these is +Maked; it writes dependencies to a file named
30952b01e16Smrg  # 'foo.d', which lands next to the object file, wherever that
31052b01e16Smrg  # happens to be.
31152b01e16Smrg  # Much of this is similar to the tru64 case; see comments there.
31252b01e16Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
31352b01e16Smrg  test "x$dir" = "x$object" && dir=
31452b01e16Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
31552b01e16Smrg  if test "$libtool" = yes; then
31652b01e16Smrg    tmpdepfile1=$dir$base.d
31752b01e16Smrg    tmpdepfile2=$dir.libs/$base.d
31852b01e16Smrg    "$@" -Wc,+Maked
31952b01e16Smrg  else
32052b01e16Smrg    tmpdepfile1=$dir$base.d
32152b01e16Smrg    tmpdepfile2=$dir$base.d
32252b01e16Smrg    "$@" +Maked
32352b01e16Smrg  fi
32452b01e16Smrg  stat=$?
32552b01e16Smrg  if test $stat -eq 0; then :
32652b01e16Smrg  else
32752b01e16Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
32852b01e16Smrg     exit $stat
32952b01e16Smrg  fi
33052b01e16Smrg
33152b01e16Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
33252b01e16Smrg  do
33352b01e16Smrg    test -f "$tmpdepfile" && break
33452b01e16Smrg  done
33552b01e16Smrg  if test -f "$tmpdepfile"; then
33652b01e16Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
33752b01e16Smrg    # Add `dependent.h:' lines.
33852b01e16Smrg    sed -ne '2,${
33952b01e16Smrg	       s/^ *//
34052b01e16Smrg	       s/ \\*$//
34152b01e16Smrg	       s/$/:/
34252b01e16Smrg	       p
34352b01e16Smrg	     }' "$tmpdepfile" >> "$depfile"
34452b01e16Smrg  else
34552b01e16Smrg    echo "#dummy" > "$depfile"
34652b01e16Smrg  fi
34752b01e16Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
34852b01e16Smrg  ;;
34952b01e16Smrg
3504b0ead49Smrgtru64)
3514b0ead49Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
3524b0ead49Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
3534b0ead49Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
3544b0ead49Smrg   # dependencies in `foo.d' instead, so we check for that too.
3554b0ead49Smrg   # Subdirectories are respected.
3564b0ead49Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3574b0ead49Smrg   test "x$dir" = "x$object" && dir=
3584b0ead49Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3594b0ead49Smrg
3604b0ead49Smrg   if test "$libtool" = yes; then
3614b0ead49Smrg      # With Tru64 cc, shared objects can also be used to make a
36252b01e16Smrg      # static library.  This mechanism is used in libtool 1.4 series to
3634b0ead49Smrg      # handle both shared and static libraries in a single compilation.
3644b0ead49Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
3654b0ead49Smrg      #
3664b0ead49Smrg      # With libtool 1.5 this exception was removed, and libtool now
3674b0ead49Smrg      # generates 2 separate objects for the 2 libraries.  These two
36852b01e16Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
3694b0ead49Smrg      # in $dir$base.o.d.  We have to check for both files, because
3704b0ead49Smrg      # one of the two compilations can be disabled.  We should prefer
3714b0ead49Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
3724b0ead49Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
3734b0ead49Smrg      # the former would cause a distcleancheck panic.
3744b0ead49Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
3754b0ead49Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
3764b0ead49Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
3774b0ead49Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
3784b0ead49Smrg      "$@" -Wc,-MD
3794b0ead49Smrg   else
3804b0ead49Smrg      tmpdepfile1=$dir$base.o.d
3814b0ead49Smrg      tmpdepfile2=$dir$base.d
3824b0ead49Smrg      tmpdepfile3=$dir$base.d
3834b0ead49Smrg      tmpdepfile4=$dir$base.d
3844b0ead49Smrg      "$@" -MD
3854b0ead49Smrg   fi
3864b0ead49Smrg
3874b0ead49Smrg   stat=$?
3884b0ead49Smrg   if test $stat -eq 0; then :
3894b0ead49Smrg   else
3904b0ead49Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3914b0ead49Smrg      exit $stat
3924b0ead49Smrg   fi
3934b0ead49Smrg
3944b0ead49Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3954b0ead49Smrg   do
3964b0ead49Smrg     test -f "$tmpdepfile" && break
3974b0ead49Smrg   done
3984b0ead49Smrg   if test -f "$tmpdepfile"; then
3994b0ead49Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
4004b0ead49Smrg      # That's a tab and a space in the [].
4014b0ead49Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
4024b0ead49Smrg   else
4034b0ead49Smrg      echo "#dummy" > "$depfile"
4044b0ead49Smrg   fi
4054b0ead49Smrg   rm -f "$tmpdepfile"
4064b0ead49Smrg   ;;
4074b0ead49Smrg
4084b0ead49Smrg#nosideeffect)
4094b0ead49Smrg  # This comment above is used by automake to tell side-effect
4104b0ead49Smrg  # dependency tracking mechanisms from slower ones.
4114b0ead49Smrg
4124b0ead49Smrgdashmstdout)
4134b0ead49Smrg  # Important note: in order to support this mode, a compiler *must*
4144b0ead49Smrg  # always write the preprocessed file to stdout, regardless of -o.
4154b0ead49Smrg  "$@" || exit $?
4164b0ead49Smrg
4174b0ead49Smrg  # Remove the call to Libtool.
4184b0ead49Smrg  if test "$libtool" = yes; then
41952b01e16Smrg    while test "X$1" != 'X--mode=compile'; do
4204b0ead49Smrg      shift
4214b0ead49Smrg    done
4224b0ead49Smrg    shift
4234b0ead49Smrg  fi
4244b0ead49Smrg
4254b0ead49Smrg  # Remove `-o $object'.
4264b0ead49Smrg  IFS=" "
4274b0ead49Smrg  for arg
4284b0ead49Smrg  do
4294b0ead49Smrg    case $arg in
4304b0ead49Smrg    -o)
4314b0ead49Smrg      shift
4324b0ead49Smrg      ;;
4334b0ead49Smrg    $object)
4344b0ead49Smrg      shift
4354b0ead49Smrg      ;;
4364b0ead49Smrg    *)
4374b0ead49Smrg      set fnord "$@" "$arg"
4384b0ead49Smrg      shift # fnord
4394b0ead49Smrg      shift # $arg
4404b0ead49Smrg      ;;
4414b0ead49Smrg    esac
4424b0ead49Smrg  done
4434b0ead49Smrg
4444b0ead49Smrg  test -z "$dashmflag" && dashmflag=-M
4454b0ead49Smrg  # Require at least two characters before searching for `:'
4464b0ead49Smrg  # in the target name.  This is to cope with DOS-style filenames:
4474b0ead49Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
4484b0ead49Smrg  "$@" $dashmflag |
4494b0ead49Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
4504b0ead49Smrg  rm -f "$depfile"
4514b0ead49Smrg  cat < "$tmpdepfile" > "$depfile"
4524b0ead49Smrg  tr ' ' '
4534b0ead49Smrg' < "$tmpdepfile" | \
4544b0ead49Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
4554b0ead49Smrg## correctly.  Breaking it into two sed invocations is a workaround.
4564b0ead49Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
4574b0ead49Smrg  rm -f "$tmpdepfile"
4584b0ead49Smrg  ;;
4594b0ead49Smrg
4604b0ead49SmrgdashXmstdout)
4614b0ead49Smrg  # This case only exists to satisfy depend.m4.  It is never actually
4624b0ead49Smrg  # run, as this mode is specially recognized in the preamble.
4634b0ead49Smrg  exit 1
4644b0ead49Smrg  ;;
4654b0ead49Smrg
4664b0ead49Smrgmakedepend)
4674b0ead49Smrg  "$@" || exit $?
4684b0ead49Smrg  # Remove any Libtool call
4694b0ead49Smrg  if test "$libtool" = yes; then
47052b01e16Smrg    while test "X$1" != 'X--mode=compile'; do
4714b0ead49Smrg      shift
4724b0ead49Smrg    done
4734b0ead49Smrg    shift
4744b0ead49Smrg  fi
4754b0ead49Smrg  # X makedepend
4764b0ead49Smrg  shift
47752b01e16Smrg  cleared=no eat=no
47852b01e16Smrg  for arg
47952b01e16Smrg  do
4804b0ead49Smrg    case $cleared in
4814b0ead49Smrg    no)
4824b0ead49Smrg      set ""; shift
4834b0ead49Smrg      cleared=yes ;;
4844b0ead49Smrg    esac
48552b01e16Smrg    if test $eat = yes; then
48652b01e16Smrg      eat=no
48752b01e16Smrg      continue
48852b01e16Smrg    fi
4894b0ead49Smrg    case "$arg" in
4904b0ead49Smrg    -D*|-I*)
4914b0ead49Smrg      set fnord "$@" "$arg"; shift ;;
4924b0ead49Smrg    # Strip any option that makedepend may not understand.  Remove
4934b0ead49Smrg    # the object too, otherwise makedepend will parse it as a source file.
49452b01e16Smrg    -arch)
49552b01e16Smrg      eat=yes ;;
4964b0ead49Smrg    -*|$object)
4974b0ead49Smrg      ;;
4984b0ead49Smrg    *)
4994b0ead49Smrg      set fnord "$@" "$arg"; shift ;;
5004b0ead49Smrg    esac
5014b0ead49Smrg  done
50252b01e16Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
5034b0ead49Smrg  touch "$tmpdepfile"
5044b0ead49Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
5054b0ead49Smrg  rm -f "$depfile"
5064b0ead49Smrg  cat < "$tmpdepfile" > "$depfile"
5074b0ead49Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
5084b0ead49Smrg' | \
5094b0ead49Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
5104b0ead49Smrg## correctly.  Breaking it into two sed invocations is a workaround.
5114b0ead49Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
5124b0ead49Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
5134b0ead49Smrg  ;;
5144b0ead49Smrg
5154b0ead49Smrgcpp)
5164b0ead49Smrg  # Important note: in order to support this mode, a compiler *must*
5174b0ead49Smrg  # always write the preprocessed file to stdout.
5184b0ead49Smrg  "$@" || exit $?
5194b0ead49Smrg
5204b0ead49Smrg  # Remove the call to Libtool.
5214b0ead49Smrg  if test "$libtool" = yes; then
52252b01e16Smrg    while test "X$1" != 'X--mode=compile'; do
5234b0ead49Smrg      shift
5244b0ead49Smrg    done
5254b0ead49Smrg    shift
5264b0ead49Smrg  fi
5274b0ead49Smrg
5284b0ead49Smrg  # Remove `-o $object'.
5294b0ead49Smrg  IFS=" "
5304b0ead49Smrg  for arg
5314b0ead49Smrg  do
5324b0ead49Smrg    case $arg in
5334b0ead49Smrg    -o)
5344b0ead49Smrg      shift
5354b0ead49Smrg      ;;
5364b0ead49Smrg    $object)
5374b0ead49Smrg      shift
5384b0ead49Smrg      ;;
5394b0ead49Smrg    *)
5404b0ead49Smrg      set fnord "$@" "$arg"
5414b0ead49Smrg      shift # fnord
5424b0ead49Smrg      shift # $arg
5434b0ead49Smrg      ;;
5444b0ead49Smrg    esac
5454b0ead49Smrg  done
5464b0ead49Smrg
5474b0ead49Smrg  "$@" -E |
5484b0ead49Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
5494b0ead49Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
5504b0ead49Smrg    sed '$ s: \\$::' > "$tmpdepfile"
5514b0ead49Smrg  rm -f "$depfile"
5524b0ead49Smrg  echo "$object : \\" > "$depfile"
5534b0ead49Smrg  cat < "$tmpdepfile" >> "$depfile"
5544b0ead49Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
5554b0ead49Smrg  rm -f "$tmpdepfile"
5564b0ead49Smrg  ;;
5574b0ead49Smrg
5584b0ead49Smrgmsvisualcpp)
5594b0ead49Smrg  # Important note: in order to support this mode, a compiler *must*
56052b01e16Smrg  # always write the preprocessed file to stdout.
5614b0ead49Smrg  "$@" || exit $?
56252b01e16Smrg
56352b01e16Smrg  # Remove the call to Libtool.
56452b01e16Smrg  if test "$libtool" = yes; then
56552b01e16Smrg    while test "X$1" != 'X--mode=compile'; do
56652b01e16Smrg      shift
56752b01e16Smrg    done
56852b01e16Smrg    shift
56952b01e16Smrg  fi
57052b01e16Smrg
5714b0ead49Smrg  IFS=" "
5724b0ead49Smrg  for arg
5734b0ead49Smrg  do
5744b0ead49Smrg    case "$arg" in
57552b01e16Smrg    -o)
57652b01e16Smrg      shift
57752b01e16Smrg      ;;
57852b01e16Smrg    $object)
57952b01e16Smrg      shift
58052b01e16Smrg      ;;
5814b0ead49Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
5824b0ead49Smrg	set fnord "$@"
5834b0ead49Smrg	shift
5844b0ead49Smrg	shift
5854b0ead49Smrg	;;
5864b0ead49Smrg    *)
5874b0ead49Smrg	set fnord "$@" "$arg"
5884b0ead49Smrg	shift
5894b0ead49Smrg	shift
5904b0ead49Smrg	;;
5914b0ead49Smrg    esac
5924b0ead49Smrg  done
59352b01e16Smrg  "$@" -E 2>/dev/null |
59452b01e16Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
5954b0ead49Smrg  rm -f "$depfile"
5964b0ead49Smrg  echo "$object : \\" > "$depfile"
59752b01e16Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
5984b0ead49Smrg  echo "	" >> "$depfile"
59952b01e16Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
6004b0ead49Smrg  rm -f "$tmpdepfile"
6014b0ead49Smrg  ;;
6024b0ead49Smrg
60352b01e16Smrgmsvcmsys)
60452b01e16Smrg  # This case exists only to let depend.m4 do its work.  It works by
60552b01e16Smrg  # looking at the text of this script.  This case will never be run,
60652b01e16Smrg  # since it is checked for above.
60752b01e16Smrg  exit 1
60852b01e16Smrg  ;;
60952b01e16Smrg
6104b0ead49Smrgnone)
6114b0ead49Smrg  exec "$@"
6124b0ead49Smrg  ;;
6134b0ead49Smrg
6144b0ead49Smrg*)
6154b0ead49Smrg  echo "Unknown depmode $depmode" 1>&2
6164b0ead49Smrg  exit 1
6174b0ead49Smrg  ;;
6184b0ead49Smrgesac
6194b0ead49Smrg
6204b0ead49Smrgexit 0
6214b0ead49Smrg
6224b0ead49Smrg# Local Variables:
6234b0ead49Smrg# mode: shell-script
6244b0ead49Smrg# sh-indentation: 2
6254b0ead49Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
6264b0ead49Smrg# time-stamp-start: "scriptversion="
6274b0ead49Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
62852b01e16Smrg# time-stamp-time-zone: "UTC"
62952b01e16Smrg# time-stamp-end: "; # UTC"
6304b0ead49Smrg# End:
631