depcomp revision 55de1df9
155de1df9Smrg#! /bin/sh
255de1df9Smrg# depcomp - compile a program generating dependencies as side-effects
355de1df9Smrg
455de1df9Smrgscriptversion=2009-04-28.21; # UTC
555de1df9Smrg
655de1df9Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
755de1df9Smrg# Software Foundation, Inc.
855de1df9Smrg
955de1df9Smrg# This program is free software; you can redistribute it and/or modify
1055de1df9Smrg# it under the terms of the GNU General Public License as published by
1155de1df9Smrg# the Free Software Foundation; either version 2, or (at your option)
1255de1df9Smrg# any later version.
1355de1df9Smrg
1455de1df9Smrg# This program is distributed in the hope that it will be useful,
1555de1df9Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
1655de1df9Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1755de1df9Smrg# GNU General Public License for more details.
1855de1df9Smrg
1955de1df9Smrg# You should have received a copy of the GNU General Public License
2055de1df9Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
2155de1df9Smrg
2255de1df9Smrg# As a special exception to the GNU General Public License, if you
2355de1df9Smrg# distribute this file as part of a program that contains a
2455de1df9Smrg# configuration script generated by Autoconf, you may include it under
2555de1df9Smrg# the same distribution terms that you use for the rest of that program.
2655de1df9Smrg
2755de1df9Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
2855de1df9Smrg
2955de1df9Smrgcase $1 in
3055de1df9Smrg  '')
3155de1df9Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
3255de1df9Smrg     exit 1;
3355de1df9Smrg     ;;
3455de1df9Smrg  -h | --h*)
3555de1df9Smrg    cat <<\EOF
3655de1df9SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
3755de1df9Smrg
3855de1df9SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
3955de1df9Smrgas side-effects.
4055de1df9Smrg
4155de1df9SmrgEnvironment variables:
4255de1df9Smrg  depmode     Dependency tracking mode.
4355de1df9Smrg  source      Source file read by `PROGRAMS ARGS'.
4455de1df9Smrg  object      Object file output by `PROGRAMS ARGS'.
4555de1df9Smrg  DEPDIR      directory where to store dependencies.
4655de1df9Smrg  depfile     Dependency file to output.
4755de1df9Smrg  tmpdepfile  Temporary file to use when outputing dependencies.
4855de1df9Smrg  libtool     Whether libtool is used (yes/no).
4955de1df9Smrg
5055de1df9SmrgReport bugs to <bug-automake@gnu.org>.
5155de1df9SmrgEOF
5255de1df9Smrg    exit $?
5355de1df9Smrg    ;;
5455de1df9Smrg  -v | --v*)
5555de1df9Smrg    echo "depcomp $scriptversion"
5655de1df9Smrg    exit $?
5755de1df9Smrg    ;;
5855de1df9Smrgesac
5955de1df9Smrg
6055de1df9Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
6155de1df9Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
6255de1df9Smrg  exit 1
6355de1df9Smrgfi
6455de1df9Smrg
6555de1df9Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
6655de1df9Smrgdepfile=${depfile-`echo "$object" |
6755de1df9Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
6855de1df9Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
6955de1df9Smrg
7055de1df9Smrgrm -f "$tmpdepfile"
7155de1df9Smrg
7255de1df9Smrg# Some modes work just like other modes, but use different flags.  We
7355de1df9Smrg# parameterize here, but still list the modes in the big case below,
7455de1df9Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
7555de1df9Smrg# here, because this file can only contain one case statement.
7655de1df9Smrgif test "$depmode" = hp; then
7755de1df9Smrg  # HP compiler uses -M and no extra arg.
7855de1df9Smrg  gccflag=-M
7955de1df9Smrg  depmode=gcc
8055de1df9Smrgfi
8155de1df9Smrg
8255de1df9Smrgif test "$depmode" = dashXmstdout; then
8355de1df9Smrg   # This is just like dashmstdout with a different argument.
8455de1df9Smrg   dashmflag=-xM
8555de1df9Smrg   depmode=dashmstdout
8655de1df9Smrgfi
8755de1df9Smrg
8855de1df9Smrgcygpath_u="cygpath -u -f -"
8955de1df9Smrgif test "$depmode" = msvcmsys; then
9055de1df9Smrg   # This is just like msvisualcpp but w/o cygpath translation.
9155de1df9Smrg   # Just convert the backslash-escaped backslashes to single forward
9255de1df9Smrg   # slashes to satisfy depend.m4
9355de1df9Smrg   cygpath_u="sed s,\\\\\\\\,/,g"
9455de1df9Smrg   depmode=msvisualcpp
9555de1df9Smrgfi
9655de1df9Smrg
9755de1df9Smrgcase "$depmode" in
9855de1df9Smrggcc3)
9955de1df9Smrg## gcc 3 implements dependency tracking that does exactly what
10055de1df9Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
10155de1df9Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
10255de1df9Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
10355de1df9Smrg## the command line argument order; so add the flags where they
10455de1df9Smrg## appear in depend2.am.  Note that the slowdown incurred here
10555de1df9Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
10655de1df9Smrg  for arg
10755de1df9Smrg  do
10855de1df9Smrg    case $arg in
10955de1df9Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
11055de1df9Smrg    *)  set fnord "$@" "$arg" ;;
11155de1df9Smrg    esac
11255de1df9Smrg    shift # fnord
11355de1df9Smrg    shift # $arg
11455de1df9Smrg  done
11555de1df9Smrg  "$@"
11655de1df9Smrg  stat=$?
11755de1df9Smrg  if test $stat -eq 0; then :
11855de1df9Smrg  else
11955de1df9Smrg    rm -f "$tmpdepfile"
12055de1df9Smrg    exit $stat
12155de1df9Smrg  fi
12255de1df9Smrg  mv "$tmpdepfile" "$depfile"
12355de1df9Smrg  ;;
12455de1df9Smrg
12555de1df9Smrggcc)
12655de1df9Smrg## There are various ways to get dependency output from gcc.  Here's
12755de1df9Smrg## why we pick this rather obscure method:
12855de1df9Smrg## - Don't want to use -MD because we'd like the dependencies to end
12955de1df9Smrg##   up in a subdir.  Having to rename by hand is ugly.
13055de1df9Smrg##   (We might end up doing this anyway to support other compilers.)
13155de1df9Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
13255de1df9Smrg##   -MM, not -M (despite what the docs say).
13355de1df9Smrg## - Using -M directly means running the compiler twice (even worse
13455de1df9Smrg##   than renaming).
13555de1df9Smrg  if test -z "$gccflag"; then
13655de1df9Smrg    gccflag=-MD,
13755de1df9Smrg  fi
13855de1df9Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
13955de1df9Smrg  stat=$?
14055de1df9Smrg  if test $stat -eq 0; then :
14155de1df9Smrg  else
14255de1df9Smrg    rm -f "$tmpdepfile"
14355de1df9Smrg    exit $stat
14455de1df9Smrg  fi
14555de1df9Smrg  rm -f "$depfile"
14655de1df9Smrg  echo "$object : \\" > "$depfile"
14755de1df9Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
14855de1df9Smrg## The second -e expression handles DOS-style file names with drive letters.
14955de1df9Smrg  sed -e 's/^[^:]*: / /' \
15055de1df9Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
15155de1df9Smrg## This next piece of magic avoids the `deleted header file' problem.
15255de1df9Smrg## The problem is that when a header file which appears in a .P file
15355de1df9Smrg## is deleted, the dependency causes make to die (because there is
15455de1df9Smrg## typically no way to rebuild the header).  We avoid this by adding
15555de1df9Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
15655de1df9Smrg## this for us directly.
15755de1df9Smrg  tr ' ' '
15855de1df9Smrg' < "$tmpdepfile" |
15955de1df9Smrg## Some versions of gcc put a space before the `:'.  On the theory
16055de1df9Smrg## that the space means something, we add a space to the output as
16155de1df9Smrg## well.
16255de1df9Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
16355de1df9Smrg## correctly.  Breaking it into two sed invocations is a workaround.
16455de1df9Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
16555de1df9Smrg  rm -f "$tmpdepfile"
16655de1df9Smrg  ;;
16755de1df9Smrg
16855de1df9Smrghp)
16955de1df9Smrg  # This case exists only to let depend.m4 do its work.  It works by
17055de1df9Smrg  # looking at the text of this script.  This case will never be run,
17155de1df9Smrg  # since it is checked for above.
17255de1df9Smrg  exit 1
17355de1df9Smrg  ;;
17455de1df9Smrg
17555de1df9Smrgsgi)
17655de1df9Smrg  if test "$libtool" = yes; then
17755de1df9Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
17855de1df9Smrg  else
17955de1df9Smrg    "$@" -MDupdate "$tmpdepfile"
18055de1df9Smrg  fi
18155de1df9Smrg  stat=$?
18255de1df9Smrg  if test $stat -eq 0; then :
18355de1df9Smrg  else
18455de1df9Smrg    rm -f "$tmpdepfile"
18555de1df9Smrg    exit $stat
18655de1df9Smrg  fi
18755de1df9Smrg  rm -f "$depfile"
18855de1df9Smrg
18955de1df9Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
19055de1df9Smrg    echo "$object : \\" > "$depfile"
19155de1df9Smrg
19255de1df9Smrg    # Clip off the initial element (the dependent).  Don't try to be
19355de1df9Smrg    # clever and replace this with sed code, as IRIX sed won't handle
19455de1df9Smrg    # lines with more than a fixed number of characters (4096 in
19555de1df9Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
19655de1df9Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
19755de1df9Smrg    # dependency line.
19855de1df9Smrg    tr ' ' '
19955de1df9Smrg' < "$tmpdepfile" \
20055de1df9Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
20155de1df9Smrg    tr '
20255de1df9Smrg' ' ' >> "$depfile"
20355de1df9Smrg    echo >> "$depfile"
20455de1df9Smrg
20555de1df9Smrg    # The second pass generates a dummy entry for each header file.
20655de1df9Smrg    tr ' ' '
20755de1df9Smrg' < "$tmpdepfile" \
20855de1df9Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
20955de1df9Smrg   >> "$depfile"
21055de1df9Smrg  else
21155de1df9Smrg    # The sourcefile does not contain any dependencies, so just
21255de1df9Smrg    # store a dummy comment line, to avoid errors with the Makefile
21355de1df9Smrg    # "include basename.Plo" scheme.
21455de1df9Smrg    echo "#dummy" > "$depfile"
21555de1df9Smrg  fi
21655de1df9Smrg  rm -f "$tmpdepfile"
21755de1df9Smrg  ;;
21855de1df9Smrg
21955de1df9Smrgaix)
22055de1df9Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
22155de1df9Smrg  # in a .u file.  In older versions, this file always lives in the
22255de1df9Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
22355de1df9Smrg  # start of each line; $object doesn't have directory information.
22455de1df9Smrg  # Version 6 uses the directory in both cases.
22555de1df9Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
22655de1df9Smrg  test "x$dir" = "x$object" && dir=
22755de1df9Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
22855de1df9Smrg  if test "$libtool" = yes; then
22955de1df9Smrg    tmpdepfile1=$dir$base.u
23055de1df9Smrg    tmpdepfile2=$base.u
23155de1df9Smrg    tmpdepfile3=$dir.libs/$base.u
23255de1df9Smrg    "$@" -Wc,-M
23355de1df9Smrg  else
23455de1df9Smrg    tmpdepfile1=$dir$base.u
23555de1df9Smrg    tmpdepfile2=$dir$base.u
23655de1df9Smrg    tmpdepfile3=$dir$base.u
23755de1df9Smrg    "$@" -M
23855de1df9Smrg  fi
23955de1df9Smrg  stat=$?
24055de1df9Smrg
24155de1df9Smrg  if test $stat -eq 0; then :
24255de1df9Smrg  else
24355de1df9Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
24455de1df9Smrg    exit $stat
24555de1df9Smrg  fi
24655de1df9Smrg
24755de1df9Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
24855de1df9Smrg  do
24955de1df9Smrg    test -f "$tmpdepfile" && break
25055de1df9Smrg  done
25155de1df9Smrg  if test -f "$tmpdepfile"; then
25255de1df9Smrg    # Each line is of the form `foo.o: dependent.h'.
25355de1df9Smrg    # Do two passes, one to just change these to
25455de1df9Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
25555de1df9Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
25655de1df9Smrg    # That's a tab and a space in the [].
25755de1df9Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
25855de1df9Smrg  else
25955de1df9Smrg    # The sourcefile does not contain any dependencies, so just
26055de1df9Smrg    # store a dummy comment line, to avoid errors with the Makefile
26155de1df9Smrg    # "include basename.Plo" scheme.
26255de1df9Smrg    echo "#dummy" > "$depfile"
26355de1df9Smrg  fi
26455de1df9Smrg  rm -f "$tmpdepfile"
26555de1df9Smrg  ;;
26655de1df9Smrg
26755de1df9Smrgicc)
26855de1df9Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
26955de1df9Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
27055de1df9Smrg  # ICC 7.0 will fill foo.d with something like
27155de1df9Smrg  #    foo.o: sub/foo.c
27255de1df9Smrg  #    foo.o: sub/foo.h
27355de1df9Smrg  # which is wrong.  We want:
27455de1df9Smrg  #    sub/foo.o: sub/foo.c
27555de1df9Smrg  #    sub/foo.o: sub/foo.h
27655de1df9Smrg  #    sub/foo.c:
27755de1df9Smrg  #    sub/foo.h:
27855de1df9Smrg  # ICC 7.1 will output
27955de1df9Smrg  #    foo.o: sub/foo.c sub/foo.h
28055de1df9Smrg  # and will wrap long lines using \ :
28155de1df9Smrg  #    foo.o: sub/foo.c ... \
28255de1df9Smrg  #     sub/foo.h ... \
28355de1df9Smrg  #     ...
28455de1df9Smrg
28555de1df9Smrg  "$@" -MD -MF "$tmpdepfile"
28655de1df9Smrg  stat=$?
28755de1df9Smrg  if test $stat -eq 0; then :
28855de1df9Smrg  else
28955de1df9Smrg    rm -f "$tmpdepfile"
29055de1df9Smrg    exit $stat
29155de1df9Smrg  fi
29255de1df9Smrg  rm -f "$depfile"
29355de1df9Smrg  # Each line is of the form `foo.o: dependent.h',
29455de1df9Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
29555de1df9Smrg  # Do two passes, one to just change these to
29655de1df9Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
29755de1df9Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
29855de1df9Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
29955de1df9Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
30055de1df9Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
30155de1df9Smrg    sed -e 's/$/ :/' >> "$depfile"
30255de1df9Smrg  rm -f "$tmpdepfile"
30355de1df9Smrg  ;;
30455de1df9Smrg
30555de1df9Smrghp2)
30655de1df9Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
30755de1df9Smrg  # compilers, which have integrated preprocessors.  The correct option
30855de1df9Smrg  # to use with these is +Maked; it writes dependencies to a file named
30955de1df9Smrg  # 'foo.d', which lands next to the object file, wherever that
31055de1df9Smrg  # happens to be.
31155de1df9Smrg  # Much of this is similar to the tru64 case; see comments there.
31255de1df9Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
31355de1df9Smrg  test "x$dir" = "x$object" && dir=
31455de1df9Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
31555de1df9Smrg  if test "$libtool" = yes; then
31655de1df9Smrg    tmpdepfile1=$dir$base.d
31755de1df9Smrg    tmpdepfile2=$dir.libs/$base.d
31855de1df9Smrg    "$@" -Wc,+Maked
31955de1df9Smrg  else
32055de1df9Smrg    tmpdepfile1=$dir$base.d
32155de1df9Smrg    tmpdepfile2=$dir$base.d
32255de1df9Smrg    "$@" +Maked
32355de1df9Smrg  fi
32455de1df9Smrg  stat=$?
32555de1df9Smrg  if test $stat -eq 0; then :
32655de1df9Smrg  else
32755de1df9Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
32855de1df9Smrg     exit $stat
32955de1df9Smrg  fi
33055de1df9Smrg
33155de1df9Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
33255de1df9Smrg  do
33355de1df9Smrg    test -f "$tmpdepfile" && break
33455de1df9Smrg  done
33555de1df9Smrg  if test -f "$tmpdepfile"; then
33655de1df9Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
33755de1df9Smrg    # Add `dependent.h:' lines.
33855de1df9Smrg    sed -ne '2,${
33955de1df9Smrg	       s/^ *//
34055de1df9Smrg	       s/ \\*$//
34155de1df9Smrg	       s/$/:/
34255de1df9Smrg	       p
34355de1df9Smrg	     }' "$tmpdepfile" >> "$depfile"
34455de1df9Smrg  else
34555de1df9Smrg    echo "#dummy" > "$depfile"
34655de1df9Smrg  fi
34755de1df9Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
34855de1df9Smrg  ;;
34955de1df9Smrg
35055de1df9Smrgtru64)
35155de1df9Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
35255de1df9Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
35355de1df9Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
35455de1df9Smrg   # dependencies in `foo.d' instead, so we check for that too.
35555de1df9Smrg   # Subdirectories are respected.
35655de1df9Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
35755de1df9Smrg   test "x$dir" = "x$object" && dir=
35855de1df9Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
35955de1df9Smrg
36055de1df9Smrg   if test "$libtool" = yes; then
36155de1df9Smrg      # With Tru64 cc, shared objects can also be used to make a
36255de1df9Smrg      # static library.  This mechanism is used in libtool 1.4 series to
36355de1df9Smrg      # handle both shared and static libraries in a single compilation.
36455de1df9Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
36555de1df9Smrg      #
36655de1df9Smrg      # With libtool 1.5 this exception was removed, and libtool now
36755de1df9Smrg      # generates 2 separate objects for the 2 libraries.  These two
36855de1df9Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
36955de1df9Smrg      # in $dir$base.o.d.  We have to check for both files, because
37055de1df9Smrg      # one of the two compilations can be disabled.  We should prefer
37155de1df9Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
37255de1df9Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
37355de1df9Smrg      # the former would cause a distcleancheck panic.
37455de1df9Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
37555de1df9Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
37655de1df9Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
37755de1df9Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
37855de1df9Smrg      "$@" -Wc,-MD
37955de1df9Smrg   else
38055de1df9Smrg      tmpdepfile1=$dir$base.o.d
38155de1df9Smrg      tmpdepfile2=$dir$base.d
38255de1df9Smrg      tmpdepfile3=$dir$base.d
38355de1df9Smrg      tmpdepfile4=$dir$base.d
38455de1df9Smrg      "$@" -MD
38555de1df9Smrg   fi
38655de1df9Smrg
38755de1df9Smrg   stat=$?
38855de1df9Smrg   if test $stat -eq 0; then :
38955de1df9Smrg   else
39055de1df9Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
39155de1df9Smrg      exit $stat
39255de1df9Smrg   fi
39355de1df9Smrg
39455de1df9Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
39555de1df9Smrg   do
39655de1df9Smrg     test -f "$tmpdepfile" && break
39755de1df9Smrg   done
39855de1df9Smrg   if test -f "$tmpdepfile"; then
39955de1df9Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
40055de1df9Smrg      # That's a tab and a space in the [].
40155de1df9Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
40255de1df9Smrg   else
40355de1df9Smrg      echo "#dummy" > "$depfile"
40455de1df9Smrg   fi
40555de1df9Smrg   rm -f "$tmpdepfile"
40655de1df9Smrg   ;;
40755de1df9Smrg
40855de1df9Smrg#nosideeffect)
40955de1df9Smrg  # This comment above is used by automake to tell side-effect
41055de1df9Smrg  # dependency tracking mechanisms from slower ones.
41155de1df9Smrg
41255de1df9Smrgdashmstdout)
41355de1df9Smrg  # Important note: in order to support this mode, a compiler *must*
41455de1df9Smrg  # always write the preprocessed file to stdout, regardless of -o.
41555de1df9Smrg  "$@" || exit $?
41655de1df9Smrg
41755de1df9Smrg  # Remove the call to Libtool.
41855de1df9Smrg  if test "$libtool" = yes; then
41955de1df9Smrg    while test "X$1" != 'X--mode=compile'; do
42055de1df9Smrg      shift
42155de1df9Smrg    done
42255de1df9Smrg    shift
42355de1df9Smrg  fi
42455de1df9Smrg
42555de1df9Smrg  # Remove `-o $object'.
42655de1df9Smrg  IFS=" "
42755de1df9Smrg  for arg
42855de1df9Smrg  do
42955de1df9Smrg    case $arg in
43055de1df9Smrg    -o)
43155de1df9Smrg      shift
43255de1df9Smrg      ;;
43355de1df9Smrg    $object)
43455de1df9Smrg      shift
43555de1df9Smrg      ;;
43655de1df9Smrg    *)
43755de1df9Smrg      set fnord "$@" "$arg"
43855de1df9Smrg      shift # fnord
43955de1df9Smrg      shift # $arg
44055de1df9Smrg      ;;
44155de1df9Smrg    esac
44255de1df9Smrg  done
44355de1df9Smrg
44455de1df9Smrg  test -z "$dashmflag" && dashmflag=-M
44555de1df9Smrg  # Require at least two characters before searching for `:'
44655de1df9Smrg  # in the target name.  This is to cope with DOS-style filenames:
44755de1df9Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
44855de1df9Smrg  "$@" $dashmflag |
44955de1df9Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
45055de1df9Smrg  rm -f "$depfile"
45155de1df9Smrg  cat < "$tmpdepfile" > "$depfile"
45255de1df9Smrg  tr ' ' '
45355de1df9Smrg' < "$tmpdepfile" | \
45455de1df9Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
45555de1df9Smrg## correctly.  Breaking it into two sed invocations is a workaround.
45655de1df9Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
45755de1df9Smrg  rm -f "$tmpdepfile"
45855de1df9Smrg  ;;
45955de1df9Smrg
46055de1df9SmrgdashXmstdout)
46155de1df9Smrg  # This case only exists to satisfy depend.m4.  It is never actually
46255de1df9Smrg  # run, as this mode is specially recognized in the preamble.
46355de1df9Smrg  exit 1
46455de1df9Smrg  ;;
46555de1df9Smrg
46655de1df9Smrgmakedepend)
46755de1df9Smrg  "$@" || exit $?
46855de1df9Smrg  # Remove any Libtool call
46955de1df9Smrg  if test "$libtool" = yes; then
47055de1df9Smrg    while test "X$1" != 'X--mode=compile'; do
47155de1df9Smrg      shift
47255de1df9Smrg    done
47355de1df9Smrg    shift
47455de1df9Smrg  fi
47555de1df9Smrg  # X makedepend
47655de1df9Smrg  shift
47755de1df9Smrg  cleared=no eat=no
47855de1df9Smrg  for arg
47955de1df9Smrg  do
48055de1df9Smrg    case $cleared in
48155de1df9Smrg    no)
48255de1df9Smrg      set ""; shift
48355de1df9Smrg      cleared=yes ;;
48455de1df9Smrg    esac
48555de1df9Smrg    if test $eat = yes; then
48655de1df9Smrg      eat=no
48755de1df9Smrg      continue
48855de1df9Smrg    fi
48955de1df9Smrg    case "$arg" in
49055de1df9Smrg    -D*|-I*)
49155de1df9Smrg      set fnord "$@" "$arg"; shift ;;
49255de1df9Smrg    # Strip any option that makedepend may not understand.  Remove
49355de1df9Smrg    # the object too, otherwise makedepend will parse it as a source file.
49455de1df9Smrg    -arch)
49555de1df9Smrg      eat=yes ;;
49655de1df9Smrg    -*|$object)
49755de1df9Smrg      ;;
49855de1df9Smrg    *)
49955de1df9Smrg      set fnord "$@" "$arg"; shift ;;
50055de1df9Smrg    esac
50155de1df9Smrg  done
50255de1df9Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
50355de1df9Smrg  touch "$tmpdepfile"
50455de1df9Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
50555de1df9Smrg  rm -f "$depfile"
50655de1df9Smrg  cat < "$tmpdepfile" > "$depfile"
50755de1df9Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
50855de1df9Smrg' | \
50955de1df9Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
51055de1df9Smrg## correctly.  Breaking it into two sed invocations is a workaround.
51155de1df9Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
51255de1df9Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
51355de1df9Smrg  ;;
51455de1df9Smrg
51555de1df9Smrgcpp)
51655de1df9Smrg  # Important note: in order to support this mode, a compiler *must*
51755de1df9Smrg  # always write the preprocessed file to stdout.
51855de1df9Smrg  "$@" || exit $?
51955de1df9Smrg
52055de1df9Smrg  # Remove the call to Libtool.
52155de1df9Smrg  if test "$libtool" = yes; then
52255de1df9Smrg    while test "X$1" != 'X--mode=compile'; do
52355de1df9Smrg      shift
52455de1df9Smrg    done
52555de1df9Smrg    shift
52655de1df9Smrg  fi
52755de1df9Smrg
52855de1df9Smrg  # Remove `-o $object'.
52955de1df9Smrg  IFS=" "
53055de1df9Smrg  for arg
53155de1df9Smrg  do
53255de1df9Smrg    case $arg in
53355de1df9Smrg    -o)
53455de1df9Smrg      shift
53555de1df9Smrg      ;;
53655de1df9Smrg    $object)
53755de1df9Smrg      shift
53855de1df9Smrg      ;;
53955de1df9Smrg    *)
54055de1df9Smrg      set fnord "$@" "$arg"
54155de1df9Smrg      shift # fnord
54255de1df9Smrg      shift # $arg
54355de1df9Smrg      ;;
54455de1df9Smrg    esac
54555de1df9Smrg  done
54655de1df9Smrg
54755de1df9Smrg  "$@" -E |
54855de1df9Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
54955de1df9Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
55055de1df9Smrg    sed '$ s: \\$::' > "$tmpdepfile"
55155de1df9Smrg  rm -f "$depfile"
55255de1df9Smrg  echo "$object : \\" > "$depfile"
55355de1df9Smrg  cat < "$tmpdepfile" >> "$depfile"
55455de1df9Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
55555de1df9Smrg  rm -f "$tmpdepfile"
55655de1df9Smrg  ;;
55755de1df9Smrg
55855de1df9Smrgmsvisualcpp)
55955de1df9Smrg  # Important note: in order to support this mode, a compiler *must*
56055de1df9Smrg  # always write the preprocessed file to stdout.
56155de1df9Smrg  "$@" || exit $?
56255de1df9Smrg
56355de1df9Smrg  # Remove the call to Libtool.
56455de1df9Smrg  if test "$libtool" = yes; then
56555de1df9Smrg    while test "X$1" != 'X--mode=compile'; do
56655de1df9Smrg      shift
56755de1df9Smrg    done
56855de1df9Smrg    shift
56955de1df9Smrg  fi
57055de1df9Smrg
57155de1df9Smrg  IFS=" "
57255de1df9Smrg  for arg
57355de1df9Smrg  do
57455de1df9Smrg    case "$arg" in
57555de1df9Smrg    -o)
57655de1df9Smrg      shift
57755de1df9Smrg      ;;
57855de1df9Smrg    $object)
57955de1df9Smrg      shift
58055de1df9Smrg      ;;
58155de1df9Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
58255de1df9Smrg	set fnord "$@"
58355de1df9Smrg	shift
58455de1df9Smrg	shift
58555de1df9Smrg	;;
58655de1df9Smrg    *)
58755de1df9Smrg	set fnord "$@" "$arg"
58855de1df9Smrg	shift
58955de1df9Smrg	shift
59055de1df9Smrg	;;
59155de1df9Smrg    esac
59255de1df9Smrg  done
59355de1df9Smrg  "$@" -E 2>/dev/null |
59455de1df9Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
59555de1df9Smrg  rm -f "$depfile"
59655de1df9Smrg  echo "$object : \\" > "$depfile"
59755de1df9Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
59855de1df9Smrg  echo "	" >> "$depfile"
59955de1df9Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
60055de1df9Smrg  rm -f "$tmpdepfile"
60155de1df9Smrg  ;;
60255de1df9Smrg
60355de1df9Smrgmsvcmsys)
60455de1df9Smrg  # This case exists only to let depend.m4 do its work.  It works by
60555de1df9Smrg  # looking at the text of this script.  This case will never be run,
60655de1df9Smrg  # since it is checked for above.
60755de1df9Smrg  exit 1
60855de1df9Smrg  ;;
60955de1df9Smrg
61055de1df9Smrgnone)
61155de1df9Smrg  exec "$@"
61255de1df9Smrg  ;;
61355de1df9Smrg
61455de1df9Smrg*)
61555de1df9Smrg  echo "Unknown depmode $depmode" 1>&2
61655de1df9Smrg  exit 1
61755de1df9Smrg  ;;
61855de1df9Smrgesac
61955de1df9Smrg
62055de1df9Smrgexit 0
62155de1df9Smrg
62255de1df9Smrg# Local Variables:
62355de1df9Smrg# mode: shell-script
62455de1df9Smrg# sh-indentation: 2
62555de1df9Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
62655de1df9Smrg# time-stamp-start: "scriptversion="
62755de1df9Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
62855de1df9Smrg# time-stamp-time-zone: "UTC"
62955de1df9Smrg# time-stamp-end: "; # UTC"
63055de1df9Smrg# End:
631