18e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#! /bin/sh
28e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# depcomp - compile a program generating dependencies as side-effects
38e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
48e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsscriptversion=2005-07-09.11
58e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
68e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
78e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
88e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# This program is free software; you can redistribute it and/or modify
98e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# it under the terms of the GNU General Public License as published by
108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# the Free Software Foundation; either version 2, or (at your option)
118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# any later version.
128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# This program is distributed in the hope that it will be useful,
148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# but WITHOUT ANY WARRANTY; without even the implied warranty of
158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# GNU General Public License for more details.
178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# You should have received a copy of the GNU General Public License
198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# along with this program; if not, write to the Free Software
208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# 02110-1301, USA.
228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# As a special exception to the GNU General Public License, if you
248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# distribute this file as part of a program that contains a
258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# configuration script generated by Autoconf, you may include it under
268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# the same distribution terms that you use for the rest of that program.
278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelscase $1 in
318e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  '')
328e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
338e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels     exit 1;
348e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels     ;;
358e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  -h | --h*)
368e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    cat <<\EOF
378e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas EckelsUsage: depcomp [--help] [--version] PROGRAM [ARGS]
388e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
398e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas EckelsRun PROGRAMS ARGS to compile a file, generating dependencies
408e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsas side-effects.
418e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
428e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas EckelsEnvironment variables:
438e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  depmode     Dependency tracking mode.
448e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  source      Source file read by `PROGRAMS ARGS'.
458e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  object      Object file output by `PROGRAMS ARGS'.
468e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  DEPDIR      directory where to store dependencies.
478e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  depfile     Dependency file to output.
488e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  tmpdepfile  Temporary file to use when outputing dependencies.
498e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  libtool     Whether libtool is used (yes/no).
508e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
518e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas EckelsReport bugs to <bug-automake@gnu.org>.
528e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas EckelsEOF
538e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    exit $?
548e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    ;;
558e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  -v | --v*)
568e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    echo "depcomp $scriptversion"
578e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    exit $?
588e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    ;;
598e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsesac
608e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
618e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsif test -z "$depmode" || test -z "$source" || test -z "$object"; then
628e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  echo "depcomp: Variables source, object and depmode must be set" 1>&2
638e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  exit 1
648e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsfi
658e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
668e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
678e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsdepfile=${depfile-`echo "$object" |
688e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
698e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelstmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
708e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
718e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsrm -f "$tmpdepfile"
728e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
738e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# Some modes work just like other modes, but use different flags.  We
748e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# parameterize here, but still list the modes in the big case below,
758e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# to make depend.m4 easier to write.  Note that we *cannot* use a case
768e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# here, because this file can only contain one case statement.
778e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsif test "$depmode" = hp; then
788e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # HP compiler uses -M and no extra arg.
798e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  gccflag=-M
808e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  depmode=gcc
818e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsfi
828e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
838e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsif test "$depmode" = dashXmstdout; then
848e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   # This is just like dashmstdout with a different argument.
858e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   dashmflag=-xM
868e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   depmode=dashmstdout
878e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsfi
888e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
898e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelscase "$depmode" in
908e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsgcc3)
918e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## gcc 3 implements dependency tracking that does exactly what
928e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
938e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## it if -MD -MP comes after the -MF stuff.  Hmm.
948e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
958e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  stat=$?
968e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  if test $stat -eq 0; then :
978e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  else
988e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    rm -f "$tmpdepfile"
998e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    exit $stat
1008e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  fi
1018e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  mv "$tmpdepfile" "$depfile"
1028e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  ;;
1038e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1048e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsgcc)
1058e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## There are various ways to get dependency output from gcc.  Here's
1068e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## why we pick this rather obscure method:
1078e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## - Don't want to use -MD because we'd like the dependencies to end
1088e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels##   up in a subdir.  Having to rename by hand is ugly.
1098e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels##   (We might end up doing this anyway to support other compilers.)
1108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
1118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels##   -MM, not -M (despite what the docs say).
1128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## - Using -M directly means running the compiler twice (even worse
1138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels##   than renaming).
1148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  if test -z "$gccflag"; then
1158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    gccflag=-MD,
1168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  fi
1178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  "$@" -Wp,"$gccflag$tmpdepfile"
1188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  stat=$?
1198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  if test $stat -eq 0; then :
1208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  else
1218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    rm -f "$tmpdepfile"
1228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    exit $stat
1238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  fi
1248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  rm -f "$depfile"
1258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  echo "$object : \\" > "$depfile"
1268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
1278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## The second -e expression handles DOS-style file names with drive letters.
1288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  sed -e 's/^[^:]*: / /' \
1298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
1308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## This next piece of magic avoids the `deleted header file' problem.
1318e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## The problem is that when a header file which appears in a .P file
1328e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## is deleted, the dependency causes make to die (because there is
1338e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## typically no way to rebuild the header).  We avoid this by adding
1348e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## dummy dependencies for each header file.  Too bad gcc doesn't do
1358e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## this for us directly.
1368e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  tr ' ' '
1378e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels' < "$tmpdepfile" |
1388e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## Some versions of gcc put a space before the `:'.  On the theory
1398e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## that the space means something, we add a space to the output as
1408e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## well.
1418e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## Some versions of the HPUX 10.20 sed can't process this invocation
1428e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## correctly.  Breaking it into two sed invocations is a workaround.
1438e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
1448e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  rm -f "$tmpdepfile"
1458e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  ;;
1468e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1478e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelshp)
1488e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # This case exists only to let depend.m4 do its work.  It works by
1498e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # looking at the text of this script.  This case will never be run,
1508e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # since it is checked for above.
1518e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  exit 1
1528e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  ;;
1538e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1548e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelssgi)
1558e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  if test "$libtool" = yes; then
1568e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    "$@" "-Wp,-MDupdate,$tmpdepfile"
1578e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  else
1588e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    "$@" -MDupdate "$tmpdepfile"
1598e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  fi
1608e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  stat=$?
1618e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  if test $stat -eq 0; then :
1628e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  else
1638e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    rm -f "$tmpdepfile"
1648e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    exit $stat
1658e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  fi
1668e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  rm -f "$depfile"
1678e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1688e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
1698e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    echo "$object : \\" > "$depfile"
1708e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1718e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    # Clip off the initial element (the dependent).  Don't try to be
1728e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    # clever and replace this with sed code, as IRIX sed won't handle
1738e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    # lines with more than a fixed number of characters (4096 in
1748e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
1758e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    # the IRIX cc adds comments like `#:fec' to the end of the
1768e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    # dependency line.
1778e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    tr ' ' '
1788e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels' < "$tmpdepfile" \
1798e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
1808e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    tr '
1818e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels' ' ' >> $depfile
1828e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    echo >> $depfile
1838e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1848e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    # The second pass generates a dummy entry for each header file.
1858e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    tr ' ' '
1868e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels' < "$tmpdepfile" \
1878e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
1888e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   >> $depfile
1898e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  else
1908e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    # The sourcefile does not contain any dependencies, so just
1918e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    # store a dummy comment line, to avoid errors with the Makefile
1928e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    # "include basename.Plo" scheme.
1938e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    echo "#dummy" > "$depfile"
1948e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  fi
1958e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  rm -f "$tmpdepfile"
1968e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  ;;
1978e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1988e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsaix)
1998e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # The C for AIX Compiler uses -M and outputs the dependencies
2008e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # in a .u file.  In older versions, this file always lives in the
2018e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # current directory.  Also, the AIX compiler puts `$object:' at the
2028e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # start of each line; $object doesn't have directory information.
2038e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # Version 6 uses the directory in both cases.
2048e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
2058e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  tmpdepfile="$stripped.u"
2068e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  if test "$libtool" = yes; then
2078e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    "$@" -Wc,-M
2088e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  else
2098e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    "$@" -M
2108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  fi
2118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  stat=$?
2128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
2138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  if test -f "$tmpdepfile"; then :
2148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  else
2158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    stripped=`echo "$stripped" | sed 's,^.*/,,'`
2168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    tmpdepfile="$stripped.u"
2178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  fi
2188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
2198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  if test $stat -eq 0; then :
2208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  else
2218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    rm -f "$tmpdepfile"
2228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    exit $stat
2238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  fi
2248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
2258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  if test -f "$tmpdepfile"; then
2268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    outname="$stripped.o"
2278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    # Each line is of the form `foo.o: dependent.h'.
2288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    # Do two passes, one to just change these to
2298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    # `$object: dependent.h' and one to simply `dependent.h:'.
2308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
2318e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
2328e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  else
2338e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    # The sourcefile does not contain any dependencies, so just
2348e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    # store a dummy comment line, to avoid errors with the Makefile
2358e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    # "include basename.Plo" scheme.
2368e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    echo "#dummy" > "$depfile"
2378e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  fi
2388e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  rm -f "$tmpdepfile"
2398e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  ;;
2408e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
2418e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsicc)
2428e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # Intel's C compiler understands `-MD -MF file'.  However on
2438e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
2448e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # ICC 7.0 will fill foo.d with something like
2458e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  #    foo.o: sub/foo.c
2468e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  #    foo.o: sub/foo.h
2478e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # which is wrong.  We want:
2488e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  #    sub/foo.o: sub/foo.c
2498e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  #    sub/foo.o: sub/foo.h
2508e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  #    sub/foo.c:
2518e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  #    sub/foo.h:
2528e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # ICC 7.1 will output
2538e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  #    foo.o: sub/foo.c sub/foo.h
2548e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # and will wrap long lines using \ :
2558e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  #    foo.o: sub/foo.c ... \
2568e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  #     sub/foo.h ... \
2578e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  #     ...
2588e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
2598e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  "$@" -MD -MF "$tmpdepfile"
2608e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  stat=$?
2618e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  if test $stat -eq 0; then :
2628e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  else
2638e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    rm -f "$tmpdepfile"
2648e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    exit $stat
2658e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  fi
2668e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  rm -f "$depfile"
2678e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # Each line is of the form `foo.o: dependent.h',
2688e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
2698e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # Do two passes, one to just change these to
2708e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # `$object: dependent.h' and one to simply `dependent.h:'.
2718e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
2728e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # Some versions of the HPUX 10.20 sed can't process this invocation
2738e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # correctly.  Breaking it into two sed invocations is a workaround.
2748e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
2758e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    sed -e 's/$/ :/' >> "$depfile"
2768e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  rm -f "$tmpdepfile"
2778e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  ;;
2788e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
2798e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelstru64)
2808e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   # The Tru64 compiler uses -MD to generate dependencies as a side
2818e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
2828e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
2838e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   # dependencies in `foo.d' instead, so we check for that too.
2848e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   # Subdirectories are respected.
2858e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
2868e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   test "x$dir" = "x$object" && dir=
2878e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
2888e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
2898e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   if test "$libtool" = yes; then
2908e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      # With Tru64 cc, shared objects can also be used to make a
2918e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      # static library.  This mecanism is used in libtool 1.4 series to
2928e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      # handle both shared and static libraries in a single compilation.
2938e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
2948e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      #
2958e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      # With libtool 1.5 this exception was removed, and libtool now
2968e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      # generates 2 separate objects for the 2 libraries.  These two
2978e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      # compilations output dependencies in in $dir.libs/$base.o.d and
2988e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      # in $dir$base.o.d.  We have to check for both files, because
2998e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      # one of the two compilations can be disabled.  We should prefer
3008e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
3018e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      # automatically cleaned when .libs/ is deleted, while ignoring
3028e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      # the former would cause a distcleancheck panic.
3038e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
3048e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      tmpdepfile2=$dir$base.o.d          # libtool 1.5
3058e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
3068e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
3078e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      "$@" -Wc,-MD
3088e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   else
3098e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      tmpdepfile1=$dir$base.o.d
3108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      tmpdepfile2=$dir$base.d
3118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      tmpdepfile3=$dir$base.d
3128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      tmpdepfile4=$dir$base.d
3138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      "$@" -MD
3148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   fi
3158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
3168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   stat=$?
3178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   if test $stat -eq 0; then :
3188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   else
3198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      exit $stat
3218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   fi
3228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
3238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   do
3258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels     test -f "$tmpdepfile" && break
3268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   done
3278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   if test -f "$tmpdepfile"; then
3288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
3298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      # That's a tab and a space in the [].
3308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
3318e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   else
3328e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      echo "#dummy" > "$depfile"
3338e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   fi
3348e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   rm -f "$tmpdepfile"
3358e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   ;;
3368e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
3378e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#nosideeffect)
3388e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # This comment above is used by automake to tell side-effect
3398e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # dependency tracking mechanisms from slower ones.
3408e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
3418e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsdashmstdout)
3428e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # Important note: in order to support this mode, a compiler *must*
3438e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # always write the preprocessed file to stdout, regardless of -o.
3448e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  "$@" || exit $?
3458e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
3468e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # Remove the call to Libtool.
3478e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  if test "$libtool" = yes; then
3488e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    while test $1 != '--mode=compile'; do
3498e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      shift
3508e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    done
3518e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    shift
3528e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  fi
3538e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
3548e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # Remove `-o $object'.
3558e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  IFS=" "
3568e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  for arg
3578e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  do
3588e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    case $arg in
3598e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    -o)
3608e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      shift
3618e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      ;;
3628e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    $object)
3638e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      shift
3648e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      ;;
3658e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    *)
3668e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      set fnord "$@" "$arg"
3678e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      shift # fnord
3688e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      shift # $arg
3698e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      ;;
3708e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    esac
3718e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  done
3728e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
3738e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  test -z "$dashmflag" && dashmflag=-M
3748e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # Require at least two characters before searching for `:'
3758e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # in the target name.  This is to cope with DOS-style filenames:
3768e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
3778e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  "$@" $dashmflag |
3788e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
3798e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  rm -f "$depfile"
3808e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  cat < "$tmpdepfile" > "$depfile"
3818e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  tr ' ' '
3828e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels' < "$tmpdepfile" | \
3838e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## Some versions of the HPUX 10.20 sed can't process this invocation
3848e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## correctly.  Breaking it into two sed invocations is a workaround.
3858e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
3868e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  rm -f "$tmpdepfile"
3878e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  ;;
3888e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
3898e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas EckelsdashXmstdout)
3908e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # This case only exists to satisfy depend.m4.  It is never actually
3918e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # run, as this mode is specially recognized in the preamble.
3928e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  exit 1
3938e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  ;;
3948e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
3958e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsmakedepend)
3968e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  "$@" || exit $?
3978e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # Remove any Libtool call
3988e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  if test "$libtool" = yes; then
3998e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    while test $1 != '--mode=compile'; do
4008e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      shift
4018e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    done
4028e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    shift
4038e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  fi
4048e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # X makedepend
4058e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  shift
4068e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  cleared=no
4078e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  for arg in "$@"; do
4088e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    case $cleared in
4098e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    no)
4108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      set ""; shift
4118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      cleared=yes ;;
4128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    esac
4138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    case "$arg" in
4148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    -D*|-I*)
4158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      set fnord "$@" "$arg"; shift ;;
4168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    # Strip any option that makedepend may not understand.  Remove
4178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    # the object too, otherwise makedepend will parse it as a source file.
4188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    -*|$object)
4198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      ;;
4208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    *)
4218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      set fnord "$@" "$arg"; shift ;;
4228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    esac
4238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  done
4248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  obj_suffix="`echo $object | sed 's/^.*\././'`"
4258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  touch "$tmpdepfile"
4268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
4278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  rm -f "$depfile"
4288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  cat < "$tmpdepfile" > "$depfile"
4298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  sed '1,2d' "$tmpdepfile" | tr ' ' '
4308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels' | \
4318e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## Some versions of the HPUX 10.20 sed can't process this invocation
4328e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels## correctly.  Breaking it into two sed invocations is a workaround.
4338e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
4348e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  rm -f "$tmpdepfile" "$tmpdepfile".bak
4358e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  ;;
4368e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
4378e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelscpp)
4388e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # Important note: in order to support this mode, a compiler *must*
4398e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # always write the preprocessed file to stdout.
4408e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  "$@" || exit $?
4418e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
4428e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # Remove the call to Libtool.
4438e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  if test "$libtool" = yes; then
4448e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    while test $1 != '--mode=compile'; do
4458e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      shift
4468e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    done
4478e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    shift
4488e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  fi
4498e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
4508e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # Remove `-o $object'.
4518e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  IFS=" "
4528e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  for arg
4538e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  do
4548e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    case $arg in
4558e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    -o)
4568e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      shift
4578e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      ;;
4588e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    $object)
4598e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      shift
4608e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      ;;
4618e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    *)
4628e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      set fnord "$@" "$arg"
4638e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      shift # fnord
4648e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      shift # $arg
4658e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels      ;;
4668e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    esac
4678e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  done
4688e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
4698e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  "$@" -E |
4708e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
4718e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
4728e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    sed '$ s: \\$::' > "$tmpdepfile"
4738e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  rm -f "$depfile"
4748e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  echo "$object : \\" > "$depfile"
4758e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  cat < "$tmpdepfile" >> "$depfile"
4768e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
4778e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  rm -f "$tmpdepfile"
4788e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  ;;
4798e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
4808e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsmsvisualcpp)
4818e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # Important note: in order to support this mode, a compiler *must*
4828e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # always write the preprocessed file to stdout, regardless of -o,
4838e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  # because we must use -o when running libtool.
4848e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  "$@" || exit $?
4858e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  IFS=" "
4868e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  for arg
4878e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  do
4888e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    case "$arg" in
4898e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
4908e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	set fnord "$@"
4918e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	shift
4928e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	shift
4938e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	;;
4948e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    *)
4958e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	set fnord "$@" "$arg"
4968e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	shift
4978e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	shift
4988e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels	;;
4998e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels    esac
5008e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  done
5018e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  "$@" -E |
5028e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
5038e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  rm -f "$depfile"
5048e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  echo "$object : \\" > "$depfile"
5058e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
5068e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  echo "	" >> "$depfile"
5078e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
5088e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  rm -f "$tmpdepfile"
5098e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  ;;
5108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
5118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsnone)
5128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  exec "$@"
5138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  ;;
5148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
5158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels*)
5168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  echo "Unknown depmode $depmode" 1>&2
5178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  exit 1
5188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  ;;
5198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsesac
5208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
5218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsexit 0
5228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
5238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# Local Variables:
5248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# mode: shell-script
5258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# sh-indentation: 2
5268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# eval: (add-hook 'write-file-hooks 'time-stamp)
5278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# time-stamp-start: "scriptversion="
5288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# time-stamp-format: "%:y-%02m-%02d.%02H"
5298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# time-stamp-end: "$"
5308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels# End:
531