Blame depcomp

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