depcomp revision 90b17f1b
17e6fb56fSmrg#! /bin/sh
27e6fb56fSmrg# depcomp - compile a program generating dependencies as side-effects
37e6fb56fSmrg
490b17f1bSmrgscriptversion=2012-03-27.16; # UTC
57e6fb56fSmrg
690b17f1bSmrg# Copyright (C) 1999-2012 Free Software Foundation, Inc.
77e6fb56fSmrg
87e6fb56fSmrg# This program is free software; you can redistribute it and/or modify
97e6fb56fSmrg# it under the terms of the GNU General Public License as published by
107e6fb56fSmrg# the Free Software Foundation; either version 2, or (at your option)
117e6fb56fSmrg# any later version.
127e6fb56fSmrg
137e6fb56fSmrg# This program is distributed in the hope that it will be useful,
147e6fb56fSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
157e6fb56fSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
167e6fb56fSmrg# GNU General Public License for more details.
177e6fb56fSmrg
187e6fb56fSmrg# You should have received a copy of the GNU General Public License
197e6fb56fSmrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
207e6fb56fSmrg
217e6fb56fSmrg# As a special exception to the GNU General Public License, if you
227e6fb56fSmrg# distribute this file as part of a program that contains a
237e6fb56fSmrg# configuration script generated by Autoconf, you may include it under
247e6fb56fSmrg# the same distribution terms that you use for the rest of that program.
257e6fb56fSmrg
267e6fb56fSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
277e6fb56fSmrg
287e6fb56fSmrgcase $1 in
297e6fb56fSmrg  '')
3090b17f1bSmrg     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
317e6fb56fSmrg     exit 1;
327e6fb56fSmrg     ;;
337e6fb56fSmrg  -h | --h*)
347e6fb56fSmrg    cat <<\EOF
357e6fb56fSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
367e6fb56fSmrg
377e6fb56fSmrgRun PROGRAMS ARGS to compile a file, generating dependencies
387e6fb56fSmrgas side-effects.
397e6fb56fSmrg
407e6fb56fSmrgEnvironment variables:
417e6fb56fSmrg  depmode     Dependency tracking mode.
4290b17f1bSmrg  source      Source file read by 'PROGRAMS ARGS'.
4390b17f1bSmrg  object      Object file output by 'PROGRAMS ARGS'.
447e6fb56fSmrg  DEPDIR      directory where to store dependencies.
457e6fb56fSmrg  depfile     Dependency file to output.
4690b17f1bSmrg  tmpdepfile  Temporary file to use when outputting dependencies.
477e6fb56fSmrg  libtool     Whether libtool is used (yes/no).
487e6fb56fSmrg
497e6fb56fSmrgReport bugs to <bug-automake@gnu.org>.
507e6fb56fSmrgEOF
517e6fb56fSmrg    exit $?
527e6fb56fSmrg    ;;
537e6fb56fSmrg  -v | --v*)
547e6fb56fSmrg    echo "depcomp $scriptversion"
557e6fb56fSmrg    exit $?
567e6fb56fSmrg    ;;
577e6fb56fSmrgesac
587e6fb56fSmrg
5990b17f1bSmrg# A tabulation character.
6090b17f1bSmrgtab='	'
6190b17f1bSmrg# A newline character.
6290b17f1bSmrgnl='
6390b17f1bSmrg'
6490b17f1bSmrg
657e6fb56fSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
667e6fb56fSmrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
677e6fb56fSmrg  exit 1
687e6fb56fSmrgfi
697e6fb56fSmrg
707e6fb56fSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
717e6fb56fSmrgdepfile=${depfile-`echo "$object" |
727e6fb56fSmrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
737e6fb56fSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
747e6fb56fSmrg
757e6fb56fSmrgrm -f "$tmpdepfile"
767e6fb56fSmrg
777e6fb56fSmrg# Some modes work just like other modes, but use different flags.  We
787e6fb56fSmrg# parameterize here, but still list the modes in the big case below,
797e6fb56fSmrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
807e6fb56fSmrg# here, because this file can only contain one case statement.
817e6fb56fSmrgif test "$depmode" = hp; then
827e6fb56fSmrg  # HP compiler uses -M and no extra arg.
837e6fb56fSmrg  gccflag=-M
847e6fb56fSmrg  depmode=gcc
857e6fb56fSmrgfi
867e6fb56fSmrg
877e6fb56fSmrgif test "$depmode" = dashXmstdout; then
887e6fb56fSmrg   # This is just like dashmstdout with a different argument.
897e6fb56fSmrg   dashmflag=-xM
907e6fb56fSmrg   depmode=dashmstdout
917e6fb56fSmrgfi
927e6fb56fSmrg
937e6fb56fSmrgcygpath_u="cygpath -u -f -"
947e6fb56fSmrgif test "$depmode" = msvcmsys; then
957e6fb56fSmrg   # This is just like msvisualcpp but w/o cygpath translation.
967e6fb56fSmrg   # Just convert the backslash-escaped backslashes to single forward
977e6fb56fSmrg   # slashes to satisfy depend.m4
9890b17f1bSmrg   cygpath_u='sed s,\\\\,/,g'
997e6fb56fSmrg   depmode=msvisualcpp
1007e6fb56fSmrgfi
1017e6fb56fSmrg
10290b17f1bSmrgif test "$depmode" = msvc7msys; then
10390b17f1bSmrg   # This is just like msvc7 but w/o cygpath translation.
10490b17f1bSmrg   # Just convert the backslash-escaped backslashes to single forward
10590b17f1bSmrg   # slashes to satisfy depend.m4
10690b17f1bSmrg   cygpath_u='sed s,\\\\,/,g'
10790b17f1bSmrg   depmode=msvc7
10890b17f1bSmrgfi
10990b17f1bSmrg
11090b17f1bSmrgif test "$depmode" = xlc; then
11190b17f1bSmrg   # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations.
11290b17f1bSmrg   gccflag=-qmakedep=gcc,-MF
11390b17f1bSmrg   depmode=gcc
11490b17f1bSmrgfi
11590b17f1bSmrg
1167e6fb56fSmrgcase "$depmode" in
1177e6fb56fSmrggcc3)
1187e6fb56fSmrg## gcc 3 implements dependency tracking that does exactly what
1197e6fb56fSmrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
1207e6fb56fSmrg## it if -MD -MP comes after the -MF stuff.  Hmm.
1217e6fb56fSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
1227e6fb56fSmrg## the command line argument order; so add the flags where they
1237e6fb56fSmrg## appear in depend2.am.  Note that the slowdown incurred here
1247e6fb56fSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
1257e6fb56fSmrg  for arg
1267e6fb56fSmrg  do
1277e6fb56fSmrg    case $arg in
1287e6fb56fSmrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
1297e6fb56fSmrg    *)  set fnord "$@" "$arg" ;;
1307e6fb56fSmrg    esac
1317e6fb56fSmrg    shift # fnord
1327e6fb56fSmrg    shift # $arg
1337e6fb56fSmrg  done
1347e6fb56fSmrg  "$@"
1357e6fb56fSmrg  stat=$?
1367e6fb56fSmrg  if test $stat -eq 0; then :
1377e6fb56fSmrg  else
1387e6fb56fSmrg    rm -f "$tmpdepfile"
1397e6fb56fSmrg    exit $stat
1407e6fb56fSmrg  fi
1417e6fb56fSmrg  mv "$tmpdepfile" "$depfile"
1427e6fb56fSmrg  ;;
1437e6fb56fSmrg
1447e6fb56fSmrggcc)
1457e6fb56fSmrg## There are various ways to get dependency output from gcc.  Here's
1467e6fb56fSmrg## why we pick this rather obscure method:
1477e6fb56fSmrg## - Don't want to use -MD because we'd like the dependencies to end
1487e6fb56fSmrg##   up in a subdir.  Having to rename by hand is ugly.
1497e6fb56fSmrg##   (We might end up doing this anyway to support other compilers.)
1507e6fb56fSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
1517e6fb56fSmrg##   -MM, not -M (despite what the docs say).
1527e6fb56fSmrg## - Using -M directly means running the compiler twice (even worse
1537e6fb56fSmrg##   than renaming).
1547e6fb56fSmrg  if test -z "$gccflag"; then
1557e6fb56fSmrg    gccflag=-MD,
1567e6fb56fSmrg  fi
1577e6fb56fSmrg  "$@" -Wp,"$gccflag$tmpdepfile"
1587e6fb56fSmrg  stat=$?
1597e6fb56fSmrg  if test $stat -eq 0; then :
1607e6fb56fSmrg  else
1617e6fb56fSmrg    rm -f "$tmpdepfile"
1627e6fb56fSmrg    exit $stat
1637e6fb56fSmrg  fi
1647e6fb56fSmrg  rm -f "$depfile"
1657e6fb56fSmrg  echo "$object : \\" > "$depfile"
1667e6fb56fSmrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
1677e6fb56fSmrg## The second -e expression handles DOS-style file names with drive letters.
1687e6fb56fSmrg  sed -e 's/^[^:]*: / /' \
1697e6fb56fSmrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
17090b17f1bSmrg## This next piece of magic avoids the "deleted header file" problem.
1717e6fb56fSmrg## The problem is that when a header file which appears in a .P file
1727e6fb56fSmrg## is deleted, the dependency causes make to die (because there is
1737e6fb56fSmrg## typically no way to rebuild the header).  We avoid this by adding
1747e6fb56fSmrg## dummy dependencies for each header file.  Too bad gcc doesn't do
1757e6fb56fSmrg## this for us directly.
17690b17f1bSmrg  tr ' ' "$nl" < "$tmpdepfile" |
17790b17f1bSmrg## Some versions of gcc put a space before the ':'.  On the theory
1787e6fb56fSmrg## that the space means something, we add a space to the output as
17990b17f1bSmrg## well.  hp depmode also adds that space, but also prefixes the VPATH
18090b17f1bSmrg## to the object.  Take care to not repeat it in the output.
1817e6fb56fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
1827e6fb56fSmrg## correctly.  Breaking it into two sed invocations is a workaround.
18390b17f1bSmrg    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
18490b17f1bSmrg      | sed -e 's/$/ :/' >> "$depfile"
1857e6fb56fSmrg  rm -f "$tmpdepfile"
1867e6fb56fSmrg  ;;
1877e6fb56fSmrg
1887e6fb56fSmrghp)
1897e6fb56fSmrg  # This case exists only to let depend.m4 do its work.  It works by
1907e6fb56fSmrg  # looking at the text of this script.  This case will never be run,
1917e6fb56fSmrg  # since it is checked for above.
1927e6fb56fSmrg  exit 1
1937e6fb56fSmrg  ;;
1947e6fb56fSmrg
1957e6fb56fSmrgsgi)
1967e6fb56fSmrg  if test "$libtool" = yes; then
1977e6fb56fSmrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
1987e6fb56fSmrg  else
1997e6fb56fSmrg    "$@" -MDupdate "$tmpdepfile"
2007e6fb56fSmrg  fi
2017e6fb56fSmrg  stat=$?
2027e6fb56fSmrg  if test $stat -eq 0; then :
2037e6fb56fSmrg  else
2047e6fb56fSmrg    rm -f "$tmpdepfile"
2057e6fb56fSmrg    exit $stat
2067e6fb56fSmrg  fi
2077e6fb56fSmrg  rm -f "$depfile"
2087e6fb56fSmrg
2097e6fb56fSmrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
2107e6fb56fSmrg    echo "$object : \\" > "$depfile"
2117e6fb56fSmrg
2127e6fb56fSmrg    # Clip off the initial element (the dependent).  Don't try to be
2137e6fb56fSmrg    # clever and replace this with sed code, as IRIX sed won't handle
2147e6fb56fSmrg    # lines with more than a fixed number of characters (4096 in
2157e6fb56fSmrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
21690b17f1bSmrg    # the IRIX cc adds comments like '#:fec' to the end of the
2177e6fb56fSmrg    # dependency line.
21890b17f1bSmrg    tr ' ' "$nl" < "$tmpdepfile" \
2197e6fb56fSmrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
22090b17f1bSmrg    tr "$nl" ' ' >> "$depfile"
2217e6fb56fSmrg    echo >> "$depfile"
2227e6fb56fSmrg
2237e6fb56fSmrg    # The second pass generates a dummy entry for each header file.
22490b17f1bSmrg    tr ' ' "$nl" < "$tmpdepfile" \
2257e6fb56fSmrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
2267e6fb56fSmrg   >> "$depfile"
2277e6fb56fSmrg  else
2287e6fb56fSmrg    # The sourcefile does not contain any dependencies, so just
2297e6fb56fSmrg    # store a dummy comment line, to avoid errors with the Makefile
2307e6fb56fSmrg    # "include basename.Plo" scheme.
2317e6fb56fSmrg    echo "#dummy" > "$depfile"
2327e6fb56fSmrg  fi
2337e6fb56fSmrg  rm -f "$tmpdepfile"
2347e6fb56fSmrg  ;;
2357e6fb56fSmrg
23690b17f1bSmrgxlc)
23790b17f1bSmrg  # This case exists only to let depend.m4 do its work.  It works by
23890b17f1bSmrg  # looking at the text of this script.  This case will never be run,
23990b17f1bSmrg  # since it is checked for above.
24090b17f1bSmrg  exit 1
24190b17f1bSmrg  ;;
24290b17f1bSmrg
2437e6fb56fSmrgaix)
2447e6fb56fSmrg  # The C for AIX Compiler uses -M and outputs the dependencies
2457e6fb56fSmrg  # in a .u file.  In older versions, this file always lives in the
24690b17f1bSmrg  # current directory.  Also, the AIX compiler puts '$object:' at the
2477e6fb56fSmrg  # start of each line; $object doesn't have directory information.
2487e6fb56fSmrg  # Version 6 uses the directory in both cases.
2497e6fb56fSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
2507e6fb56fSmrg  test "x$dir" = "x$object" && dir=
2517e6fb56fSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
2527e6fb56fSmrg  if test "$libtool" = yes; then
2537e6fb56fSmrg    tmpdepfile1=$dir$base.u
2547e6fb56fSmrg    tmpdepfile2=$base.u
2557e6fb56fSmrg    tmpdepfile3=$dir.libs/$base.u
2567e6fb56fSmrg    "$@" -Wc,-M
2577e6fb56fSmrg  else
2587e6fb56fSmrg    tmpdepfile1=$dir$base.u
2597e6fb56fSmrg    tmpdepfile2=$dir$base.u
2607e6fb56fSmrg    tmpdepfile3=$dir$base.u
2617e6fb56fSmrg    "$@" -M
2627e6fb56fSmrg  fi
2637e6fb56fSmrg  stat=$?
2647e6fb56fSmrg
2657e6fb56fSmrg  if test $stat -eq 0; then :
2667e6fb56fSmrg  else
2677e6fb56fSmrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2687e6fb56fSmrg    exit $stat
2697e6fb56fSmrg  fi
2707e6fb56fSmrg
2717e6fb56fSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2727e6fb56fSmrg  do
2737e6fb56fSmrg    test -f "$tmpdepfile" && break
2747e6fb56fSmrg  done
2757e6fb56fSmrg  if test -f "$tmpdepfile"; then
27690b17f1bSmrg    # Each line is of the form 'foo.o: dependent.h'.
2777e6fb56fSmrg    # Do two passes, one to just change these to
27890b17f1bSmrg    # '$object: dependent.h' and one to simply 'dependent.h:'.
2797e6fb56fSmrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
28090b17f1bSmrg    sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
2817e6fb56fSmrg  else
2827e6fb56fSmrg    # The sourcefile does not contain any dependencies, so just
2837e6fb56fSmrg    # store a dummy comment line, to avoid errors with the Makefile
2847e6fb56fSmrg    # "include basename.Plo" scheme.
2857e6fb56fSmrg    echo "#dummy" > "$depfile"
2867e6fb56fSmrg  fi
2877e6fb56fSmrg  rm -f "$tmpdepfile"
2887e6fb56fSmrg  ;;
2897e6fb56fSmrg
2907e6fb56fSmrgicc)
29190b17f1bSmrg  # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'.
29290b17f1bSmrg  # However on
29390b17f1bSmrg  #    $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c
2947e6fb56fSmrg  # ICC 7.0 will fill foo.d with something like
2957e6fb56fSmrg  #    foo.o: sub/foo.c
2967e6fb56fSmrg  #    foo.o: sub/foo.h
29790b17f1bSmrg  # which is wrong.  We want
2987e6fb56fSmrg  #    sub/foo.o: sub/foo.c
2997e6fb56fSmrg  #    sub/foo.o: sub/foo.h
3007e6fb56fSmrg  #    sub/foo.c:
3017e6fb56fSmrg  #    sub/foo.h:
3027e6fb56fSmrg  # ICC 7.1 will output
3037e6fb56fSmrg  #    foo.o: sub/foo.c sub/foo.h
30490b17f1bSmrg  # and will wrap long lines using '\':
3057e6fb56fSmrg  #    foo.o: sub/foo.c ... \
3067e6fb56fSmrg  #     sub/foo.h ... \
3077e6fb56fSmrg  #     ...
30890b17f1bSmrg  # tcc 0.9.26 (FIXME still under development at the moment of writing)
30990b17f1bSmrg  # will emit a similar output, but also prepend the continuation lines
31090b17f1bSmrg  # with horizontal tabulation characters.
3117e6fb56fSmrg  "$@" -MD -MF "$tmpdepfile"
3127e6fb56fSmrg  stat=$?
3137e6fb56fSmrg  if test $stat -eq 0; then :
3147e6fb56fSmrg  else
3157e6fb56fSmrg    rm -f "$tmpdepfile"
3167e6fb56fSmrg    exit $stat
3177e6fb56fSmrg  fi
3187e6fb56fSmrg  rm -f "$depfile"
31990b17f1bSmrg  # Each line is of the form 'foo.o: dependent.h',
32090b17f1bSmrg  # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'.
3217e6fb56fSmrg  # Do two passes, one to just change these to
32290b17f1bSmrg  # '$object: dependent.h' and one to simply 'dependent.h:'.
32390b17f1bSmrg  sed -e "s/^[ $tab][ $tab]*/  /" -e "s,^[^:]*:,$object :," \
32490b17f1bSmrg    < "$tmpdepfile" > "$depfile"
32590b17f1bSmrg  sed '
32690b17f1bSmrg    s/[ '"$tab"'][ '"$tab"']*/ /g
32790b17f1bSmrg    s/^ *//
32890b17f1bSmrg    s/ *\\*$//
32990b17f1bSmrg    s/^[^:]*: *//
33090b17f1bSmrg    /^$/d
33190b17f1bSmrg    /:$/d
33290b17f1bSmrg    s/$/ :/
33390b17f1bSmrg  ' < "$tmpdepfile" >> "$depfile"
3347e6fb56fSmrg  rm -f "$tmpdepfile"
3357e6fb56fSmrg  ;;
3367e6fb56fSmrg
3377e6fb56fSmrghp2)
3387e6fb56fSmrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
3397e6fb56fSmrg  # compilers, which have integrated preprocessors.  The correct option
3407e6fb56fSmrg  # to use with these is +Maked; it writes dependencies to a file named
3417e6fb56fSmrg  # 'foo.d', which lands next to the object file, wherever that
3427e6fb56fSmrg  # happens to be.
3437e6fb56fSmrg  # Much of this is similar to the tru64 case; see comments there.
3447e6fb56fSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3457e6fb56fSmrg  test "x$dir" = "x$object" && dir=
3467e6fb56fSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3477e6fb56fSmrg  if test "$libtool" = yes; then
3487e6fb56fSmrg    tmpdepfile1=$dir$base.d
3497e6fb56fSmrg    tmpdepfile2=$dir.libs/$base.d
3507e6fb56fSmrg    "$@" -Wc,+Maked
3517e6fb56fSmrg  else
3527e6fb56fSmrg    tmpdepfile1=$dir$base.d
3537e6fb56fSmrg    tmpdepfile2=$dir$base.d
3547e6fb56fSmrg    "$@" +Maked
3557e6fb56fSmrg  fi
3567e6fb56fSmrg  stat=$?
3577e6fb56fSmrg  if test $stat -eq 0; then :
3587e6fb56fSmrg  else
3597e6fb56fSmrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
3607e6fb56fSmrg     exit $stat
3617e6fb56fSmrg  fi
3627e6fb56fSmrg
3637e6fb56fSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
3647e6fb56fSmrg  do
3657e6fb56fSmrg    test -f "$tmpdepfile" && break
3667e6fb56fSmrg  done
3677e6fb56fSmrg  if test -f "$tmpdepfile"; then
3687e6fb56fSmrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
36990b17f1bSmrg    # Add 'dependent.h:' lines.
3707e6fb56fSmrg    sed -ne '2,${
3717e6fb56fSmrg	       s/^ *//
3727e6fb56fSmrg	       s/ \\*$//
3737e6fb56fSmrg	       s/$/:/
3747e6fb56fSmrg	       p
3757e6fb56fSmrg	     }' "$tmpdepfile" >> "$depfile"
3767e6fb56fSmrg  else
3777e6fb56fSmrg    echo "#dummy" > "$depfile"
3787e6fb56fSmrg  fi
3797e6fb56fSmrg  rm -f "$tmpdepfile" "$tmpdepfile2"
3807e6fb56fSmrg  ;;
3817e6fb56fSmrg
3827e6fb56fSmrgtru64)
3837e6fb56fSmrg   # The Tru64 compiler uses -MD to generate dependencies as a side
38490b17f1bSmrg   # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
3857e6fb56fSmrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
38690b17f1bSmrg   # dependencies in 'foo.d' instead, so we check for that too.
3877e6fb56fSmrg   # Subdirectories are respected.
3887e6fb56fSmrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3897e6fb56fSmrg   test "x$dir" = "x$object" && dir=
3907e6fb56fSmrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3917e6fb56fSmrg
3927e6fb56fSmrg   if test "$libtool" = yes; then
3937e6fb56fSmrg      # With Tru64 cc, shared objects can also be used to make a
3947e6fb56fSmrg      # static library.  This mechanism is used in libtool 1.4 series to
3957e6fb56fSmrg      # handle both shared and static libraries in a single compilation.
3967e6fb56fSmrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
3977e6fb56fSmrg      #
3987e6fb56fSmrg      # With libtool 1.5 this exception was removed, and libtool now
3997e6fb56fSmrg      # generates 2 separate objects for the 2 libraries.  These two
4007e6fb56fSmrg      # compilations output dependencies in $dir.libs/$base.o.d and
4017e6fb56fSmrg      # in $dir$base.o.d.  We have to check for both files, because
4027e6fb56fSmrg      # one of the two compilations can be disabled.  We should prefer
4037e6fb56fSmrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
4047e6fb56fSmrg      # automatically cleaned when .libs/ is deleted, while ignoring
4057e6fb56fSmrg      # the former would cause a distcleancheck panic.
4067e6fb56fSmrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
4077e6fb56fSmrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
4087e6fb56fSmrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
4097e6fb56fSmrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
4107e6fb56fSmrg      "$@" -Wc,-MD
4117e6fb56fSmrg   else
4127e6fb56fSmrg      tmpdepfile1=$dir$base.o.d
4137e6fb56fSmrg      tmpdepfile2=$dir$base.d
4147e6fb56fSmrg      tmpdepfile3=$dir$base.d
4157e6fb56fSmrg      tmpdepfile4=$dir$base.d
4167e6fb56fSmrg      "$@" -MD
4177e6fb56fSmrg   fi
4187e6fb56fSmrg
4197e6fb56fSmrg   stat=$?
4207e6fb56fSmrg   if test $stat -eq 0; then :
4217e6fb56fSmrg   else
4227e6fb56fSmrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
4237e6fb56fSmrg      exit $stat
4247e6fb56fSmrg   fi
4257e6fb56fSmrg
4267e6fb56fSmrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
4277e6fb56fSmrg   do
4287e6fb56fSmrg     test -f "$tmpdepfile" && break
4297e6fb56fSmrg   done
4307e6fb56fSmrg   if test -f "$tmpdepfile"; then
4317e6fb56fSmrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
43290b17f1bSmrg      sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
4337e6fb56fSmrg   else
4347e6fb56fSmrg      echo "#dummy" > "$depfile"
4357e6fb56fSmrg   fi
4367e6fb56fSmrg   rm -f "$tmpdepfile"
4377e6fb56fSmrg   ;;
4387e6fb56fSmrg
43990b17f1bSmrgmsvc7)
44090b17f1bSmrg  if test "$libtool" = yes; then
44190b17f1bSmrg    showIncludes=-Wc,-showIncludes
44290b17f1bSmrg  else
44390b17f1bSmrg    showIncludes=-showIncludes
44490b17f1bSmrg  fi
44590b17f1bSmrg  "$@" $showIncludes > "$tmpdepfile"
44690b17f1bSmrg  stat=$?
44790b17f1bSmrg  grep -v '^Note: including file: ' "$tmpdepfile"
44890b17f1bSmrg  if test "$stat" = 0; then :
44990b17f1bSmrg  else
45090b17f1bSmrg    rm -f "$tmpdepfile"
45190b17f1bSmrg    exit $stat
45290b17f1bSmrg  fi
45390b17f1bSmrg  rm -f "$depfile"
45490b17f1bSmrg  echo "$object : \\" > "$depfile"
45590b17f1bSmrg  # The first sed program below extracts the file names and escapes
45690b17f1bSmrg  # backslashes for cygpath.  The second sed program outputs the file
45790b17f1bSmrg  # name when reading, but also accumulates all include files in the
45890b17f1bSmrg  # hold buffer in order to output them again at the end.  This only
45990b17f1bSmrg  # works with sed implementations that can handle large buffers.
46090b17f1bSmrg  sed < "$tmpdepfile" -n '
46190b17f1bSmrg/^Note: including file:  *\(.*\)/ {
46290b17f1bSmrg  s//\1/
46390b17f1bSmrg  s/\\/\\\\/g
46490b17f1bSmrg  p
46590b17f1bSmrg}' | $cygpath_u | sort -u | sed -n '
46690b17f1bSmrgs/ /\\ /g
46790b17f1bSmrgs/\(.*\)/'"$tab"'\1 \\/p
46890b17f1bSmrgs/.\(.*\) \\/\1:/
46990b17f1bSmrgH
47090b17f1bSmrg$ {
47190b17f1bSmrg  s/.*/'"$tab"'/
47290b17f1bSmrg  G
47390b17f1bSmrg  p
47490b17f1bSmrg}' >> "$depfile"
47590b17f1bSmrg  rm -f "$tmpdepfile"
47690b17f1bSmrg  ;;
47790b17f1bSmrg
47890b17f1bSmrgmsvc7msys)
47990b17f1bSmrg  # This case exists only to let depend.m4 do its work.  It works by
48090b17f1bSmrg  # looking at the text of this script.  This case will never be run,
48190b17f1bSmrg  # since it is checked for above.
48290b17f1bSmrg  exit 1
48390b17f1bSmrg  ;;
48490b17f1bSmrg
4857e6fb56fSmrg#nosideeffect)
4867e6fb56fSmrg  # This comment above is used by automake to tell side-effect
4877e6fb56fSmrg  # dependency tracking mechanisms from slower ones.
4887e6fb56fSmrg
4897e6fb56fSmrgdashmstdout)
4907e6fb56fSmrg  # Important note: in order to support this mode, a compiler *must*
4917e6fb56fSmrg  # always write the preprocessed file to stdout, regardless of -o.
4927e6fb56fSmrg  "$@" || exit $?
4937e6fb56fSmrg
4947e6fb56fSmrg  # Remove the call to Libtool.
4957e6fb56fSmrg  if test "$libtool" = yes; then
4967e6fb56fSmrg    while test "X$1" != 'X--mode=compile'; do
4977e6fb56fSmrg      shift
4987e6fb56fSmrg    done
4997e6fb56fSmrg    shift
5007e6fb56fSmrg  fi
5017e6fb56fSmrg
50290b17f1bSmrg  # Remove '-o $object'.
5037e6fb56fSmrg  IFS=" "
5047e6fb56fSmrg  for arg
5057e6fb56fSmrg  do
5067e6fb56fSmrg    case $arg in
5077e6fb56fSmrg    -o)
5087e6fb56fSmrg      shift
5097e6fb56fSmrg      ;;
5107e6fb56fSmrg    $object)
5117e6fb56fSmrg      shift
5127e6fb56fSmrg      ;;
5137e6fb56fSmrg    *)
5147e6fb56fSmrg      set fnord "$@" "$arg"
5157e6fb56fSmrg      shift # fnord
5167e6fb56fSmrg      shift # $arg
5177e6fb56fSmrg      ;;
5187e6fb56fSmrg    esac
5197e6fb56fSmrg  done
5207e6fb56fSmrg
5217e6fb56fSmrg  test -z "$dashmflag" && dashmflag=-M
52290b17f1bSmrg  # Require at least two characters before searching for ':'
5237e6fb56fSmrg  # in the target name.  This is to cope with DOS-style filenames:
52490b17f1bSmrg  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
5257e6fb56fSmrg  "$@" $dashmflag |
52690b17f1bSmrg    sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile"
5277e6fb56fSmrg  rm -f "$depfile"
5287e6fb56fSmrg  cat < "$tmpdepfile" > "$depfile"
52990b17f1bSmrg  tr ' ' "$nl" < "$tmpdepfile" | \
5307e6fb56fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
5317e6fb56fSmrg## correctly.  Breaking it into two sed invocations is a workaround.
5327e6fb56fSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
5337e6fb56fSmrg  rm -f "$tmpdepfile"
5347e6fb56fSmrg  ;;
5357e6fb56fSmrg
5367e6fb56fSmrgdashXmstdout)
5377e6fb56fSmrg  # This case only exists to satisfy depend.m4.  It is never actually
5387e6fb56fSmrg  # run, as this mode is specially recognized in the preamble.
5397e6fb56fSmrg  exit 1
5407e6fb56fSmrg  ;;
5417e6fb56fSmrg
5427e6fb56fSmrgmakedepend)
5437e6fb56fSmrg  "$@" || exit $?
5447e6fb56fSmrg  # Remove any Libtool call
5457e6fb56fSmrg  if test "$libtool" = yes; then
5467e6fb56fSmrg    while test "X$1" != 'X--mode=compile'; do
5477e6fb56fSmrg      shift
5487e6fb56fSmrg    done
5497e6fb56fSmrg    shift
5507e6fb56fSmrg  fi
5517e6fb56fSmrg  # X makedepend
5527e6fb56fSmrg  shift
5537e6fb56fSmrg  cleared=no eat=no
5547e6fb56fSmrg  for arg
5557e6fb56fSmrg  do
5567e6fb56fSmrg    case $cleared in
5577e6fb56fSmrg    no)
5587e6fb56fSmrg      set ""; shift
5597e6fb56fSmrg      cleared=yes ;;
5607e6fb56fSmrg    esac
5617e6fb56fSmrg    if test $eat = yes; then
5627e6fb56fSmrg      eat=no
5637e6fb56fSmrg      continue
5647e6fb56fSmrg    fi
5657e6fb56fSmrg    case "$arg" in
5667e6fb56fSmrg    -D*|-I*)
5677e6fb56fSmrg      set fnord "$@" "$arg"; shift ;;
5687e6fb56fSmrg    # Strip any option that makedepend may not understand.  Remove
5697e6fb56fSmrg    # the object too, otherwise makedepend will parse it as a source file.
5707e6fb56fSmrg    -arch)
5717e6fb56fSmrg      eat=yes ;;
5727e6fb56fSmrg    -*|$object)
5737e6fb56fSmrg      ;;
5747e6fb56fSmrg    *)
5757e6fb56fSmrg      set fnord "$@" "$arg"; shift ;;
5767e6fb56fSmrg    esac
5777e6fb56fSmrg  done
5787e6fb56fSmrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
5797e6fb56fSmrg  touch "$tmpdepfile"
5807e6fb56fSmrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
5817e6fb56fSmrg  rm -f "$depfile"
58290b17f1bSmrg  # makedepend may prepend the VPATH from the source file name to the object.
58390b17f1bSmrg  # No need to regex-escape $object, excess matching of '.' is harmless.
58490b17f1bSmrg  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
58590b17f1bSmrg  sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \
5867e6fb56fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
5877e6fb56fSmrg## correctly.  Breaking it into two sed invocations is a workaround.
5887e6fb56fSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
5897e6fb56fSmrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
5907e6fb56fSmrg  ;;
5917e6fb56fSmrg
5927e6fb56fSmrgcpp)
5937e6fb56fSmrg  # Important note: in order to support this mode, a compiler *must*
5947e6fb56fSmrg  # always write the preprocessed file to stdout.
5957e6fb56fSmrg  "$@" || exit $?
5967e6fb56fSmrg
5977e6fb56fSmrg  # Remove the call to Libtool.
5987e6fb56fSmrg  if test "$libtool" = yes; then
5997e6fb56fSmrg    while test "X$1" != 'X--mode=compile'; do
6007e6fb56fSmrg      shift
6017e6fb56fSmrg    done
6027e6fb56fSmrg    shift
6037e6fb56fSmrg  fi
6047e6fb56fSmrg
60590b17f1bSmrg  # Remove '-o $object'.
6067e6fb56fSmrg  IFS=" "
6077e6fb56fSmrg  for arg
6087e6fb56fSmrg  do
6097e6fb56fSmrg    case $arg in
6107e6fb56fSmrg    -o)
6117e6fb56fSmrg      shift
6127e6fb56fSmrg      ;;
6137e6fb56fSmrg    $object)
6147e6fb56fSmrg      shift
6157e6fb56fSmrg      ;;
6167e6fb56fSmrg    *)
6177e6fb56fSmrg      set fnord "$@" "$arg"
6187e6fb56fSmrg      shift # fnord
6197e6fb56fSmrg      shift # $arg
6207e6fb56fSmrg      ;;
6217e6fb56fSmrg    esac
6227e6fb56fSmrg  done
6237e6fb56fSmrg
6247e6fb56fSmrg  "$@" -E |
6257e6fb56fSmrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
6267e6fb56fSmrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
6277e6fb56fSmrg    sed '$ s: \\$::' > "$tmpdepfile"
6287e6fb56fSmrg  rm -f "$depfile"
6297e6fb56fSmrg  echo "$object : \\" > "$depfile"
6307e6fb56fSmrg  cat < "$tmpdepfile" >> "$depfile"
6317e6fb56fSmrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
6327e6fb56fSmrg  rm -f "$tmpdepfile"
6337e6fb56fSmrg  ;;
6347e6fb56fSmrg
6357e6fb56fSmrgmsvisualcpp)
6367e6fb56fSmrg  # Important note: in order to support this mode, a compiler *must*
6377e6fb56fSmrg  # always write the preprocessed file to stdout.
6387e6fb56fSmrg  "$@" || exit $?
6397e6fb56fSmrg
6407e6fb56fSmrg  # Remove the call to Libtool.
6417e6fb56fSmrg  if test "$libtool" = yes; then
6427e6fb56fSmrg    while test "X$1" != 'X--mode=compile'; do
6437e6fb56fSmrg      shift
6447e6fb56fSmrg    done
6457e6fb56fSmrg    shift
6467e6fb56fSmrg  fi
6477e6fb56fSmrg
6487e6fb56fSmrg  IFS=" "
6497e6fb56fSmrg  for arg
6507e6fb56fSmrg  do
6517e6fb56fSmrg    case "$arg" in
6527e6fb56fSmrg    -o)
6537e6fb56fSmrg      shift
6547e6fb56fSmrg      ;;
6557e6fb56fSmrg    $object)
6567e6fb56fSmrg      shift
6577e6fb56fSmrg      ;;
6587e6fb56fSmrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
6597e6fb56fSmrg	set fnord "$@"
6607e6fb56fSmrg	shift
6617e6fb56fSmrg	shift
6627e6fb56fSmrg	;;
6637e6fb56fSmrg    *)
6647e6fb56fSmrg	set fnord "$@" "$arg"
6657e6fb56fSmrg	shift
6667e6fb56fSmrg	shift
6677e6fb56fSmrg	;;
6687e6fb56fSmrg    esac
6697e6fb56fSmrg  done
6707e6fb56fSmrg  "$@" -E 2>/dev/null |
6717e6fb56fSmrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
6727e6fb56fSmrg  rm -f "$depfile"
6737e6fb56fSmrg  echo "$object : \\" > "$depfile"
67490b17f1bSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
67590b17f1bSmrg  echo "$tab" >> "$depfile"
6767e6fb56fSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
6777e6fb56fSmrg  rm -f "$tmpdepfile"
6787e6fb56fSmrg  ;;
6797e6fb56fSmrg
6807e6fb56fSmrgmsvcmsys)
6817e6fb56fSmrg  # This case exists only to let depend.m4 do its work.  It works by
6827e6fb56fSmrg  # looking at the text of this script.  This case will never be run,
6837e6fb56fSmrg  # since it is checked for above.
6847e6fb56fSmrg  exit 1
6857e6fb56fSmrg  ;;
6867e6fb56fSmrg
6877e6fb56fSmrgnone)
6887e6fb56fSmrg  exec "$@"
6897e6fb56fSmrg  ;;
6907e6fb56fSmrg
6917e6fb56fSmrg*)
6927e6fb56fSmrg  echo "Unknown depmode $depmode" 1>&2
6937e6fb56fSmrg  exit 1
6947e6fb56fSmrg  ;;
6957e6fb56fSmrgesac
6967e6fb56fSmrg
6977e6fb56fSmrgexit 0
6987e6fb56fSmrg
6997e6fb56fSmrg# Local Variables:
7007e6fb56fSmrg# mode: shell-script
7017e6fb56fSmrg# sh-indentation: 2
7027e6fb56fSmrg# eval: (add-hook 'write-file-hooks 'time-stamp)
7037e6fb56fSmrg# time-stamp-start: "scriptversion="
7047e6fb56fSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
7057e6fb56fSmrg# time-stamp-time-zone: "UTC"
7067e6fb56fSmrg# time-stamp-end: "; # UTC"
7077e6fb56fSmrg# End:
708