Blame depcomp

Packit 57a33d
#! /bin/sh
Packit 57a33d
# depcomp - compile a program generating dependencies as side-effects
Packit 57a33d
Packit 57a33d
scriptversion=2013-05-30.07; # UTC
Packit 57a33d
Packit 57a33d
# Copyright (C) 1999-2014 Free Software Foundation, Inc.
Packit 57a33d
Packit 57a33d
# This program is free software; you can redistribute it and/or modify
Packit 57a33d
# it under the terms of the GNU General Public License as published by
Packit 57a33d
# the Free Software Foundation; either version 2, or (at your option)
Packit 57a33d
# any later version.
Packit 57a33d
Packit 57a33d
# This program is distributed in the hope that it will be useful,
Packit 57a33d
# but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 57a33d
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 57a33d
# GNU General Public License for more details.
Packit 57a33d
Packit 57a33d
# You should have received a copy of the GNU General Public License
Packit 57a33d
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit 57a33d
Packit 57a33d
# As a special exception to the GNU General Public License, if you
Packit 57a33d
# distribute this file as part of a program that contains a
Packit 57a33d
# configuration script generated by Autoconf, you may include it under
Packit 57a33d
# the same distribution terms that you use for the rest of that program.
Packit 57a33d
Packit 57a33d
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
Packit 57a33d
Packit 57a33d
case $1 in
Packit 57a33d
  '')
Packit 57a33d
    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
Packit 57a33d
    exit 1;
Packit 57a33d
    ;;
Packit 57a33d
  -h | --h*)
Packit 57a33d
    cat <<\EOF
Packit 57a33d
Usage: depcomp [--help] [--version] PROGRAM [ARGS]
Packit 57a33d
Packit 57a33d
Run PROGRAMS ARGS to compile a file, generating dependencies
Packit 57a33d
as side-effects.
Packit 57a33d
Packit 57a33d
Environment variables:
Packit 57a33d
  depmode     Dependency tracking mode.
Packit 57a33d
  source      Source file read by 'PROGRAMS ARGS'.
Packit 57a33d
  object      Object file output by 'PROGRAMS ARGS'.
Packit 57a33d
  DEPDIR      directory where to store dependencies.
Packit 57a33d
  depfile     Dependency file to output.
Packit 57a33d
  tmpdepfile  Temporary file to use when outputting dependencies.
Packit 57a33d
  libtool     Whether libtool is used (yes/no).
Packit 57a33d
Packit 57a33d
Report bugs to <bug-automake@gnu.org>.
Packit 57a33d
EOF
Packit 57a33d
    exit $?
Packit 57a33d
    ;;
Packit 57a33d
  -v | --v*)
Packit 57a33d
    echo "depcomp $scriptversion"
Packit 57a33d
    exit $?
Packit 57a33d
    ;;
Packit 57a33d
esac
Packit 57a33d
Packit 57a33d
# Get the directory component of the given path, and save it in the
Packit 57a33d
# global variables '$dir'.  Note that this directory component will
Packit 57a33d
# be either empty or ending with a '/' character.  This is deliberate.
Packit 57a33d
set_dir_from ()
Packit 57a33d
{
Packit 57a33d
  case $1 in
Packit 57a33d
    */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
Packit 57a33d
      *) dir=;;
Packit 57a33d
  esac
Packit 57a33d
}
Packit 57a33d
Packit 57a33d
# Get the suffix-stripped basename of the given path, and save it the
Packit 57a33d
# global variable '$base'.
Packit 57a33d
set_base_from ()
Packit 57a33d
{
Packit 57a33d
  base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
Packit 57a33d
}
Packit 57a33d
Packit 57a33d
# If no dependency file was actually created by the compiler invocation,
Packit 57a33d
# we still have to create a dummy depfile, to avoid errors with the
Packit 57a33d
# Makefile "include basename.Plo" scheme.
Packit 57a33d
make_dummy_depfile ()
Packit 57a33d
{
Packit 57a33d
  echo "#dummy" > "$depfile"
Packit 57a33d
}
Packit 57a33d
Packit 57a33d
# Factor out some common post-processing of the generated depfile.
Packit 57a33d
# Requires the auxiliary global variable '$tmpdepfile' to be set.
Packit 57a33d
aix_post_process_depfile ()
Packit 57a33d
{
Packit 57a33d
  # If the compiler actually managed to produce a dependency file,
Packit 57a33d
  # post-process it.
Packit 57a33d
  if test -f "$tmpdepfile"; then
Packit 57a33d
    # Each line is of the form 'foo.o: dependency.h'.
Packit 57a33d
    # Do two passes, one to just change these to
Packit 57a33d
    #   $object: dependency.h
Packit 57a33d
    # and one to simply output
Packit 57a33d
    #   dependency.h:
Packit 57a33d
    # which is needed to avoid the deleted-header problem.
Packit 57a33d
    { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
Packit 57a33d
      sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
Packit 57a33d
    } > "$depfile"
Packit 57a33d
    rm -f "$tmpdepfile"
Packit 57a33d
  else
Packit 57a33d
    make_dummy_depfile
Packit 57a33d
  fi
Packit 57a33d
}
Packit 57a33d
Packit 57a33d
# A tabulation character.
Packit 57a33d
tab='	'
Packit 57a33d
# A newline character.
Packit 57a33d
nl='
Packit 57a33d
'
Packit 57a33d
# Character ranges might be problematic outside the C locale.
Packit 57a33d
# These definitions help.
Packit 57a33d
upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
Packit 57a33d
lower=abcdefghijklmnopqrstuvwxyz
Packit 57a33d
digits=0123456789
Packit 57a33d
alpha=${upper}${lower}
Packit 57a33d
Packit 57a33d
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
Packit 57a33d
  echo "depcomp: Variables source, object and depmode must be set" 1>&2
