Blame depcomp

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