Blame config/depcomp

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