Packit 57a33d
  exit 1
Packit 57a33d
fi
Packit 57a33d
Packit 57a33d
# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
Packit 57a33d
depfile=${depfile-`echo "$object" |
Packit 57a33d
  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
Packit 57a33d
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
Packit 57a33d
Packit 57a33d
rm -f "$tmpdepfile"
Packit 57a33d
Packit 57a33d
# Avoid interferences from the environment.
Packit 57a33d
gccflag= dashmflag=
Packit 57a33d
Packit 57a33d
# Some modes work just like other modes, but use different flags.  We
Packit 57a33d
# parameterize here, but still list the modes in the big case below,
Packit 57a33d
# to make depend.m4 easier to write.  Note that we *cannot* use a case
Packit 57a33d
# here, because this file can only contain one case statement.
Packit 57a33d
if test "$depmode" = hp; then
Packit 57a33d
  # HP compiler uses -M and no extra arg.
Packit 57a33d
  gccflag=-M
Packit 57a33d
  depmode=gcc
Packit 57a33d
fi
Packit 57a33d
Packit 57a33d
if test "$depmode" = dashXmstdout; then
Packit 57a33d
  # This is just like dashmstdout with a different argument.
Packit 57a33d
  dashmflag=-xM
Packit 57a33d
  depmode=dashmstdout
Packit 57a33d
fi
Packit 57a33d
Packit 57a33d
cygpath_u="cygpath -u -f -"
Packit 57a33d
if test "$depmode" = msvcmsys; then
Packit 57a33d
  # This is just like msvisualcpp but w/o cygpath translation.
Packit 57a33d
  # Just convert the backslash-escaped backslashes to single forward
Packit 57a33d
  # slashes to satisfy depend.m4
Packit 57a33d
  cygpath_u='sed s,\\\\,/,g'
Packit 57a33d
  depmode=msvisualcpp
Packit 57a33d
fi
Packit 57a33d
Packit 57a33d
if test "$depmode" = msvc7msys; then
Packit 57a33d
  # This is just like msvc7 but w/o cygpath translation.
Packit 57a33d
  # Just convert the backslash-escaped backslashes to single forward
Packit 57a33d
  # slashes to satisfy depend.m4
Packit 57a33d
  cygpath_u='sed s,\\\\,/,g'
Packit 57a33d
  depmode=msvc7
Packit 57a33d
fi
Packit 57a33d
Packit 57a33d
if test "$depmode" = xlc; then
Packit 57a33d
  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
Packit 57a33d
  gccflag=-qmakedep=gcc,-MF
Packit 57a33d
  depmode=gcc
Packit 57a33d
fi
Packit 57a33d
Packit 57a33d
case "$depmode" in
Packit 57a33d
gcc3)
Packit 57a33d
## gcc 3 implements dependency tracking that does exactly what
Packit 57a33d
## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
Packit 57a33d
## it if -MD -MP comes after the -MF stuff.  Hmm.
Packit 57a33d
## Unfortunately, FreeBSD c89 acceptance of flags depends upon
Packit 57a33d
## the command line argument order; so add the flags where they
Packit 57a33d
## appear in depend2.am.  Note that the slowdown incurred here
Packit 57a33d
## affects only configure: in makefiles, %FASTDEP% shortcuts this.
Packit 57a33d
  for arg
Packit 57a33d
  do
Packit 57a33d
    case $arg in
Packit 57a33d
    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
Packit 57a33d
    *)  set fnord "$@" "$arg" ;;
Packit 57a33d
    esac
Packit 57a33d
    shift # fnord
Packit 57a33d
    shift # $arg
Packit 57a33d
  done
Packit 57a33d
  "$@"
Packit 57a33d
  stat=$?
Packit 57a33d
  if test $stat -ne 0; then
Packit 57a33d
    rm -f "$tmpdepfile"
Packit 57a33d
    exit $stat
Packit 57a33d
  fi
Packit 57a33d
  mv "$tmpdepfile" "$depfile"
Packit 57a33d
  ;;
Packit 57a33d
Packit 57a33d
gcc)
Packit 57a33d
## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
Packit 57a33d
## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
Packit 57a33d
## (see the conditional assignment to $gccflag above).
Packit 57a33d
## There are various ways to get dependency output from gcc.  Here's
Packit 57a33d
## why we pick this rather obscure method:
Packit 57a33d
## - Don't want to use -MD because we'd like the dependencies to end
Packit 57a33d
##   up in a subdir.  Having to rename by hand is ugly.
Packit 57a33d
##   (We might end up doing this anyway to support other compilers.)
Packit 57a33d
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
Packit 57a33d
##   -MM, not -M (despite what the docs say).  Also, it might not be
Packit 57a33d
##   supported by the other compilers which use the 'gcc' depmode.
Packit 57a33d
## - Using -M directly means running the compiler twice (even worse
Packit 57a33d
##   than renaming).
Packit 57a33d
  if test -z "$gccflag"; then
Packit 57a33d
    gccflag=-MD,
Packit 57a33d
  fi
Packit 57a33d
  "$@" -Wp,"$gccflag$tmpdepfile"
Packit 57a33d
  stat=$?
Packit 57a33d
  if test $stat -ne 0; then
Packit 57a33d
    rm -f "$tmpdepfile"
Packit 57a33d
    exit $stat
Packit 57a33d
  fi
Packit 57a33d
  rm -f "$depfile"
Packit 57a33d
  echo "$object : \\" > "$depfile"
Packit 57a33d
  # The second -e expression handles DOS-style file names with drive
Packit 57a33d
  # letters.
Packit 57a33d
  sed -e 's/^[^:]*: / /' \
Packit 57a33d
      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
Packit 57a33d
## This next piece of magic avoids the "deleted header file" problem.
Packit 57a33d
## The problem is that when a header file which appears in a .P file
Packit 57a33d
## is deleted, the dependency causes make to die (because there is
Packit 57a33d
## typically no way to rebuild the header).  We avoid this by adding
Packit 57a33d
## dummy dependencies for each header file.  Too bad gcc doesn't do
Packit 57a33d
## this for us directly.
Packit 57a33d
## Some versions of gcc put a space before the ':'.  On the theory
Packit 57a33d
## that the space means something, we add a space to the output as
Packit 57a33d
## well.  hp depmode also adds that space, but also prefixes the VPATH
Packit 57a33d
## to the object.  Take care to not repeat it in the output.
Packit 57a33d
## Some versions of the HPUX 10.20 sed can't process this invocation
Packit 57a33d
## correctly.  Breaking it into two sed invocations is a workaround.
Packit 57a33d
  tr ' ' "$nl" < "$tmpdepfile" \
Packit 57a33d
    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
Packit 57a33d
    | sed -e 's/$/ :/' >> "$depfile"
Packit 57a33d
  rm -f "$tmpdepfile"
Packit 57a33d
  ;;
Packit 57a33d
Packit 57a33d
hp)
Packit 57a33d
  # This case exists only to let depend.m4 do its work.  It works by
Packit 57a33d
  # looking at the text of this script.  This case will never be run,
Packit 57a33d
  # since it is checked for above.
Packit 57a33d
  exit 1
Packit 57a33d
  ;;
Packit 57a33d
Packit 57a33d
sgi)
Packit 57a33d
  if test "$libtool" = yes; then
Packit 57a33d
    "$@" "-Wp,-MDupdate,$tmpdepfile"
Packit 57a33d
  else
Packit 57a33d
    "$@" -MDupdate "$tmpdepfile"
Packit 57a33d
  fi
Packit 57a33d
  stat=$?
Packit 57a33d
  if test $stat -ne 0; then
Packit 57a33d
    rm -f "$tmpdepfile"
Packit 57a33d
    exit $stat
Packit 57a33d
  fi
Packit 57a33d
  rm -f "$depfile"
Packit 57a33d
Packit 57a33d
  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
Packit 57a33d
    echo "$object : \\" > "$depfile"
Packit 57a33d
    # Clip off the initial element (the dependent).  Don't try to be
Packit 57a33d
    # clever and replace this with sed code, as IRIX sed won't handle
Packit 57a33d
    # lines with more than a fixed number of characters (4096 in
Packit 57a33d
    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
Packit 57a33d
    # the IRIX cc adds comments like '#:fec' to the end of the
Packit 57a33d
    # dependency line.
Packit 57a33d
    tr ' ' "$nl" < "$tmpdepfile" \
Packit 57a33d
      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
Packit 57a33d
      | tr "$nl" ' ' >> "$depfile"
Packit 57a33d
    echo >> "$depfile"
Packit 57a33d
    # The second pass generates a dummy entry for each header file.
Packit 57a33d
    tr ' ' "$nl" < "$tmpdepfile" \
Packit 57a33d
      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
Packit 57a33d
      >> "$depfile"
Packit 57a33d
  else
Packit 57a33d
    make_dummy_depfile
Packit 57a33d
  fi
Packit 57a33d
  rm -f "$tmpdepfile"
Packit 57a33d
  ;;
Packit 57a33d
Packit 57a33d
xlc)
Packit 57a33d
  # This case exists only to let depend.m4 do its work.  It works by
Packit 57a33d
  # looking at the text of this script.  This case will never be run,
Packit 57a33d
  # since it is checked for above.
Packit 57a33d
  exit 1
Packit 57a33d
  ;;
Packit 57a33d
Packit 57a33d
aix)
Packit 57a33d
  # The C for AIX Compiler uses -M and outputs the dependencies
Packit 57a33d
  # in a .u file.  In older versions, this file always lives in the
Packit 57a33d
  # current directory.  Also, the AIX compiler puts '$object:' at the
Packit 57a33d
  # start of each line; $object doesn't have directory information.
Packit 57a33d
  # Version 6 uses the directory in both cases.
Packit 57a33d
  set_dir_from "$object"
Packit 57a33d
  set_base_from "$object"
Packit 57a33d
  if test "$libtool" = yes; then
Packit 57a33d
    tmpdepfile1=$dir$base.u
Packit 57a33d
    tmpdepfile2=$base.u
Packit 57a33d
    tmpdepfile3=$dir.libs/$base.u
Packit 57a33d
    "$@" -Wc,-M
Packit 57a33d
  else
Packit 57a33d
    tmpdepfile1=$dir$base.u
Packit 57a33d
    tmpdepfile2=$dir$base.u
Packit 57a33d
    tmpdepfile3=$dir$base.u
Packit 57a33d
    "$@" -M
Packit 57a33d
  fi
Packit 57a33d
  stat=$?
Packit 57a33d
  if test $stat -ne 0; then
Packit 57a33d
    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
Packit 57a33d
    exit $stat
Packit 57a33d
  fi
Packit 57a33d
Packit 57a33d
  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
Packit 57a33d
  do
Packit 57a33d
    test -f "$tmpdepfile" && break
Packit 57a33d
  done
Packit 57a33d
  aix_post_process_depfile
Packit 57a33d
  ;;
Packit 57a33d
Packit 57a33d
tcc)
Packit 57a33d
  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
Packit 57a33d
  # FIXME: That version still under development at the moment of writing.
Packit 57a33d
  #        Make that this statement remains true also for stable, released
Packit 57a33d
  #        versions.
Packit 57a33d
  # It will wrap lines (doesn't matter whether long or short) with a
Packit 57a33d
  # trailing '\', as in:
Packit 57a33d
  #
Packit 57a33d
  #   foo.o : \
Packit 57a33d
  #    foo.c \
Packit 57a33d
  #    foo.h \
Packit 57a33d
  #
Packit 57a33d
  # It will put a trailing '\' even on the last line, and will use leading
Packit 57a33d
  # spaces rather than leading tabs (at least since its commit 0394caf7
Packit 57a33d
  # "Emit spaces for -MD").
Packit 57a33d
  "$@" -MD -MF "$tmpdepfile"
Packit 57a33d
  stat=$?
Packit 57a33d
  if test $stat -ne 0; then
Packit 57a33d
    rm -f "$tmpdepfile"
Packit 57a33d
    exit $stat
Packit 57a33d
  fi
Packit 57a33d
  rm -f "$depfile"
Packit 57a33d
  # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
Packit 57a33d
  # We have to change lines of the first kind to '$object: \'.
Packit 57a33d
  sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
Packit 57a33d
  # And for each line of the second kind, we have to emit a 'dep.h:'
Packit 57a33d
  # dummy dependency, to avoid the deleted-header problem.
Packit 57a33d
  sed -n -e 's|^  *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
Packit 57a33d
  rm -f "$tmpdepfile"
Packit 57a33d
  ;;
Packit 57a33d
Packit 57a33d
## The order of this option in the case statement is important, since the
Packit 57a33d
## shell code in configure will try each of these formats in the order
Packit 57a33d
## listed in this file.  A plain '-MD' option would be understood by many
Packit 57a33d
## compilers, so we must ensure this comes after the gcc and icc options.
Packit 57a33d
pgcc)
Packit 57a33d
  # Portland's C compiler understands '-MD'.
Packit 57a33d
  # Will always output deps to 'file.d' where file is the root name of the
Packit 57a33d
  # source file under compilation, even if file resides in a subdirectory.
Packit 57a33d
  # The object file name does not affect the name of the '.d' file.
Packit 57a33d
  # pgcc 10.2 will output
Packit 57a33d
  #    foo.o: sub/foo.c sub/foo.h
Packit 57a33d
  # and will wrap long lines using '\' :
Packit 57a33d
  #    foo.o: sub/foo.c ... \
Packit 57a33d
  #     sub/foo.h ... \
Packit 57a33d
  #     ...
Packit 57a33d
  set_dir_from "$object"
Packit 57a33d
  # Use the source, not the object, to determine the base name, since
Packit 57a33d
  # that's sadly what pgcc will do too.
Packit 57a33d
  set_base_from "$source"
Packit 57a33d
  tmpdepfile=$base.d
Packit 57a33d
Packit 57a33d
  # For projects that build the same source file twice into different object
Packit 57a33d
  # files, the pgcc approach of using the *source* file root name can cause
Packit 57a33d
  # problems in parallel builds.  Use a locking strategy to avoid stomping on
Packit 57a33d
  # the same $tmpdepfile.
Packit 57a33d
  lockdir=$base.d-lock
Packit 57a33d
  trap "
Packit 57a33d
    echo '$0: caught signal, cleaning up...' >&2
Packit 57a33d
    rmdir '$lockdir'
Packit 57a33d
    exit 1
Packit 57a33d
  " 1 2 13 15
Packit 57a33d
  numtries=100
Packit 57a33d
  i=$numtries
Packit 57a33d
  while test $i -gt 0; do
Packit 57a33d
    # mkdir is a portable test-and-set.
Packit 57a33d
    if mkdir "$lockdir" 2>/dev/null; then
Packit 57a33d
      # This process acquired the lock.
Packit 57a33d
      "$@" -MD
Packit 57a33d
      stat=$?
Packit 57a33d
      # Release the lock.
Packit 57a33d
      rmdir "$lockdir"
Packit 57a33d
      break
Packit 57a33d
    else
Packit 57a33d
      # If the lock is being held by a different process, wait
Packit 57a33d
      # until the winning process is done or we timeout.
Packit 57a33d
      while test -d "$lockdir" && test $i -gt 0; do
Packit 57a33d
        sleep 1
Packit 57a33d
        i=`expr $i - 1`
Packit 57a33d
      done
Packit 57a33d
    fi
Packit 57a33d
    i=`expr $i - 1`
Packit 57a33d
  done
Packit 57a33d
  trap - 1 2 13 15
Packit 57a33d
  if test $i -le 0; then
Packit 57a33d
    echo "$0: failed to acquire lock after $numtries attempts" >&2
Packit 57a33d
    echo "$0: check lockdir '$lockdir'" >&2
Packit 57a33d
    exit 1
Packit 57a33d
  fi
Packit 57a33d
Packit 57a33d
  if test $stat -ne 0; then
Packit 57a33d
    rm -f "$tmpdepfile"
Packit 57a33d
    exit $stat
Packit 57a33d
  fi
Packit 57a33d
  rm -f "$depfile"
Packit 57a33d
  # Each line is of the form `foo.o: dependent.h',
Packit 57a33d
  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
Packit 57a33d
  # Do two passes, one to just change these to
Packit 57a33d
  # `$object: dependent.h' and one to simply `dependent.h:'.
Packit 57a33d
  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
Packit 57a33d
  # Some versions of the HPUX 10.20 sed can't process this invocation
Packit 57a33d
  # correctly.  Breaking it into two sed invocations is a workaround.
Packit 57a33d
  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
Packit 57a33d
    | sed -e 's/$/ :/' >> "$depfile"
Packit 57a33d
  rm -f "$tmpdepfile"
Packit 57a33d
  ;;
Packit 57a33d
Packit 57a33d
hp2)
Packit 57a33d
  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
