Blame depcomp

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