Blame isl-0.14/depcomp

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