Packit 57a33d
  # compilers, which have integrated preprocessors.  The correct option
Packit 57a33d
  # to use with these is +Maked; it writes dependencies to a file named
Packit 57a33d
  # 'foo.d', which lands next to the object file, wherever that
Packit 57a33d
  # happens to be.
Packit 57a33d
  # Much of this is similar to the tru64 case; see comments there.
Packit 57a33d
  set_dir_from  "$object"
Packit 57a33d
  set_base_from "$object"
Packit 57a33d
  if test "$libtool" = yes; then
Packit 57a33d
    tmpdepfile1=$dir$base.d
Packit 57a33d
    tmpdepfile2=$dir.libs/$base.d
Packit 57a33d
    "$@" -Wc,+Maked
Packit 57a33d
  else
Packit 57a33d
    tmpdepfile1=$dir$base.d
Packit 57a33d
    tmpdepfile2=$dir$base.d
Packit 57a33d
    "$@" +Maked
Packit 57a33d
  fi
Packit 57a33d
  stat=$?
Packit 57a33d
  if test $stat -ne 0; then
Packit 57a33d
     rm -f "$tmpdepfile1" "$tmpdepfile2"
Packit 57a33d
     exit $stat
Packit 57a33d
  fi
Packit 57a33d
Packit 57a33d
  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
