13aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#! /bin/sh
23aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# depcomp - compile a program generating dependencies as side-effects
33aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
43aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevscriptversion=2009-04-28.21; # UTC
53aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
63aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
73aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Software Foundation, Inc.
83aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
93aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# This program is free software; you can redistribute it and/or modify
103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# it under the terms of the GNU General Public License as published by
113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# the Free Software Foundation; either version 2, or (at your option)
123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# any later version.
133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# This program is distributed in the hope that it will be useful,
153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# but WITHOUT ANY WARRANTY; without even the implied warranty of
163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# GNU General Public License for more details.
183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# You should have received a copy of the GNU General Public License
203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# along with this program.  If not, see <http://www.gnu.org/licenses/>.
213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# As a special exception to the GNU General Public License, if you
233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# distribute this file as part of a program that contains a
243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# configuration script generated by Autoconf, you may include it under
253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# the same distribution terms that you use for the rest of that program.
263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevcase $1 in
303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  '')
313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev     exit 1;
333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev     ;;
343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  -h | --h*)
353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    cat <<\EOF
363aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevUsage: depcomp [--help] [--version] PROGRAM [ARGS]
373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
383aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevRun PROGRAMS ARGS to compile a file, generating dependencies
393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevas side-effects.
403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
413aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevEnvironment variables:
423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  depmode     Dependency tracking mode.
433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  source      Source file read by `PROGRAMS ARGS'.
443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  object      Object file output by `PROGRAMS ARGS'.
453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  DEPDIR      directory where to store dependencies.
463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  depfile     Dependency file to output.
473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  tmpdepfile  Temporary file to use when outputing dependencies.
483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  libtool     Whether libtool is used (yes/no).
493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
503aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevReport bugs to <bug-automake@gnu.org>.
513aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevEOF
523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    exit $?
533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    ;;
543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  -v | --v*)
553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    echo "depcomp $scriptversion"
563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    exit $?
573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    ;;
583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevesac
593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevif test -z "$depmode" || test -z "$source" || test -z "$object"; then
613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  echo "depcomp: Variables source, object and depmode must be set" 1>&2
623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  exit 1
633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfi
643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevdepfile=${depfile-`echo "$object" |
673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevrm -f "$tmpdepfile"
713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Some modes work just like other modes, but use different flags.  We
733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# parameterize here, but still list the modes in the big case below,
743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# to make depend.m4 easier to write.  Note that we *cannot* use a case
753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# here, because this file can only contain one case statement.
763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevif test "$depmode" = hp; then
773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # HP compiler uses -M and no extra arg.
783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  gccflag=-M
793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  depmode=gcc
803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfi
813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevif test "$depmode" = dashXmstdout; then
833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev   # This is just like dashmstdout with a different argument.
843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev   dashmflag=-xM
853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev   depmode=dashmstdout
863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfi
873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevcygpath_u="cygpath -u -f -"
893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevif test "$depmode" = msvcmsys; then
903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev   # This is just like msvisualcpp but w/o cygpath translation.
913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev   # Just convert the backslash-escaped backslashes to single forward
923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev   # slashes to satisfy depend.m4
933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev   cygpath_u="sed s,\\\\\\\\,/,g"
943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev   depmode=msvisualcpp
953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfi
963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevcase "$depmode" in
983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevgcc3)
993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## gcc 3 implements dependency tracking that does exactly what
1003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
1013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## it if -MD -MP comes after the -MF stuff.  Hmm.
1023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## Unfortunately, FreeBSD c89 acceptance of flags depends upon
1033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## the command line argument order; so add the flags where they
1043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## appear in depend2.am.  Note that the slowdown incurred here
1053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## affects only configure: in makefiles, %FASTDEP% shortcuts this.
1063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  for arg
1073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  do
1083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    case $arg in
1093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
1103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    *)  set fnord "$@" "$arg" ;;
1113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    esac
1123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    shift # fnord
1133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    shift # $arg
1143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  done
1153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  "$@"
1163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  stat=$?
1173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  if test $stat -eq 0; then :
1183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  else
1193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    rm -f "$tmpdepfile"
1203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    exit $stat
1213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  fi
1223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  mv "$tmpdepfile" "$depfile"
1233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ;;
1243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevgcc)
1263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## There are various ways to get dependency output from gcc.  Here's
1273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## why we pick this rather obscure method:
1283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## - Don't want to use -MD because we'd like the dependencies to end
1293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev##   up in a subdir.  Having to rename by hand is ugly.
1303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev##   (We might end up doing this anyway to support other compilers.)
1313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
1323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev##   -MM, not -M (despite what the docs say).
1333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## - Using -M directly means running the compiler twice (even worse
1343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev##   than renaming).
1353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  if test -z "$gccflag"; then
1363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    gccflag=-MD,
1373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  fi
1383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  "$@" -Wp,"$gccflag$tmpdepfile"
1393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  stat=$?
1403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  if test $stat -eq 0; then :
1413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  else
1423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    rm -f "$tmpdepfile"
1433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    exit $stat
1443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  fi
1453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  rm -f "$depfile"
1463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  echo "$object : \\" > "$depfile"
1473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
1483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## The second -e expression handles DOS-style file names with drive letters.
1493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  sed -e 's/^[^:]*: / /' \
1503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
1513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## This next piece of magic avoids the `deleted header file' problem.
1523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## The problem is that when a header file which appears in a .P file
1533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## is deleted, the dependency causes make to die (because there is
1543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## typically no way to rebuild the header).  We avoid this by adding
1553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## dummy dependencies for each header file.  Too bad gcc doesn't do
1563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## this for us directly.
1573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  tr ' ' '
1583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev' < "$tmpdepfile" |
1593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## Some versions of gcc put a space before the `:'.  On the theory
1603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## that the space means something, we add a space to the output as
1613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## well.
1623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## Some versions of the HPUX 10.20 sed can't process this invocation
1633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## correctly.  Breaking it into two sed invocations is a workaround.
1643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
1653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  rm -f "$tmpdepfile"
1663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ;;
1673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevhp)
1693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # This case exists only to let depend.m4 do its work.  It works by
1703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # looking at the text of this script.  This case will never be run,
1713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # since it is checked for above.
1723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  exit 1
1733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ;;
1743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevsgi)
1763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  if test "$libtool" = yes; then
1773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    "$@" "-Wp,-MDupdate,$tmpdepfile"
1783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  else
1793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    "$@" -MDupdate "$tmpdepfile"
1803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  fi
1813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  stat=$?
1823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  if test $stat -eq 0; then :
1833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  else
1843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    rm -f "$tmpdepfile"
1853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    exit $stat
1863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  fi
1873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  rm -f "$depfile"
1883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
1903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    echo "$object : \\" > "$depfile"
1913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    # Clip off the initial element (the dependent).  Don't try to be
1933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    # clever and replace this with sed code, as IRIX sed won't handle
1943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    # lines with more than a fixed number of characters (4096 in
1953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
1963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    # the IRIX cc adds comments like `#:fec' to the end of the
1973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    # dependency line.
1983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    tr ' ' '
1993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev' < "$tmpdepfile" \
2003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
2013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    tr '
2023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev' ' ' >> "$depfile"
2033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    echo >> "$depfile"
2043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
2053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    # The second pass generates a dummy entry for each header file.
2063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    tr ' ' '
2073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev' < "$tmpdepfile" \
2083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
2093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev   >> "$depfile"
2103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  else
2113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    # The sourcefile does not contain any dependencies, so just
2123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    # store a dummy comment line, to avoid errors with the Makefile
2133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    # "include basename.Plo" scheme.
2143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    echo "#dummy" > "$depfile"
2153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  fi
2163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  rm -f "$tmpdepfile"
2173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ;;
2183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
2193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevaix)
2203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # The C for AIX Compiler uses -M and outputs the dependencies
2213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # in a .u file.  In older versions, this file always lives in the
2223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # current directory.  Also, the AIX compiler puts `$object:' at the
2233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # start of each line; $object doesn't have directory information.
2243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # Version 6 uses the directory in both cases.
2253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
2263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  test "x$dir" = "x$object" && dir=
2273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
2283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  if test "$libtool" = yes; then
2293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    tmpdepfile1=$dir$base.u
2303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    tmpdepfile2=$base.u
2313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    tmpdepfile3=$dir.libs/$base.u
2323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    "$@" -Wc,-M
2333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  else
2343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    tmpdepfile1=$dir$base.u
2353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    tmpdepfile2=$dir$base.u
2363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    tmpdepfile3=$dir$base.u
2373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    "$@" -M
2383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  fi
2393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  stat=$?
2403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
2413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  if test $stat -eq 0; then :
2423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  else
2433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    exit $stat
2453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  fi
2463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
2473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  do
2493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    test -f "$tmpdepfile" && break
2503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  done
2513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  if test -f "$tmpdepfile"; then
2523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    # Each line is of the form `foo.o: dependent.h'.
2533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    # Do two passes, one to just change these to
2543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    # `$object: dependent.h' and one to simply `dependent.h:'.
2553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
2563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    # That's a tab and a space in the [].
2573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
2583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  else
2593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    # The sourcefile does not contain any dependencies, so just
2603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    # store a dummy comment line, to avoid errors with the Makefile
2613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    # "include basename.Plo" scheme.
2623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    echo "#dummy" > "$depfile"
2633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  fi
2643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  rm -f "$tmpdepfile"
2653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ;;
2663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
2673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevicc)
2683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # Intel's C compiler understands `-MD -MF file'.  However on
2693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
2703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # ICC 7.0 will fill foo.d with something like
2713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  #    foo.o: sub/foo.c
2723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  #    foo.o: sub/foo.h
2733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # which is wrong.  We want:
2743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  #    sub/foo.o: sub/foo.c
2753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  #    sub/foo.o: sub/foo.h
2763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  #    sub/foo.c:
2773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  #    sub/foo.h:
2783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # ICC 7.1 will output
2793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  #    foo.o: sub/foo.c sub/foo.h
2803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # and will wrap long lines using \ :
2813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  #    foo.o: sub/foo.c ... \
2823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  #     sub/foo.h ... \
2833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  #     ...
2843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
2853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  "$@" -MD -MF "$tmpdepfile"
2863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  stat=$?
2873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  if test $stat -eq 0; then :
2883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  else
2893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    rm -f "$tmpdepfile"
2903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    exit $stat
2913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  fi
2923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  rm -f "$depfile"
2933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # Each line is of the form `foo.o: dependent.h',
2943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
2953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # Do two passes, one to just change these to
2963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # `$object: dependent.h' and one to simply `dependent.h:'.
2973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
2983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # Some versions of the HPUX 10.20 sed can't process this invocation
2993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # correctly.  Breaking it into two sed invocations is a workaround.
3003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
3013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    sed -e 's/$/ :/' >> "$depfile"
3023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  rm -f "$tmpdepfile"
3033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ;;
3043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
3053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevhp2)
3063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
3073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # compilers, which have integrated preprocessors.  The correct option
3083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # to use with these is +Maked; it writes dependencies to a file named
3093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # 'foo.d', which lands next to the object file, wherever that
3103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # happens to be.
3113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # Much of this is similar to the tru64 case; see comments there.
3123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  test "x$dir" = "x$object" && dir=
3143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  if test "$libtool" = yes; then
3163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    tmpdepfile1=$dir$base.d
3173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    tmpdepfile2=$dir.libs/$base.d
3183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    "$@" -Wc,+Maked
3193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  else
3203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    tmpdepfile1=$dir$base.d
3213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    tmpdepfile2=$dir$base.d
3223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    "$@" +Maked
3233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  fi
3243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  stat=$?
3253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  if test $stat -eq 0; then :
3263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  else
3273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev     rm -f "$tmpdepfile1" "$tmpdepfile2"
3283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev     exit $stat
3293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  fi
3303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
3313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
3323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  do
3333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    test -f "$tmpdepfile" && break
3343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  done
3353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  if test -f "$tmpdepfile"; then
3363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
3373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    # Add `dependent.h:' lines.
3383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    sed -ne '2,${
3393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	       s/^ *//
3403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	       s/ \\*$//
3413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	       s/$/:/
3423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	       p
3433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	     }' "$tmpdepfile" >> "$depfile"
3443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  else
3453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    echo "#dummy" > "$depfile"
3463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  fi
3473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  rm -f "$tmpdepfile" "$tmpdepfile2"
3483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ;;
3493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
3503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevtru64)
3513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev   # The Tru64 compiler uses -MD to generate dependencies as a side
3523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
3533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
3543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev   # dependencies in `foo.d' instead, so we check for that too.
3553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev   # Subdirectories are respected.
3563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev   test "x$dir" = "x$object" && dir=
3583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
3603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev   if test "$libtool" = yes; then
3613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      # With Tru64 cc, shared objects can also be used to make a
3623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      # static library.  This mechanism is used in libtool 1.4 series to
3633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      # handle both shared and static libraries in a single compilation.
3643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
3653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      #
3663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      # With libtool 1.5 this exception was removed, and libtool now
3673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      # generates 2 separate objects for the 2 libraries.  These two
3683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      # compilations output dependencies in $dir.libs/$base.o.d and
3693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      # in $dir$base.o.d.  We have to check for both files, because
3703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      # one of the two compilations can be disabled.  We should prefer
3713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
3723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      # automatically cleaned when .libs/ is deleted, while ignoring
3733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      # the former would cause a distcleancheck panic.
3743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
3753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      tmpdepfile2=$dir$base.o.d          # libtool 1.5
3763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
3773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
3783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      "$@" -Wc,-MD
3793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev   else
3803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      tmpdepfile1=$dir$base.o.d
3813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      tmpdepfile2=$dir$base.d
3823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      tmpdepfile3=$dir$base.d
3833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      tmpdepfile4=$dir$base.d
3843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      "$@" -MD
3853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev   fi
3863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
3873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev   stat=$?
3883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev   if test $stat -eq 0; then :
3893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev   else
3903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      exit $stat
3923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev   fi
3933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
3943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev   do
3963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev     test -f "$tmpdepfile" && break
3973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev   done
3983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev   if test -f "$tmpdepfile"; then
3993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
4003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      # That's a tab and a space in the [].
4013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
4023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev   else
4033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      echo "#dummy" > "$depfile"
4043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev   fi
4053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev   rm -f "$tmpdepfile"
4063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev   ;;
4073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
4083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#nosideeffect)
4093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # This comment above is used by automake to tell side-effect
4103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # dependency tracking mechanisms from slower ones.
4113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
4123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevdashmstdout)
4133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # Important note: in order to support this mode, a compiler *must*
4143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # always write the preprocessed file to stdout, regardless of -o.
4153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  "$@" || exit $?
4163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
4173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # Remove the call to Libtool.
4183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  if test "$libtool" = yes; then
4193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    while test "X$1" != 'X--mode=compile'; do
4203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      shift
4213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    done
4223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    shift
4233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  fi
4243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
4253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # Remove `-o $object'.
4263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  IFS=" "
4273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  for arg
4283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  do
4293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    case $arg in
4303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    -o)
4313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      shift
4323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      ;;
4333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    $object)
4343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      shift
4353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      ;;
4363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    *)
4373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      set fnord "$@" "$arg"
4383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      shift # fnord
4393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      shift # $arg
4403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      ;;
4413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    esac
4423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  done
4433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
4443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  test -z "$dashmflag" && dashmflag=-M
4453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # Require at least two characters before searching for `:'
4463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # in the target name.  This is to cope with DOS-style filenames:
4473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
4483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  "$@" $dashmflag |
4493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
4503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  rm -f "$depfile"
4513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  cat < "$tmpdepfile" > "$depfile"
4523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  tr ' ' '
4533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev' < "$tmpdepfile" | \
4543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## Some versions of the HPUX 10.20 sed can't process this invocation
4553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## correctly.  Breaking it into two sed invocations is a workaround.
4563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
4573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  rm -f "$tmpdepfile"
4583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ;;
4593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
4603aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevdashXmstdout)
4613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # This case only exists to satisfy depend.m4.  It is never actually
4623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # run, as this mode is specially recognized in the preamble.
4633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  exit 1
4643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ;;
4653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
4663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevmakedepend)
4673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  "$@" || exit $?
4683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # Remove any Libtool call
4693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  if test "$libtool" = yes; then
4703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    while test "X$1" != 'X--mode=compile'; do
4713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      shift
4723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    done
4733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    shift
4743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  fi
4753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # X makedepend
4763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  shift
4773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  cleared=no eat=no
4783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  for arg
4793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  do
4803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    case $cleared in
4813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    no)
4823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      set ""; shift
4833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      cleared=yes ;;
4843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    esac
4853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    if test $eat = yes; then
4863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      eat=no
4873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      continue
4883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    fi
4893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    case "$arg" in
4903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    -D*|-I*)
4913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      set fnord "$@" "$arg"; shift ;;
4923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    # Strip any option that makedepend may not understand.  Remove
4933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    # the object too, otherwise makedepend will parse it as a source file.
4943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    -arch)
4953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      eat=yes ;;
4963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    -*|$object)
4973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      ;;
4983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    *)
4993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      set fnord "$@" "$arg"; shift ;;
5003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    esac
5013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  done
5023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  obj_suffix=`echo "$object" | sed 's/^.*\././'`
5033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  touch "$tmpdepfile"
5043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
5053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  rm -f "$depfile"
5063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  cat < "$tmpdepfile" > "$depfile"
5073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  sed '1,2d' "$tmpdepfile" | tr ' ' '
5083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev' | \
5093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## Some versions of the HPUX 10.20 sed can't process this invocation
5103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev## correctly.  Breaking it into two sed invocations is a workaround.
5113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
5123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  rm -f "$tmpdepfile" "$tmpdepfile".bak
5133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ;;
5143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
5153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevcpp)
5163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # Important note: in order to support this mode, a compiler *must*
5173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # always write the preprocessed file to stdout.
5183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  "$@" || exit $?
5193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
5203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # Remove the call to Libtool.
5213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  if test "$libtool" = yes; then
5223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    while test "X$1" != 'X--mode=compile'; do
5233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      shift
5243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    done
5253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    shift
5263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  fi
5273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
5283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # Remove `-o $object'.
5293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  IFS=" "
5303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  for arg
5313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  do
5323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    case $arg in
5333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    -o)
5343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      shift
5353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      ;;
5363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    $object)
5373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      shift
5383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      ;;
5393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    *)
5403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      set fnord "$@" "$arg"
5413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      shift # fnord
5423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      shift # $arg
5433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      ;;
5443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    esac
5453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  done
5463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
5473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  "$@" -E |
5483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
5493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
5503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    sed '$ s: \\$::' > "$tmpdepfile"
5513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  rm -f "$depfile"
5523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  echo "$object : \\" > "$depfile"
5533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  cat < "$tmpdepfile" >> "$depfile"
5543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
5553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  rm -f "$tmpdepfile"
5563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ;;
5573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
5583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevmsvisualcpp)
5593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # Important note: in order to support this mode, a compiler *must*
5603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # always write the preprocessed file to stdout.
5613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  "$@" || exit $?
5623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
5633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # Remove the call to Libtool.
5643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  if test "$libtool" = yes; then
5653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    while test "X$1" != 'X--mode=compile'; do
5663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      shift
5673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    done
5683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    shift
5693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  fi
5703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
5713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  IFS=" "
5723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  for arg
5733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  do
5743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    case "$arg" in
5753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    -o)
5763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      shift
5773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      ;;
5783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    $object)
5793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      shift
5803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      ;;
5813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
5823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	set fnord "$@"
5833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	shift
5843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	shift
5853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	;;
5863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    *)
5873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	set fnord "$@" "$arg"
5883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	shift
5893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	shift
5903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev	;;
5913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    esac
5923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  done
5933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  "$@" -E 2>/dev/null |
5943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
5953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  rm -f "$depfile"
5963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  echo "$object : \\" > "$depfile"
5973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
5983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  echo "	" >> "$depfile"
5993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
6003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  rm -f "$tmpdepfile"
6013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ;;
6023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
6033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevmsvcmsys)
6043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # This case exists only to let depend.m4 do its work.  It works by
6053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # looking at the text of this script.  This case will never be run,
6063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  # since it is checked for above.
6073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  exit 1
6083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ;;
6093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
6103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevnone)
6113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  exec "$@"
6123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ;;
6133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
6143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev*)
6153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  echo "Unknown depmode $depmode" 1>&2
6163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  exit 1
6173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  ;;
6183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevesac
6193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
6203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevexit 0
6213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
6223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# Local Variables:
6233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# mode: shell-script
6243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# sh-indentation: 2
6253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# eval: (add-hook 'write-file-hooks 'time-stamp)
6263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# time-stamp-start: "scriptversion="
6273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# time-stamp-format: "%:y-%02m-%02d.%02H"
6283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# time-stamp-time-zone: "UTC"
6293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# time-stamp-end: "; # UTC"
6303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev# End:
631