Blame depcomp

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