Packit 57a33d
  do
Packit 57a33d
    test -f "$tmpdepfile" && break
Packit 57a33d
  done
Packit 57a33d
  if test -f "$tmpdepfile"; then
Packit 57a33d
    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
Packit 57a33d
    # Add 'dependent.h:' lines.
Packit 57a33d
    sed -ne '2,${
Packit 57a33d
               s/^ *//
Packit 57a33d
               s/ \\*$//
Packit 57a33d
               s/$/:/
Packit 57a33d
               p
Packit 57a33d
             }' "$tmpdepfile" >> "$depfile"
Packit 57a33d
  else
Packit 57a33d
    make_dummy_depfile
Packit 57a33d
  fi
Packit 57a33d
  rm -f "$tmpdepfile" "$tmpdepfile2"
Packit 57a33d
  ;;
Packit 57a33d
Packit 57a33d
tru64)
Packit 57a33d
  # The Tru64 compiler uses -MD to generate dependencies as a side
Packit 57a33d
  # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
Packit 57a33d
  # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
Packit 57a33d
  # dependencies in 'foo.d' instead, so we check for that too.
Packit 57a33d
  # Subdirectories are respected.
Packit 57a33d
  set_dir_from  "$object"
Packit 57a33d
  set_base_from "$object"
Packit 57a33d
Packit 57a33d
  if test "$libtool" = yes; then
