Blame depcomp

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