depcomp revision 4e7590ef
14b0ead49Smrg#! /bin/sh
24b0ead49Smrg# depcomp - compile a program generating dependencies as side-effects
34b0ead49Smrg
44e7590efSmrgscriptversion=2011-12-04.11; # UTC
54b0ead49Smrg
64e7590efSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
74e7590efSmrg# 2011 Free 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.
474e7590efSmrg  tmpdepfile  Temporary file to use when outputting 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
934e7590efSmrg   cygpath_u='sed s,\\\\,/,g'
9452b01e16Smrg   depmode=msvisualcpp
9552b01e16Smrgfi
9652b01e16Smrg
974e7590efSmrgif test "$depmode" = msvc7msys; then
984e7590efSmrg   # This is just like msvc7 but w/o cygpath translation.
994e7590efSmrg   # Just convert the backslash-escaped backslashes to single forward
1004e7590efSmrg   # slashes to satisfy depend.m4
1014e7590efSmrg   cygpath_u='sed s,\\\\,/,g'
1024e7590efSmrg   depmode=msvc7
1034e7590efSmrgfi
1044e7590efSmrg
1054b0ead49Smrgcase "$depmode" in
1064b0ead49Smrggcc3)
1074b0ead49Smrg## gcc 3 implements dependency tracking that does exactly what
1084b0ead49Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
1094b0ead49Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
11052b01e16Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
11152b01e16Smrg## the command line argument order; so add the flags where they
11252b01e16Smrg## appear in depend2.am.  Note that the slowdown incurred here
11352b01e16Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
11452b01e16Smrg  for arg
11552b01e16Smrg  do
11652b01e16Smrg    case $arg in
11752b01e16Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
11852b01e16Smrg    *)  set fnord "$@" "$arg" ;;
11952b01e16Smrg    esac
12052b01e16Smrg    shift # fnord
12152b01e16Smrg    shift # $arg
12252b01e16Smrg  done
12352b01e16Smrg  "$@"
1244b0ead49Smrg  stat=$?
1254b0ead49Smrg  if test $stat -eq 0; then :
1264b0ead49Smrg  else
1274b0ead49Smrg    rm -f "$tmpdepfile"
1284b0ead49Smrg    exit $stat
1294b0ead49Smrg  fi
1304b0ead49Smrg  mv "$tmpdepfile" "$depfile"
1314b0ead49Smrg  ;;
1324b0ead49Smrg
1334b0ead49Smrggcc)
1344b0ead49Smrg## There are various ways to get dependency output from gcc.  Here's
1354b0ead49Smrg## why we pick this rather obscure method:
1364b0ead49Smrg## - Don't want to use -MD because we'd like the dependencies to end
1374b0ead49Smrg##   up in a subdir.  Having to rename by hand is ugly.
1384b0ead49Smrg##   (We might end up doing this anyway to support other compilers.)
1394b0ead49Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
1404b0ead49Smrg##   -MM, not -M (despite what the docs say).
1414b0ead49Smrg## - Using -M directly means running the compiler twice (even worse
1424b0ead49Smrg##   than renaming).
1434b0ead49Smrg  if test -z "$gccflag"; then
1444b0ead49Smrg    gccflag=-MD,
1454b0ead49Smrg  fi
1464b0ead49Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
1474b0ead49Smrg  stat=$?
1484b0ead49Smrg  if test $stat -eq 0; then :
1494b0ead49Smrg  else
1504b0ead49Smrg    rm -f "$tmpdepfile"
1514b0ead49Smrg    exit $stat
1524b0ead49Smrg  fi
1534b0ead49Smrg  rm -f "$depfile"
1544b0ead49Smrg  echo "$object : \\" > "$depfile"
1554b0ead49Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
1564b0ead49Smrg## The second -e expression handles DOS-style file names with drive letters.
1574b0ead49Smrg  sed -e 's/^[^:]*: / /' \
1584b0ead49Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
1594b0ead49Smrg## This next piece of magic avoids the `deleted header file' problem.
1604b0ead49Smrg## The problem is that when a header file which appears in a .P file
1614b0ead49Smrg## is deleted, the dependency causes make to die (because there is
1624b0ead49Smrg## typically no way to rebuild the header).  We avoid this by adding
1634b0ead49Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
1644b0ead49Smrg## this for us directly.
1654b0ead49Smrg  tr ' ' '
1664b0ead49Smrg' < "$tmpdepfile" |
1674b0ead49Smrg## Some versions of gcc put a space before the `:'.  On the theory
1684b0ead49Smrg## that the space means something, we add a space to the output as
1694e7590efSmrg## well.  hp depmode also adds that space, but also prefixes the VPATH
1704e7590efSmrg## to the object.  Take care to not repeat it in the output.
1714b0ead49Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
1724b0ead49Smrg## correctly.  Breaking it into two sed invocations is a workaround.
1734e7590efSmrg    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
1744e7590efSmrg      | sed -e 's/$/ :/' >> "$depfile"
1754b0ead49Smrg  rm -f "$tmpdepfile"
1764b0ead49Smrg  ;;
1774b0ead49Smrg
1784b0ead49Smrghp)
1794b0ead49Smrg  # This case exists only to let depend.m4 do its work.  It works by
1804b0ead49Smrg  # looking at the text of this script.  This case will never be run,
1814b0ead49Smrg  # since it is checked for above.
1824b0ead49Smrg  exit 1
1834b0ead49Smrg  ;;
1844b0ead49Smrg
1854b0ead49Smrgsgi)
1864b0ead49Smrg  if test "$libtool" = yes; then
1874b0ead49Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
1884b0ead49Smrg  else
1894b0ead49Smrg    "$@" -MDupdate "$tmpdepfile"
1904b0ead49Smrg  fi
1914b0ead49Smrg  stat=$?
1924b0ead49Smrg  if test $stat -eq 0; then :
1934b0ead49Smrg  else
1944b0ead49Smrg    rm -f "$tmpdepfile"
1954b0ead49Smrg    exit $stat
1964b0ead49Smrg  fi
1974b0ead49Smrg  rm -f "$depfile"
1984b0ead49Smrg
1994b0ead49Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
2004b0ead49Smrg    echo "$object : \\" > "$depfile"
2014b0ead49Smrg
2024b0ead49Smrg    # Clip off the initial element (the dependent).  Don't try to be
2034b0ead49Smrg    # clever and replace this with sed code, as IRIX sed won't handle
2044b0ead49Smrg    # lines with more than a fixed number of characters (4096 in
2054b0ead49Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
2064b0ead49Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
2074b0ead49Smrg    # dependency line.
2084b0ead49Smrg    tr ' ' '
2094b0ead49Smrg' < "$tmpdepfile" \
2104b0ead49Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
2114b0ead49Smrg    tr '
21252b01e16Smrg' ' ' >> "$depfile"
21352b01e16Smrg    echo >> "$depfile"
2144b0ead49Smrg
2154b0ead49Smrg    # The second pass generates a dummy entry for each header file.
2164b0ead49Smrg    tr ' ' '
2174b0ead49Smrg' < "$tmpdepfile" \
2184b0ead49Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
21952b01e16Smrg   >> "$depfile"
2204b0ead49Smrg  else
2214b0ead49Smrg    # The sourcefile does not contain any dependencies, so just
2224b0ead49Smrg    # store a dummy comment line, to avoid errors with the Makefile
2234b0ead49Smrg    # "include basename.Plo" scheme.
2244b0ead49Smrg    echo "#dummy" > "$depfile"
2254b0ead49Smrg  fi
2264b0ead49Smrg  rm -f "$tmpdepfile"
2274b0ead49Smrg  ;;
2284b0ead49Smrg
2294b0ead49Smrgaix)
2304b0ead49Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
2314b0ead49Smrg  # in a .u file.  In older versions, this file always lives in the
2324b0ead49Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
2334b0ead49Smrg  # start of each line; $object doesn't have directory information.
2344b0ead49Smrg  # Version 6 uses the directory in both cases.
23552b01e16Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
23652b01e16Smrg  test "x$dir" = "x$object" && dir=
23752b01e16Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
2384b0ead49Smrg  if test "$libtool" = yes; then
23952b01e16Smrg    tmpdepfile1=$dir$base.u
24052b01e16Smrg    tmpdepfile2=$base.u
24152b01e16Smrg    tmpdepfile3=$dir.libs/$base.u
2424b0ead49Smrg    "$@" -Wc,-M
2434b0ead49Smrg  else
24452b01e16Smrg    tmpdepfile1=$dir$base.u
24552b01e16Smrg    tmpdepfile2=$dir$base.u
24652b01e16Smrg    tmpdepfile3=$dir$base.u
2474b0ead49Smrg    "$@" -M
2484b0ead49Smrg  fi
2494b0ead49Smrg  stat=$?
2504b0ead49Smrg
2514b0ead49Smrg  if test $stat -eq 0; then :
2524b0ead49Smrg  else
25352b01e16Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2544b0ead49Smrg    exit $stat
2554b0ead49Smrg  fi
2564b0ead49Smrg
25752b01e16Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
25852b01e16Smrg  do
25952b01e16Smrg    test -f "$tmpdepfile" && break
26052b01e16Smrg  done
2614b0ead49Smrg  if test -f "$tmpdepfile"; then
2624b0ead49Smrg    # Each line is of the form `foo.o: dependent.h'.
2634b0ead49Smrg    # Do two passes, one to just change these to
2644b0ead49Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
26552b01e16Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
26652b01e16Smrg    # That's a tab and a space in the [].
26752b01e16Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
2684b0ead49Smrg  else
2694b0ead49Smrg    # The sourcefile does not contain any dependencies, so just
2704b0ead49Smrg    # store a dummy comment line, to avoid errors with the Makefile
2714b0ead49Smrg    # "include basename.Plo" scheme.
2724b0ead49Smrg    echo "#dummy" > "$depfile"
2734b0ead49Smrg  fi
2744b0ead49Smrg  rm -f "$tmpdepfile"
2754b0ead49Smrg  ;;
2764b0ead49Smrg
2774b0ead49Smrgicc)
2784b0ead49Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
2794b0ead49Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
2804b0ead49Smrg  # ICC 7.0 will fill foo.d with something like
2814b0ead49Smrg  #    foo.o: sub/foo.c
2824b0ead49Smrg  #    foo.o: sub/foo.h
2834b0ead49Smrg  # which is wrong.  We want:
2844b0ead49Smrg  #    sub/foo.o: sub/foo.c
2854b0ead49Smrg  #    sub/foo.o: sub/foo.h
2864b0ead49Smrg  #    sub/foo.c:
2874b0ead49Smrg  #    sub/foo.h:
2884b0ead49Smrg  # ICC 7.1 will output
2894b0ead49Smrg  #    foo.o: sub/foo.c sub/foo.h
2904b0ead49Smrg  # and will wrap long lines using \ :
2914b0ead49Smrg  #    foo.o: sub/foo.c ... \
2924b0ead49Smrg  #     sub/foo.h ... \
2934b0ead49Smrg  #     ...
2944b0ead49Smrg
2954b0ead49Smrg  "$@" -MD -MF "$tmpdepfile"
2964b0ead49Smrg  stat=$?
2974b0ead49Smrg  if test $stat -eq 0; then :
2984b0ead49Smrg  else
2994b0ead49Smrg    rm -f "$tmpdepfile"
3004b0ead49Smrg    exit $stat
3014b0ead49Smrg  fi
3024b0ead49Smrg  rm -f "$depfile"
3034b0ead49Smrg  # Each line is of the form `foo.o: dependent.h',
3044b0ead49Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
3054b0ead49Smrg  # Do two passes, one to just change these to
3064b0ead49Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
3074b0ead49Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
3084b0ead49Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
3094b0ead49Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
3104b0ead49Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
3114b0ead49Smrg    sed -e 's/$/ :/' >> "$depfile"
3124b0ead49Smrg  rm -f "$tmpdepfile"
3134b0ead49Smrg  ;;
3144b0ead49Smrg
31552b01e16Smrghp2)
31652b01e16Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
31752b01e16Smrg  # compilers, which have integrated preprocessors.  The correct option
31852b01e16Smrg  # to use with these is +Maked; it writes dependencies to a file named
31952b01e16Smrg  # 'foo.d', which lands next to the object file, wherever that
32052b01e16Smrg  # happens to be.
32152b01e16Smrg  # Much of this is similar to the tru64 case; see comments there.
32252b01e16Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
32352b01e16Smrg  test "x$dir" = "x$object" && dir=
32452b01e16Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
32552b01e16Smrg  if test "$libtool" = yes; then
32652b01e16Smrg    tmpdepfile1=$dir$base.d
32752b01e16Smrg    tmpdepfile2=$dir.libs/$base.d
32852b01e16Smrg    "$@" -Wc,+Maked
32952b01e16Smrg  else
33052b01e16Smrg    tmpdepfile1=$dir$base.d
33152b01e16Smrg    tmpdepfile2=$dir$base.d
33252b01e16Smrg    "$@" +Maked
33352b01e16Smrg  fi
33452b01e16Smrg  stat=$?
33552b01e16Smrg  if test $stat -eq 0; then :
33652b01e16Smrg  else
33752b01e16Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
33852b01e16Smrg     exit $stat
33952b01e16Smrg  fi
34052b01e16Smrg
34152b01e16Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
34252b01e16Smrg  do
34352b01e16Smrg    test -f "$tmpdepfile" && break
34452b01e16Smrg  done
34552b01e16Smrg  if test -f "$tmpdepfile"; then
34652b01e16Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
34752b01e16Smrg    # Add `dependent.h:' lines.
34852b01e16Smrg    sed -ne '2,${
34952b01e16Smrg	       s/^ *//
35052b01e16Smrg	       s/ \\*$//
35152b01e16Smrg	       s/$/:/
35252b01e16Smrg	       p
35352b01e16Smrg	     }' "$tmpdepfile" >> "$depfile"
35452b01e16Smrg  else
35552b01e16Smrg    echo "#dummy" > "$depfile"
35652b01e16Smrg  fi
35752b01e16Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
35852b01e16Smrg  ;;
35952b01e16Smrg
3604b0ead49Smrgtru64)
3614b0ead49Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
3624b0ead49Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
3634b0ead49Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
3644b0ead49Smrg   # dependencies in `foo.d' instead, so we check for that too.
3654b0ead49Smrg   # Subdirectories are respected.
3664b0ead49Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3674b0ead49Smrg   test "x$dir" = "x$object" && dir=
3684b0ead49Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3694b0ead49Smrg
3704b0ead49Smrg   if test "$libtool" = yes; then
3714b0ead49Smrg      # With Tru64 cc, shared objects can also be used to make a
37252b01e16Smrg      # static library.  This mechanism is used in libtool 1.4 series to
3734b0ead49Smrg      # handle both shared and static libraries in a single compilation.
3744b0ead49Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
3754b0ead49Smrg      #
3764b0ead49Smrg      # With libtool 1.5 this exception was removed, and libtool now
3774b0ead49Smrg      # generates 2 separate objects for the 2 libraries.  These two
37852b01e16Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
3794b0ead49Smrg      # in $dir$base.o.d.  We have to check for both files, because
3804b0ead49Smrg      # one of the two compilations can be disabled.  We should prefer
3814b0ead49Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
3824b0ead49Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
3834b0ead49Smrg      # the former would cause a distcleancheck panic.
3844b0ead49Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
3854b0ead49Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
3864b0ead49Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
3874b0ead49Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
3884b0ead49Smrg      "$@" -Wc,-MD
3894b0ead49Smrg   else
3904b0ead49Smrg      tmpdepfile1=$dir$base.o.d
3914b0ead49Smrg      tmpdepfile2=$dir$base.d
3924b0ead49Smrg      tmpdepfile3=$dir$base.d
3934b0ead49Smrg      tmpdepfile4=$dir$base.d
3944b0ead49Smrg      "$@" -MD
3954b0ead49Smrg   fi
3964b0ead49Smrg
3974b0ead49Smrg   stat=$?
3984b0ead49Smrg   if test $stat -eq 0; then :
3994b0ead49Smrg   else
4004b0ead49Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
4014b0ead49Smrg      exit $stat
4024b0ead49Smrg   fi
4034b0ead49Smrg
4044b0ead49Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
4054b0ead49Smrg   do
4064b0ead49Smrg     test -f "$tmpdepfile" && break
4074b0ead49Smrg   done
4084b0ead49Smrg   if test -f "$tmpdepfile"; then
4094b0ead49Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
4104b0ead49Smrg      # That's a tab and a space in the [].
4114b0ead49Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
4124b0ead49Smrg   else
4134b0ead49Smrg      echo "#dummy" > "$depfile"
4144b0ead49Smrg   fi
4154b0ead49Smrg   rm -f "$tmpdepfile"
4164b0ead49Smrg   ;;
4174b0ead49Smrg
4184e7590efSmrgmsvc7)
4194e7590efSmrg  if test "$libtool" = yes; then
4204e7590efSmrg    showIncludes=-Wc,-showIncludes
4214e7590efSmrg  else
4224e7590efSmrg    showIncludes=-showIncludes
4234e7590efSmrg  fi
4244e7590efSmrg  "$@" $showIncludes > "$tmpdepfile"
4254e7590efSmrg  stat=$?
4264e7590efSmrg  grep -v '^Note: including file: ' "$tmpdepfile"
4274e7590efSmrg  if test "$stat" = 0; then :
4284e7590efSmrg  else
4294e7590efSmrg    rm -f "$tmpdepfile"
4304e7590efSmrg    exit $stat
4314e7590efSmrg  fi
4324e7590efSmrg  rm -f "$depfile"
4334e7590efSmrg  echo "$object : \\" > "$depfile"
4344e7590efSmrg  # The first sed program below extracts the file names and escapes
4354e7590efSmrg  # backslashes for cygpath.  The second sed program outputs the file
4364e7590efSmrg  # name when reading, but also accumulates all include files in the
4374e7590efSmrg  # hold buffer in order to output them again at the end.  This only
4384e7590efSmrg  # works with sed implementations that can handle large buffers.
4394e7590efSmrg  sed < "$tmpdepfile" -n '
4404e7590efSmrg/^Note: including file:  *\(.*\)/ {
4414e7590efSmrg  s//\1/
4424e7590efSmrg  s/\\/\\\\/g
4434e7590efSmrg  p
4444e7590efSmrg}' | $cygpath_u | sort -u | sed -n '
4454e7590efSmrgs/ /\\ /g
4464e7590efSmrgs/\(.*\)/	\1 \\/p
4474e7590efSmrgs/.\(.*\) \\/\1:/
4484e7590efSmrgH
4494e7590efSmrg$ {
4504e7590efSmrg  s/.*/	/
4514e7590efSmrg  G
4524e7590efSmrg  p
4534e7590efSmrg}' >> "$depfile"
4544e7590efSmrg  rm -f "$tmpdepfile"
4554e7590efSmrg  ;;
4564e7590efSmrg
4574e7590efSmrgmsvc7msys)
4584e7590efSmrg  # This case exists only to let depend.m4 do its work.  It works by
4594e7590efSmrg  # looking at the text of this script.  This case will never be run,
4604e7590efSmrg  # since it is checked for above.
4614e7590efSmrg  exit 1
4624e7590efSmrg  ;;
4634e7590efSmrg
4644b0ead49Smrg#nosideeffect)
4654b0ead49Smrg  # This comment above is used by automake to tell side-effect
4664b0ead49Smrg  # dependency tracking mechanisms from slower ones.
4674b0ead49Smrg
4684b0ead49Smrgdashmstdout)
4694b0ead49Smrg  # Important note: in order to support this mode, a compiler *must*
4704b0ead49Smrg  # always write the preprocessed file to stdout, regardless of -o.
4714b0ead49Smrg  "$@" || exit $?
4724b0ead49Smrg
4734b0ead49Smrg  # Remove the call to Libtool.
4744b0ead49Smrg  if test "$libtool" = yes; then
47552b01e16Smrg    while test "X$1" != 'X--mode=compile'; do
4764b0ead49Smrg      shift
4774b0ead49Smrg    done
4784b0ead49Smrg    shift
4794b0ead49Smrg  fi
4804b0ead49Smrg
4814b0ead49Smrg  # Remove `-o $object'.
4824b0ead49Smrg  IFS=" "
4834b0ead49Smrg  for arg
4844b0ead49Smrg  do
4854b0ead49Smrg    case $arg in
4864b0ead49Smrg    -o)
4874b0ead49Smrg      shift
4884b0ead49Smrg      ;;
4894b0ead49Smrg    $object)
4904b0ead49Smrg      shift
4914b0ead49Smrg      ;;
4924b0ead49Smrg    *)
4934b0ead49Smrg      set fnord "$@" "$arg"
4944b0ead49Smrg      shift # fnord
4954b0ead49Smrg      shift # $arg
4964b0ead49Smrg      ;;
4974b0ead49Smrg    esac
4984b0ead49Smrg  done
4994b0ead49Smrg
5004b0ead49Smrg  test -z "$dashmflag" && dashmflag=-M
5014b0ead49Smrg  # Require at least two characters before searching for `:'
5024b0ead49Smrg  # in the target name.  This is to cope with DOS-style filenames:
5034b0ead49Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
5044b0ead49Smrg  "$@" $dashmflag |
5054b0ead49Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
5064b0ead49Smrg  rm -f "$depfile"
5074b0ead49Smrg  cat < "$tmpdepfile" > "$depfile"
5084b0ead49Smrg  tr ' ' '
5094b0ead49Smrg' < "$tmpdepfile" | \
5104b0ead49Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
5114b0ead49Smrg## correctly.  Breaking it into two sed invocations is a workaround.
5124b0ead49Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
5134b0ead49Smrg  rm -f "$tmpdepfile"
5144b0ead49Smrg  ;;
5154b0ead49Smrg
5164b0ead49SmrgdashXmstdout)
5174b0ead49Smrg  # This case only exists to satisfy depend.m4.  It is never actually
5184b0ead49Smrg  # run, as this mode is specially recognized in the preamble.
5194b0ead49Smrg  exit 1
5204b0ead49Smrg  ;;
5214b0ead49Smrg
5224b0ead49Smrgmakedepend)
5234b0ead49Smrg  "$@" || exit $?
5244b0ead49Smrg  # Remove any Libtool call
5254b0ead49Smrg  if test "$libtool" = yes; then
52652b01e16Smrg    while test "X$1" != 'X--mode=compile'; do
5274b0ead49Smrg      shift
5284b0ead49Smrg    done
5294b0ead49Smrg    shift
5304b0ead49Smrg  fi
5314b0ead49Smrg  # X makedepend
5324b0ead49Smrg  shift
53352b01e16Smrg  cleared=no eat=no
53452b01e16Smrg  for arg
53552b01e16Smrg  do
5364b0ead49Smrg    case $cleared in
5374b0ead49Smrg    no)
5384b0ead49Smrg      set ""; shift
5394b0ead49Smrg      cleared=yes ;;
5404b0ead49Smrg    esac
54152b01e16Smrg    if test $eat = yes; then
54252b01e16Smrg      eat=no
54352b01e16Smrg      continue
54452b01e16Smrg    fi
5454b0ead49Smrg    case "$arg" in
5464b0ead49Smrg    -D*|-I*)
5474b0ead49Smrg      set fnord "$@" "$arg"; shift ;;
5484b0ead49Smrg    # Strip any option that makedepend may not understand.  Remove
5494b0ead49Smrg    # the object too, otherwise makedepend will parse it as a source file.
55052b01e16Smrg    -arch)
55152b01e16Smrg      eat=yes ;;
5524b0ead49Smrg    -*|$object)
5534b0ead49Smrg      ;;
5544b0ead49Smrg    *)
5554b0ead49Smrg      set fnord "$@" "$arg"; shift ;;
5564b0ead49Smrg    esac
5574b0ead49Smrg  done
55852b01e16Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
5594b0ead49Smrg  touch "$tmpdepfile"
5604b0ead49Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
5614b0ead49Smrg  rm -f "$depfile"
5624e7590efSmrg  # makedepend may prepend the VPATH from the source file name to the object.
5634e7590efSmrg  # No need to regex-escape $object, excess matching of '.' is harmless.
5644e7590efSmrg  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
5654b0ead49Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
5664b0ead49Smrg' | \
5674b0ead49Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
5684b0ead49Smrg## correctly.  Breaking it into two sed invocations is a workaround.
5694b0ead49Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
5704b0ead49Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
5714b0ead49Smrg  ;;
5724b0ead49Smrg
5734b0ead49Smrgcpp)
5744b0ead49Smrg  # Important note: in order to support this mode, a compiler *must*
5754b0ead49Smrg  # always write the preprocessed file to stdout.
5764b0ead49Smrg  "$@" || exit $?
5774b0ead49Smrg
5784b0ead49Smrg  # Remove the call to Libtool.
5794b0ead49Smrg  if test "$libtool" = yes; then
58052b01e16Smrg    while test "X$1" != 'X--mode=compile'; do
5814b0ead49Smrg      shift
5824b0ead49Smrg    done
5834b0ead49Smrg    shift
5844b0ead49Smrg  fi
5854b0ead49Smrg
5864b0ead49Smrg  # Remove `-o $object'.
5874b0ead49Smrg  IFS=" "
5884b0ead49Smrg  for arg
5894b0ead49Smrg  do
5904b0ead49Smrg    case $arg in
5914b0ead49Smrg    -o)
5924b0ead49Smrg      shift
5934b0ead49Smrg      ;;
5944b0ead49Smrg    $object)
5954b0ead49Smrg      shift
5964b0ead49Smrg      ;;
5974b0ead49Smrg    *)
5984b0ead49Smrg      set fnord "$@" "$arg"
5994b0ead49Smrg      shift # fnord
6004b0ead49Smrg      shift # $arg
6014b0ead49Smrg      ;;
6024b0ead49Smrg    esac
6034b0ead49Smrg  done
6044b0ead49Smrg
6054b0ead49Smrg  "$@" -E |
6064b0ead49Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
6074b0ead49Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
6084b0ead49Smrg    sed '$ s: \\$::' > "$tmpdepfile"
6094b0ead49Smrg  rm -f "$depfile"
6104b0ead49Smrg  echo "$object : \\" > "$depfile"
6114b0ead49Smrg  cat < "$tmpdepfile" >> "$depfile"
6124b0ead49Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
6134b0ead49Smrg  rm -f "$tmpdepfile"
6144b0ead49Smrg  ;;
6154b0ead49Smrg
6164b0ead49Smrgmsvisualcpp)
6174b0ead49Smrg  # Important note: in order to support this mode, a compiler *must*
61852b01e16Smrg  # always write the preprocessed file to stdout.
6194b0ead49Smrg  "$@" || exit $?
62052b01e16Smrg
62152b01e16Smrg  # Remove the call to Libtool.
62252b01e16Smrg  if test "$libtool" = yes; then
62352b01e16Smrg    while test "X$1" != 'X--mode=compile'; do
62452b01e16Smrg      shift
62552b01e16Smrg    done
62652b01e16Smrg    shift
62752b01e16Smrg  fi
62852b01e16Smrg
6294b0ead49Smrg  IFS=" "
6304b0ead49Smrg  for arg
6314b0ead49Smrg  do
6324b0ead49Smrg    case "$arg" in
63352b01e16Smrg    -o)
63452b01e16Smrg      shift
63552b01e16Smrg      ;;
63652b01e16Smrg    $object)
63752b01e16Smrg      shift
63852b01e16Smrg      ;;
6394b0ead49Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
6404b0ead49Smrg	set fnord "$@"
6414b0ead49Smrg	shift
6424b0ead49Smrg	shift
6434b0ead49Smrg	;;
6444b0ead49Smrg    *)
6454b0ead49Smrg	set fnord "$@" "$arg"
6464b0ead49Smrg	shift
6474b0ead49Smrg	shift
6484b0ead49Smrg	;;
6494b0ead49Smrg    esac
6504b0ead49Smrg  done
65152b01e16Smrg  "$@" -E 2>/dev/null |
65252b01e16Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
6534b0ead49Smrg  rm -f "$depfile"
6544b0ead49Smrg  echo "$object : \\" > "$depfile"
65552b01e16Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
6564b0ead49Smrg  echo "	" >> "$depfile"
65752b01e16Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
6584b0ead49Smrg  rm -f "$tmpdepfile"
6594b0ead49Smrg  ;;
6604b0ead49Smrg
66152b01e16Smrgmsvcmsys)
66252b01e16Smrg  # This case exists only to let depend.m4 do its work.  It works by
66352b01e16Smrg  # looking at the text of this script.  This case will never be run,
66452b01e16Smrg  # since it is checked for above.
66552b01e16Smrg  exit 1
66652b01e16Smrg  ;;
66752b01e16Smrg
6684b0ead49Smrgnone)
6694b0ead49Smrg  exec "$@"
6704b0ead49Smrg  ;;
6714b0ead49Smrg
6724b0ead49Smrg*)
6734b0ead49Smrg  echo "Unknown depmode $depmode" 1>&2
6744b0ead49Smrg  exit 1
6754b0ead49Smrg  ;;
6764b0ead49Smrgesac
6774b0ead49Smrg
6784b0ead49Smrgexit 0
6794b0ead49Smrg
6804b0ead49Smrg# Local Variables:
6814b0ead49Smrg# mode: shell-script
6824b0ead49Smrg# sh-indentation: 2
6834b0ead49Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
6844b0ead49Smrg# time-stamp-start: "scriptversion="
6854b0ead49Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
68652b01e16Smrg# time-stamp-time-zone: "UTC"
68752b01e16Smrg# time-stamp-end: "; # UTC"
6884b0ead49Smrg# End:
689