Packit 57a33d
    # Libtool generates 2 separate objects for the 2 libraries.  These
Packit 57a33d
    # two compilations output dependencies in $dir.libs/$base.o.d and
Packit 57a33d
    # in $dir$base.o.d.  We have to check for both files, because
Packit 57a33d
    # one of the two compilations can be disabled.  We should prefer
Packit 57a33d
    # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
Packit 57a33d
    # automatically cleaned when .libs/ is deleted, while ignoring
Packit 57a33d
    # the former would cause a distcleancheck panic.
Packit 57a33d
    tmpdepfile1=$dir$base.o.d          # libtool 1.5
Packit 57a33d
    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.
Packit 57a33d
    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504
Packit 57a33d
    "$@" -Wc,-MD
Packit 57a33d
  else
Packit 57a33d
    tmpdepfile1=$dir$base.d
Packit 57a33d
    tmpdepfile2=$dir$base.d
Packit 57a33d
    tmpdepfile3=$dir$base.d
Packit 57a33d
    "$@" -MD
Packit 57a33d
  fi
Packit 57a33d
Packit 57a33d
  stat=$?
Packit 57a33d
  if test $stat -ne 0; then
Packit 57a33d
    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
Packit 57a33d
    exit $stat
Packit 57a33d
  fi
Packit 57a33d
Packit 57a33d
  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
