Blame depcomp

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