Packit 57a33d
  do
Packit 57a33d
    test -f "$tmpdepfile" && break
Packit 57a33d
  done
Packit 57a33d
  # Same post-processing that is required for AIX mode.
Packit 57a33d
  aix_post_process_depfile
Packit 57a33d
  ;;
Packit 57a33d
Packit 57a33d
msvc7)
Packit 57a33d
  if test "$libtool" = yes; then
Packit 57a33d
    showIncludes=-Wc,-showIncludes
Packit 57a33d
  else
Packit 57a33d
    showIncludes=-showIncludes
Packit 57a33d
  fi
Packit 57a33d
  "$@" $showIncludes > "$tmpdepfile"
Packit 57a33d
  stat=$?
Packit 57a33d
  grep -v '^Note: including file: ' "$tmpdepfile"
Packit 57a33d
  if test $stat -ne 0; then
Packit 57a33d
    rm -f "$tmpdepfile"
Packit 57a33d
    exit $stat
Packit 57a33d
  fi
Packit 57a33d
  rm -f "$depfile"
Packit 57a33d
  echo "$object : \\" > "$depfile"
Packit 57a33d
  # The first sed program below extracts the file names and escapes
Packit 57a33d
  # backslashes for cygpath.  The second sed program outputs the file
Packit 57a33d
  # name when reading, but also accumulates all include files in the
Packit 57a33d
  # hold buffer in order to output them again at the end.  This only
Packit 57a33d
  # works with sed implementations that can handle large buffers.
Packit 57a33d
  sed < "$tmpdepfile" -n '
Packit 57a33d
/^Note: including file:  *\(.*\)/ {
Packit 57a33d
  s//\1/
Packit 57a33d
  s/\\/\\\\/g
Packit 57a33d
  p
Packit 57a33d
}' | $cygpath_u | sort -u | sed -n '
Packit 57a33d
s/ /\\ /g
Packit 57a33d
s/\(.*\)/'"$tab"'\1 \\/p
Packit 57a33d
s/.\(.*\) \\/\1:/
Packit 57a33d
H
Packit 57a33d
$ {
Packit 57a33d
  s/.*/'"$tab"'/
Packit 57a33d
  G
Packit 57a33d
  p
Packit 57a33d
}' >> "$depfile"
Packit 57a33d
  echo >> "$depfile" # make sure the fragment doesn't end with a backslash
Packit 57a33d
  rm -f "$tmpdepfile"
Packit 57a33d
  ;;
Packit 57a33d
Packit 57a33d
msvc7msys)
Packit 57a33d
  # This case exists only to let depend.m4 do its work.  It works by
Packit 57a33d
  # looking at the text of this script.  This case will never be run,
Packit 57a33d
  # since it is checked for above.
Packit 57a33d
  exit 1
Packit 57a33d
  ;;
Packit 57a33d
Packit 57a33d
#nosideeffect)
Packit 57a33d
  # This comment above is used by automake to tell side-effect
Packit 57a33d
  # dependency tracking mechanisms from slower ones.
Packit 57a33d
Packit 57a33d
dashmstdout)
Packit 57a33d
  # Important note: in order to support this mode, a compiler *must*
Packit 57a33d
  # always write the preprocessed file to stdout, regardless of -o.
Packit 57a33d
  "$@" || exit $?
Packit 57a33d
Packit 57a33d
  # Remove the call to Libtool.
Packit 57a33d
  if test "$libtool" = yes; then
Packit 57a33d
    while test "X$1" != 'X--mode=compile'; do
Packit 57a33d
      shift
Packit 57a33d
    done
Packit 57a33d
    shift
Packit 57a33d
  fi
Packit 57a33d
Packit 57a33d
  # Remove '-o $object'.
Packit 57a33d
  IFS=" "
Packit 57a33d
  for arg
Packit 57a33d
  do
Packit 57a33d
    case $arg in
Packit 57a33d
    -o)
Packit 57a33d
      shift
Packit 57a33d
      ;;
Packit 57a33d
    $object)
Packit 57a33d
      shift
Packit 57a33d
      ;;
Packit 57a33d
    *)
Packit 57a33d
      set fnord "$@" "$arg"
Packit 57a33d
      shift # fnord
Packit 57a33d
      shift # $arg
Packit 57a33d
      ;;
Packit 57a33d
    esac
Packit 57a33d
  done
Packit 57a33d
Packit 57a33d
  test -z "$dashmflag" && dashmflag=-M
Packit 57a33d
  # Require at least two characters before searching for ':'
Packit 57a33d
  # in the target name.  This is to cope with DOS-style filenames:
Packit 57a33d
  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
Packit 57a33d
  "$@" $dashmflag |
Packit 57a33d
    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
Packit 57a33d
  rm -f "$depfile"
Packit 57a33d
  cat < "$tmpdepfile" > "$depfile"
Packit 57a33d
  # Some versions of the HPUX 10.20 sed can't process this sed invocation
Packit 57a33d
  # correctly.  Breaking it into two sed invocations is a workaround.
Packit 57a33d
  tr ' ' "$nl" < "$tmpdepfile" \
Packit 57a33d
    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
Packit 57a33d
    | sed -e 's/$/ :/' >> "$depfile"
Packit 57a33d
  rm -f "$tmpdepfile"
Packit 57a33d
  ;;
Packit 57a33d
Packit 57a33d
dashXmstdout)
Packit 57a33d
  # This case only exists to satisfy depend.m4.  It is never actually
Packit 57a33d
  # run, as this mode is specially recognized in the preamble.
Packit 57a33d
  exit 1
Packit 57a33d
  ;;
Packit 57a33d
Packit 57a33d
makedepend)
Packit 57a33d
  "$@" || exit $?
Packit 57a33d
  # Remove any Libtool call
Packit 57a33d
  if test "$libtool" = yes; then
Packit 57a33d
    while test "X$1" != 'X--mode=compile'; do
Packit 57a33d
      shift
Packit 57a33d
    done
Packit 57a33d
    shift
Packit 57a33d
  fi
Packit 57a33d
  # X makedepend
Packit 57a33d
  shift
Packit 57a33d
  cleared=no eat=no
Packit 57a33d
  for arg
Packit 57a33d
  do
Packit 57a33d
    case $cleared in
Packit 57a33d
    no)
Packit 57a33d
      set ""; shift
Packit 57a33d
      cleared=yes ;;
Packit 57a33d
    esac
Packit 57a33d
    if test $eat = yes; then
Packit 57a33d
      eat=no
Packit 57a33d
      continue
Packit 57a33d
    fi
Packit 57a33d
    case "$arg" in
Packit 57a33d
    -D*|-I*)
Packit 57a33d
      set fnord "$@" "$arg"; shift ;;
Packit 57a33d
    # Strip any option that makedepend may not understand.  Remove
Packit 57a33d
    # the object too, otherwise makedepend will parse it as a source file.
Packit 57a33d
    -arch)
Packit 57a33d
      eat=yes ;;
Packit 57a33d
    -*|$object)
Packit 57a33d
      ;;
Packit 57a33d
    *)
Packit 57a33d
      set fnord "$@" "$arg"; shift ;;
Packit 57a33d
    esac
Packit 57a33d
  done
Packit 57a33d
  obj_suffix=`echo "$object" | sed 's/^.*\././'`
Packit 57a33d
  touch "$tmpdepfile"
Packit 57a33d
  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
Packit 57a33d
  rm -f "$depfile"
Packit 57a33d
  # makedepend may prepend the VPATH from the source file name to the object.
Packit 57a33d
  # No need to regex-escape $object, excess matching of '.' is harmless.
Packit 57a33d
  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
Packit 57a33d
  # Some versions of the HPUX 10.20 sed can't process the last invocation
Packit 57a33d
  # correctly.  Breaking it into two sed invocations is a workaround.
Packit 57a33d
  sed '1,2d' "$tmpdepfile" \
Packit 57a33d
    | tr ' ' "$nl" \
Packit 57a33d
    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
Packit 57a33d
    | sed -e 's/$/ :/' >> "$depfile"
Packit 57a33d
  rm -f "$tmpdepfile" "$tmpdepfile".bak
Packit 57a33d
  ;;
Packit 57a33d
Packit 57a33d
cpp)
Packit 57a33d
  # Important note: in order to support this mode, a compiler *must*
Packit 57a33d
  # always write the preprocessed file to stdout.
Packit 57a33d
  "$@" || exit $?
Packit 57a33d
Packit 57a33d
  # Remove the call to Libtool.
Packit 57a33d
  if test "$libtool" = yes; then
Packit 57a33d
    while test "X$1" != 'X--mode=compile'; do
Packit 57a33d
      shift
Packit 57a33d
    done
Packit 57a33d
    shift
Packit 57a33d
  fi
Packit 57a33d
Packit 57a33d
  # Remove '-o $object'.
Packit 57a33d
  IFS=" "
Packit 57a33d
  for arg
Packit 57a33d
  do
Packit 57a33d
    case $arg in
Packit 57a33d
    -o)
Packit 57a33d
      shift
Packit 57a33d
      ;;
Packit 57a33d
    $object)
Packit 57a33d
      shift
Packit 57a33d
      ;;
Packit 57a33d
    *)
Packit 57a33d
      set fnord "$@" "$arg"
Packit 57a33d
      shift # fnord
Packit 57a33d
      shift # $arg
Packit 57a33d
      ;;
Packit 57a33d
    esac
Packit 57a33d
  done
Packit 57a33d
Packit 57a33d
  "$@" -E \
Packit 57a33d
    | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
Packit 57a33d
             -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
Packit 57a33d
    | sed '$ s: \\$::' > "$tmpdepfile"
Packit 57a33d
  rm -f "$depfile"
Packit 57a33d
  echo "$object : \\" > "$depfile"
Packit 57a33d
  cat < "$tmpdepfile" >> "$depfile"
Packit 57a33d
  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
Packit 57a33d
  rm -f "$tmpdepfile"
Packit 57a33d
  ;;
Packit 57a33d
Packit 57a33d
msvisualcpp)
Packit 57a33d
  # Important note: in order to support this mode, a compiler *must*
Packit 57a33d
  # always write the preprocessed file to stdout.
Packit 57a33d
  "$@" || exit $?
Packit 57a33d
Packit 57a33d
  # Remove the call to Libtool.
Packit 57a33d
  if test "$libtool" = yes; then
Packit 57a33d
    while test "X$1" != 'X--mode=compile'; do
Packit 57a33d
      shift
Packit 57a33d
    done
Packit 57a33d
    shift
Packit 57a33d
  fi
Packit 57a33d
Packit 57a33d
  IFS=" "
Packit 57a33d
  for arg
Packit 57a33d
  do
Packit 57a33d
    case "$arg" in
Packit 57a33d
    -o)
Packit 57a33d
      shift
Packit 57a33d
      ;;
Packit 57a33d
    $object)
Packit 57a33d
      shift
Packit 57a33d
      ;;
Packit 57a33d
    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
Packit 57a33d
        set fnord "$@"
Packit 57a33d
        shift
Packit 57a33d
        shift
Packit 57a33d
        ;;
Packit 57a33d
    *)
Packit 57a33d
        set fnord "$@" "$arg"
Packit 57a33d
        shift
Packit 57a33d
        shift
Packit 57a33d
        ;;
Packit 57a33d
    esac
Packit 57a33d
  done
Packit 57a33d
  "$@" -E 2>/dev/null |
Packit 57a33d
  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
Packit 57a33d
  rm -f "$depfile"
Packit 57a33d
  echo "$object : \\" > "$depfile"
Packit 57a33d
  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
Packit 57a33d
  echo "$tab" >> "$depfile"
Packit 57a33d
  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
Packit 57a33d
  rm -f "$tmpdepfile"
Packit 57a33d
  ;;
Packit 57a33d
Packit 57a33d
msvcmsys)
Packit 57a33d
  # This case exists only to let depend.m4 do its work.  It works by
Packit 57a33d
  # looking at the text of this script.  This case will never be run,
Packit 57a33d
  # since it is checked for above.
Packit 57a33d
  exit 1
Packit 57a33d
  ;;
Packit 57a33d
Packit 57a33d
none)
Packit 57a33d
  exec "$@"
Packit 57a33d
  ;;
Packit 57a33d
Packit 57a33d
*)
Packit 57a33d
  echo "Unknown depmode $depmode" 1>&2
Packit 57a33d
  exit 1
Packit 57a33d
  ;;
Packit 57a33d
esac
Packit 57a33d
Packit 57a33d
exit 0
Packit 57a33d
Packit 57a33d
# Local Variables:
Packit 57a33d
# mode: shell-script
Packit 57a33d
# sh-indentation: 2
Packit 57a33d
# eval: (add-hook 'write-file-hooks 'time-stamp)
Packit 57a33d
# time-stamp-start: "scriptversion="
Packit 57a33d
# time-stamp-format: "%:y-%02m-%02d.%02H"
Packit 57a33d
# time-stamp-time-zone: "UTC"
Packit 57a33d
# time-stamp-end: "; # UTC"
Packit 57a33d
# End: