depcomp revision 475c125c
105b261ecSmrg#! /bin/sh
205b261ecSmrg# depcomp - compile a program generating dependencies as side-effects
305b261ecSmrg
4475c125cSmrgscriptversion=2006-10-15.18
505b261ecSmrg
6475c125cSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software
7475c125cSmrg# Foundation, Inc.
805b261ecSmrg
905b261ecSmrg# This program is free software; you can redistribute it and/or modify
1005b261ecSmrg# it under the terms of the GNU General Public License as published by
1105b261ecSmrg# the Free Software Foundation; either version 2, or (at your option)
1205b261ecSmrg# any later version.
1305b261ecSmrg
1405b261ecSmrg# This program is distributed in the hope that it will be useful,
1505b261ecSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
1605b261ecSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1705b261ecSmrg# GNU General Public License for more details.
1805b261ecSmrg
1905b261ecSmrg# You should have received a copy of the GNU General Public License
20475c125cSmrg# along with this program; if not, write to the Free Software
21475c125cSmrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22475c125cSmrg# 02110-1301, USA.
2305b261ecSmrg
2405b261ecSmrg# As a special exception to the GNU General Public License, if you
2505b261ecSmrg# distribute this file as part of a program that contains a
2605b261ecSmrg# configuration script generated by Autoconf, you may include it under
2705b261ecSmrg# the same distribution terms that you use for the rest of that program.
2805b261ecSmrg
2905b261ecSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
3005b261ecSmrg
3105b261ecSmrgcase $1 in
3205b261ecSmrg  '')
3305b261ecSmrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
3405b261ecSmrg     exit 1;
3505b261ecSmrg     ;;
3605b261ecSmrg  -h | --h*)
3705b261ecSmrg    cat <<\EOF
3805b261ecSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
3905b261ecSmrg
4005b261ecSmrgRun PROGRAMS ARGS to compile a file, generating dependencies
4105b261ecSmrgas side-effects.
4205b261ecSmrg
4305b261ecSmrgEnvironment variables:
4405b261ecSmrg  depmode     Dependency tracking mode.
4505b261ecSmrg  source      Source file read by `PROGRAMS ARGS'.
4605b261ecSmrg  object      Object file output by `PROGRAMS ARGS'.
4705b261ecSmrg  DEPDIR      directory where to store dependencies.
4805b261ecSmrg  depfile     Dependency file to output.
4905b261ecSmrg  tmpdepfile  Temporary file to use when outputing dependencies.
5005b261ecSmrg  libtool     Whether libtool is used (yes/no).
5105b261ecSmrg
5205b261ecSmrgReport bugs to <bug-automake@gnu.org>.
5305b261ecSmrgEOF
5405b261ecSmrg    exit $?
5505b261ecSmrg    ;;
5605b261ecSmrg  -v | --v*)
5705b261ecSmrg    echo "depcomp $scriptversion"
5805b261ecSmrg    exit $?
5905b261ecSmrg    ;;
6005b261ecSmrgesac
6105b261ecSmrg
6205b261ecSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
6305b261ecSmrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
6405b261ecSmrg  exit 1
6505b261ecSmrgfi
6605b261ecSmrg
6705b261ecSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
6805b261ecSmrgdepfile=${depfile-`echo "$object" |
6905b261ecSmrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
7005b261ecSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
7105b261ecSmrg
7205b261ecSmrgrm -f "$tmpdepfile"
7305b261ecSmrg
7405b261ecSmrg# Some modes work just like other modes, but use different flags.  We
7505b261ecSmrg# parameterize here, but still list the modes in the big case below,
7605b261ecSmrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
7705b261ecSmrg# here, because this file can only contain one case statement.
7805b261ecSmrgif test "$depmode" = hp; then
7905b261ecSmrg  # HP compiler uses -M and no extra arg.
8005b261ecSmrg  gccflag=-M
8105b261ecSmrg  depmode=gcc
8205b261ecSmrgfi
8305b261ecSmrg
8405b261ecSmrgif test "$depmode" = dashXmstdout; then
8505b261ecSmrg   # This is just like dashmstdout with a different argument.
8605b261ecSmrg   dashmflag=-xM
8705b261ecSmrg   depmode=dashmstdout
8805b261ecSmrgfi
8905b261ecSmrg
9005b261ecSmrgcase "$depmode" in
9105b261ecSmrggcc3)
9205b261ecSmrg## gcc 3 implements dependency tracking that does exactly what
9305b261ecSmrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
9405b261ecSmrg## it if -MD -MP comes after the -MF stuff.  Hmm.
9505b261ecSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
9605b261ecSmrg## the command line argument order; so add the flags where they
9705b261ecSmrg## appear in depend2.am.  Note that the slowdown incurred here
9805b261ecSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
9905b261ecSmrg  for arg
10005b261ecSmrg  do
10105b261ecSmrg    case $arg in
10205b261ecSmrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
10305b261ecSmrg    *)  set fnord "$@" "$arg" ;;
10405b261ecSmrg    esac
10505b261ecSmrg    shift # fnord
10605b261ecSmrg    shift # $arg
10705b261ecSmrg  done
10805b261ecSmrg  "$@"
10905b261ecSmrg  stat=$?
11005b261ecSmrg  if test $stat -eq 0; then :
11105b261ecSmrg  else
11205b261ecSmrg    rm -f "$tmpdepfile"
11305b261ecSmrg    exit $stat
11405b261ecSmrg  fi
11505b261ecSmrg  mv "$tmpdepfile" "$depfile"
11605b261ecSmrg  ;;
11705b261ecSmrg
11805b261ecSmrggcc)
11905b261ecSmrg## There are various ways to get dependency output from gcc.  Here's
12005b261ecSmrg## why we pick this rather obscure method:
12105b261ecSmrg## - Don't want to use -MD because we'd like the dependencies to end
12205b261ecSmrg##   up in a subdir.  Having to rename by hand is ugly.
12305b261ecSmrg##   (We might end up doing this anyway to support other compilers.)
12405b261ecSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
12505b261ecSmrg##   -MM, not -M (despite what the docs say).
12605b261ecSmrg## - Using -M directly means running the compiler twice (even worse
12705b261ecSmrg##   than renaming).
12805b261ecSmrg  if test -z "$gccflag"; then
12905b261ecSmrg    gccflag=-MD,
13005b261ecSmrg  fi
13105b261ecSmrg  "$@" -Wp,"$gccflag$tmpdepfile"
13205b261ecSmrg  stat=$?
13305b261ecSmrg  if test $stat -eq 0; then :
13405b261ecSmrg  else
13505b261ecSmrg    rm -f "$tmpdepfile"
13605b261ecSmrg    exit $stat
13705b261ecSmrg  fi
13805b261ecSmrg  rm -f "$depfile"
13905b261ecSmrg  echo "$object : \\" > "$depfile"
14005b261ecSmrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
14105b261ecSmrg## The second -e expression handles DOS-style file names with drive letters.
14205b261ecSmrg  sed -e 's/^[^:]*: / /' \
14305b261ecSmrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
14405b261ecSmrg## This next piece of magic avoids the `deleted header file' problem.
14505b261ecSmrg## The problem is that when a header file which appears in a .P file
14605b261ecSmrg## is deleted, the dependency causes make to die (because there is
14705b261ecSmrg## typically no way to rebuild the header).  We avoid this by adding
14805b261ecSmrg## dummy dependencies for each header file.  Too bad gcc doesn't do
14905b261ecSmrg## this for us directly.
15005b261ecSmrg  tr ' ' '
15105b261ecSmrg' < "$tmpdepfile" |
15205b261ecSmrg## Some versions of gcc put a space before the `:'.  On the theory
15305b261ecSmrg## that the space means something, we add a space to the output as
15405b261ecSmrg## well.
15505b261ecSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
15605b261ecSmrg## correctly.  Breaking it into two sed invocations is a workaround.
15705b261ecSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
15805b261ecSmrg  rm -f "$tmpdepfile"
15905b261ecSmrg  ;;
16005b261ecSmrg
16105b261ecSmrghp)
16205b261ecSmrg  # This case exists only to let depend.m4 do its work.  It works by
16305b261ecSmrg  # looking at the text of this script.  This case will never be run,
16405b261ecSmrg  # since it is checked for above.
16505b261ecSmrg  exit 1
16605b261ecSmrg  ;;
16705b261ecSmrg
16805b261ecSmrgsgi)
16905b261ecSmrg  if test "$libtool" = yes; then
17005b261ecSmrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
17105b261ecSmrg  else
17205b261ecSmrg    "$@" -MDupdate "$tmpdepfile"
17305b261ecSmrg  fi
17405b261ecSmrg  stat=$?
17505b261ecSmrg  if test $stat -eq 0; then :
17605b261ecSmrg  else
17705b261ecSmrg    rm -f "$tmpdepfile"
17805b261ecSmrg    exit $stat
17905b261ecSmrg  fi
18005b261ecSmrg  rm -f "$depfile"
18105b261ecSmrg
18205b261ecSmrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
18305b261ecSmrg    echo "$object : \\" > "$depfile"
18405b261ecSmrg
18505b261ecSmrg    # Clip off the initial element (the dependent).  Don't try to be
18605b261ecSmrg    # clever and replace this with sed code, as IRIX sed won't handle
18705b261ecSmrg    # lines with more than a fixed number of characters (4096 in
18805b261ecSmrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
18905b261ecSmrg    # the IRIX cc adds comments like `#:fec' to the end of the
19005b261ecSmrg    # dependency line.
19105b261ecSmrg    tr ' ' '
19205b261ecSmrg' < "$tmpdepfile" \
19305b261ecSmrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
19405b261ecSmrg    tr '
195475c125cSmrg' ' ' >> $depfile
196475c125cSmrg    echo >> $depfile
19705b261ecSmrg
19805b261ecSmrg    # The second pass generates a dummy entry for each header file.
19905b261ecSmrg    tr ' ' '
20005b261ecSmrg' < "$tmpdepfile" \
20105b261ecSmrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
202475c125cSmrg   >> $depfile
20305b261ecSmrg  else
20405b261ecSmrg    # The sourcefile does not contain any dependencies, so just
20505b261ecSmrg    # store a dummy comment line, to avoid errors with the Makefile
20605b261ecSmrg    # "include basename.Plo" scheme.
20705b261ecSmrg    echo "#dummy" > "$depfile"
20805b261ecSmrg  fi
20905b261ecSmrg  rm -f "$tmpdepfile"
21005b261ecSmrg  ;;
21105b261ecSmrg
21205b261ecSmrgaix)
21305b261ecSmrg  # The C for AIX Compiler uses -M and outputs the dependencies
21405b261ecSmrg  # in a .u file.  In older versions, this file always lives in the
21505b261ecSmrg  # current directory.  Also, the AIX compiler puts `$object:' at the
21605b261ecSmrg  # start of each line; $object doesn't have directory information.
21705b261ecSmrg  # Version 6 uses the directory in both cases.
218475c125cSmrg  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
219475c125cSmrg  tmpdepfile="$stripped.u"
22005b261ecSmrg  if test "$libtool" = yes; then
22105b261ecSmrg    "$@" -Wc,-M
22205b261ecSmrg  else
22305b261ecSmrg    "$@" -M
22405b261ecSmrg  fi
22505b261ecSmrg  stat=$?
22605b261ecSmrg
227475c125cSmrg  if test -f "$tmpdepfile"; then :
228475c125cSmrg  else
229475c125cSmrg    stripped=`echo "$stripped" | sed 's,^.*/,,'`
230475c125cSmrg    tmpdepfile="$stripped.u"
231475c125cSmrg  fi
232475c125cSmrg
23305b261ecSmrg  if test $stat -eq 0; then :
23405b261ecSmrg  else
235475c125cSmrg    rm -f "$tmpdepfile"
23605b261ecSmrg    exit $stat
23705b261ecSmrg  fi
23805b261ecSmrg
23905b261ecSmrg  if test -f "$tmpdepfile"; then
240475c125cSmrg    outname="$stripped.o"
24105b261ecSmrg    # Each line is of the form `foo.o: dependent.h'.
24205b261ecSmrg    # Do two passes, one to just change these to
24305b261ecSmrg    # `$object: dependent.h' and one to simply `dependent.h:'.
244475c125cSmrg    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
245475c125cSmrg    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
24605b261ecSmrg  else
24705b261ecSmrg    # The sourcefile does not contain any dependencies, so just
24805b261ecSmrg    # store a dummy comment line, to avoid errors with the Makefile
24905b261ecSmrg    # "include basename.Plo" scheme.
25005b261ecSmrg    echo "#dummy" > "$depfile"
25105b261ecSmrg  fi
25205b261ecSmrg  rm -f "$tmpdepfile"
25305b261ecSmrg  ;;
25405b261ecSmrg
25505b261ecSmrgicc)
25605b261ecSmrg  # Intel's C compiler understands `-MD -MF file'.  However on
25705b261ecSmrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
25805b261ecSmrg  # ICC 7.0 will fill foo.d with something like
25905b261ecSmrg  #    foo.o: sub/foo.c
26005b261ecSmrg  #    foo.o: sub/foo.h
26105b261ecSmrg  # which is wrong.  We want:
26205b261ecSmrg  #    sub/foo.o: sub/foo.c
26305b261ecSmrg  #    sub/foo.o: sub/foo.h
26405b261ecSmrg  #    sub/foo.c:
26505b261ecSmrg  #    sub/foo.h:
26605b261ecSmrg  # ICC 7.1 will output
26705b261ecSmrg  #    foo.o: sub/foo.c sub/foo.h
26805b261ecSmrg  # and will wrap long lines using \ :
26905b261ecSmrg  #    foo.o: sub/foo.c ... \
27005b261ecSmrg  #     sub/foo.h ... \
27105b261ecSmrg  #     ...
27205b261ecSmrg
27305b261ecSmrg  "$@" -MD -MF "$tmpdepfile"
27405b261ecSmrg  stat=$?
27505b261ecSmrg  if test $stat -eq 0; then :
27605b261ecSmrg  else
27705b261ecSmrg    rm -f "$tmpdepfile"
27805b261ecSmrg    exit $stat
27905b261ecSmrg  fi
28005b261ecSmrg  rm -f "$depfile"
28105b261ecSmrg  # Each line is of the form `foo.o: dependent.h',
28205b261ecSmrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
28305b261ecSmrg  # Do two passes, one to just change these to
28405b261ecSmrg  # `$object: dependent.h' and one to simply `dependent.h:'.
28505b261ecSmrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
28605b261ecSmrg  # Some versions of the HPUX 10.20 sed can't process this invocation
28705b261ecSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
28805b261ecSmrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
28905b261ecSmrg    sed -e 's/$/ :/' >> "$depfile"
29005b261ecSmrg  rm -f "$tmpdepfile"
29105b261ecSmrg  ;;
29205b261ecSmrg
29305b261ecSmrghp2)
29405b261ecSmrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
29505b261ecSmrg  # compilers, which have integrated preprocessors.  The correct option
29605b261ecSmrg  # to use with these is +Maked; it writes dependencies to a file named
29705b261ecSmrg  # 'foo.d', which lands next to the object file, wherever that
29805b261ecSmrg  # happens to be.
29905b261ecSmrg  # Much of this is similar to the tru64 case; see comments there.
30005b261ecSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
30105b261ecSmrg  test "x$dir" = "x$object" && dir=
30205b261ecSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
30305b261ecSmrg  if test "$libtool" = yes; then
30405b261ecSmrg    tmpdepfile1=$dir$base.d
30505b261ecSmrg    tmpdepfile2=$dir.libs/$base.d
30605b261ecSmrg    "$@" -Wc,+Maked
30705b261ecSmrg  else
30805b261ecSmrg    tmpdepfile1=$dir$base.d
30905b261ecSmrg    tmpdepfile2=$dir$base.d
31005b261ecSmrg    "$@" +Maked
31105b261ecSmrg  fi
31205b261ecSmrg  stat=$?
31305b261ecSmrg  if test $stat -eq 0; then :
31405b261ecSmrg  else
31505b261ecSmrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
31605b261ecSmrg     exit $stat
31705b261ecSmrg  fi
31805b261ecSmrg
31905b261ecSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
32005b261ecSmrg  do
32105b261ecSmrg    test -f "$tmpdepfile" && break
32205b261ecSmrg  done
32305b261ecSmrg  if test -f "$tmpdepfile"; then
32405b261ecSmrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
32505b261ecSmrg    # Add `dependent.h:' lines.
326475c125cSmrg    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
32705b261ecSmrg  else
32805b261ecSmrg    echo "#dummy" > "$depfile"
32905b261ecSmrg  fi
33005b261ecSmrg  rm -f "$tmpdepfile" "$tmpdepfile2"
33105b261ecSmrg  ;;
33205b261ecSmrg
33305b261ecSmrgtru64)
33405b261ecSmrg   # The Tru64 compiler uses -MD to generate dependencies as a side
33505b261ecSmrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
33605b261ecSmrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
33705b261ecSmrg   # dependencies in `foo.d' instead, so we check for that too.
33805b261ecSmrg   # Subdirectories are respected.
33905b261ecSmrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
34005b261ecSmrg   test "x$dir" = "x$object" && dir=
34105b261ecSmrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
34205b261ecSmrg
34305b261ecSmrg   if test "$libtool" = yes; then
34405b261ecSmrg      # With Tru64 cc, shared objects can also be used to make a
34505b261ecSmrg      # static library.  This mechanism is used in libtool 1.4 series to
34605b261ecSmrg      # handle both shared and static libraries in a single compilation.
34705b261ecSmrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
34805b261ecSmrg      #
34905b261ecSmrg      # With libtool 1.5 this exception was removed, and libtool now
35005b261ecSmrg      # generates 2 separate objects for the 2 libraries.  These two
35105b261ecSmrg      # compilations output dependencies in $dir.libs/$base.o.d and
35205b261ecSmrg      # in $dir$base.o.d.  We have to check for both files, because
35305b261ecSmrg      # one of the two compilations can be disabled.  We should prefer
35405b261ecSmrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
35505b261ecSmrg      # automatically cleaned when .libs/ is deleted, while ignoring
35605b261ecSmrg      # the former would cause a distcleancheck panic.
35705b261ecSmrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
35805b261ecSmrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
35905b261ecSmrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
36005b261ecSmrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
36105b261ecSmrg      "$@" -Wc,-MD
36205b261ecSmrg   else
36305b261ecSmrg      tmpdepfile1=$dir$base.o.d
36405b261ecSmrg      tmpdepfile2=$dir$base.d
36505b261ecSmrg      tmpdepfile3=$dir$base.d
36605b261ecSmrg      tmpdepfile4=$dir$base.d
36705b261ecSmrg      "$@" -MD
36805b261ecSmrg   fi
36905b261ecSmrg
37005b261ecSmrg   stat=$?
37105b261ecSmrg   if test $stat -eq 0; then :
37205b261ecSmrg   else
37305b261ecSmrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
37405b261ecSmrg      exit $stat
37505b261ecSmrg   fi
37605b261ecSmrg
37705b261ecSmrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
37805b261ecSmrg   do
37905b261ecSmrg     test -f "$tmpdepfile" && break
38005b261ecSmrg   done
38105b261ecSmrg   if test -f "$tmpdepfile"; then
38205b261ecSmrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
38305b261ecSmrg      # That's a tab and a space in the [].
38405b261ecSmrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
38505b261ecSmrg   else
38605b261ecSmrg      echo "#dummy" > "$depfile"
38705b261ecSmrg   fi
38805b261ecSmrg   rm -f "$tmpdepfile"
38905b261ecSmrg   ;;
39005b261ecSmrg
39105b261ecSmrg#nosideeffect)
39205b261ecSmrg  # This comment above is used by automake to tell side-effect
39305b261ecSmrg  # dependency tracking mechanisms from slower ones.
39405b261ecSmrg
39505b261ecSmrgdashmstdout)
39605b261ecSmrg  # Important note: in order to support this mode, a compiler *must*
39705b261ecSmrg  # always write the preprocessed file to stdout, regardless of -o.
39805b261ecSmrg  "$@" || exit $?
39905b261ecSmrg
40005b261ecSmrg  # Remove the call to Libtool.
40105b261ecSmrg  if test "$libtool" = yes; then
402475c125cSmrg    while test $1 != '--mode=compile'; do
40305b261ecSmrg      shift
40405b261ecSmrg    done
40505b261ecSmrg    shift
40605b261ecSmrg  fi
40705b261ecSmrg
40805b261ecSmrg  # Remove `-o $object'.
40905b261ecSmrg  IFS=" "
41005b261ecSmrg  for arg
41105b261ecSmrg  do
41205b261ecSmrg    case $arg in
41305b261ecSmrg    -o)
41405b261ecSmrg      shift
41505b261ecSmrg      ;;
41605b261ecSmrg    $object)
41705b261ecSmrg      shift
41805b261ecSmrg      ;;
41905b261ecSmrg    *)
42005b261ecSmrg      set fnord "$@" "$arg"
42105b261ecSmrg      shift # fnord
42205b261ecSmrg      shift # $arg
42305b261ecSmrg      ;;
42405b261ecSmrg    esac
42505b261ecSmrg  done
42605b261ecSmrg
42705b261ecSmrg  test -z "$dashmflag" && dashmflag=-M
42805b261ecSmrg  # Require at least two characters before searching for `:'
42905b261ecSmrg  # in the target name.  This is to cope with DOS-style filenames:
43005b261ecSmrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
43105b261ecSmrg  "$@" $dashmflag |
43205b261ecSmrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
43305b261ecSmrg  rm -f "$depfile"
43405b261ecSmrg  cat < "$tmpdepfile" > "$depfile"
43505b261ecSmrg  tr ' ' '
43605b261ecSmrg' < "$tmpdepfile" | \
43705b261ecSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
43805b261ecSmrg## correctly.  Breaking it into two sed invocations is a workaround.
43905b261ecSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
44005b261ecSmrg  rm -f "$tmpdepfile"
44105b261ecSmrg  ;;
44205b261ecSmrg
44305b261ecSmrgdashXmstdout)
44405b261ecSmrg  # This case only exists to satisfy depend.m4.  It is never actually
44505b261ecSmrg  # run, as this mode is specially recognized in the preamble.
44605b261ecSmrg  exit 1
44705b261ecSmrg  ;;
44805b261ecSmrg
44905b261ecSmrgmakedepend)
45005b261ecSmrg  "$@" || exit $?
45105b261ecSmrg  # Remove any Libtool call
45205b261ecSmrg  if test "$libtool" = yes; then
453475c125cSmrg    while test $1 != '--mode=compile'; do
45405b261ecSmrg      shift
45505b261ecSmrg    done
45605b261ecSmrg    shift
45705b261ecSmrg  fi
45805b261ecSmrg  # X makedepend
45905b261ecSmrg  shift
460475c125cSmrg  cleared=no
461475c125cSmrg  for arg in "$@"; do
46205b261ecSmrg    case $cleared in
46305b261ecSmrg    no)
46405b261ecSmrg      set ""; shift
46505b261ecSmrg      cleared=yes ;;
46605b261ecSmrg    esac
46705b261ecSmrg    case "$arg" in
46805b261ecSmrg    -D*|-I*)
46905b261ecSmrg      set fnord "$@" "$arg"; shift ;;
47005b261ecSmrg    # Strip any option that makedepend may not understand.  Remove
47105b261ecSmrg    # the object too, otherwise makedepend will parse it as a source file.
47205b261ecSmrg    -*|$object)
47305b261ecSmrg      ;;
47405b261ecSmrg    *)
47505b261ecSmrg      set fnord "$@" "$arg"; shift ;;
47605b261ecSmrg    esac
47705b261ecSmrg  done
478475c125cSmrg  obj_suffix="`echo $object | sed 's/^.*\././'`"
47905b261ecSmrg  touch "$tmpdepfile"
48005b261ecSmrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
48105b261ecSmrg  rm -f "$depfile"
48205b261ecSmrg  cat < "$tmpdepfile" > "$depfile"
48305b261ecSmrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
48405b261ecSmrg' | \
48505b261ecSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
48605b261ecSmrg## correctly.  Breaking it into two sed invocations is a workaround.
48705b261ecSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
48805b261ecSmrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
48905b261ecSmrg  ;;
49005b261ecSmrg
49105b261ecSmrgcpp)
49205b261ecSmrg  # Important note: in order to support this mode, a compiler *must*
49305b261ecSmrg  # always write the preprocessed file to stdout.
49405b261ecSmrg  "$@" || exit $?
49505b261ecSmrg
49605b261ecSmrg  # Remove the call to Libtool.
49705b261ecSmrg  if test "$libtool" = yes; then
498475c125cSmrg    while test $1 != '--mode=compile'; do
49905b261ecSmrg      shift
50005b261ecSmrg    done
50105b261ecSmrg    shift
50205b261ecSmrg  fi
50305b261ecSmrg
50405b261ecSmrg  # Remove `-o $object'.
50505b261ecSmrg  IFS=" "
50605b261ecSmrg  for arg
50705b261ecSmrg  do
50805b261ecSmrg    case $arg in
50905b261ecSmrg    -o)
51005b261ecSmrg      shift
51105b261ecSmrg      ;;
51205b261ecSmrg    $object)
51305b261ecSmrg      shift
51405b261ecSmrg      ;;
51505b261ecSmrg    *)
51605b261ecSmrg      set fnord "$@" "$arg"
51705b261ecSmrg      shift # fnord
51805b261ecSmrg      shift # $arg
51905b261ecSmrg      ;;
52005b261ecSmrg    esac
52105b261ecSmrg  done
52205b261ecSmrg
52305b261ecSmrg  "$@" -E |
52405b261ecSmrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
52505b261ecSmrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
52605b261ecSmrg    sed '$ s: \\$::' > "$tmpdepfile"
52705b261ecSmrg  rm -f "$depfile"
52805b261ecSmrg  echo "$object : \\" > "$depfile"
52905b261ecSmrg  cat < "$tmpdepfile" >> "$depfile"
53005b261ecSmrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
53105b261ecSmrg  rm -f "$tmpdepfile"
53205b261ecSmrg  ;;
53305b261ecSmrg
53405b261ecSmrgmsvisualcpp)
53505b261ecSmrg  # Important note: in order to support this mode, a compiler *must*
536475c125cSmrg  # always write the preprocessed file to stdout, regardless of -o,
537475c125cSmrg  # because we must use -o when running libtool.
53805b261ecSmrg  "$@" || exit $?
53905b261ecSmrg  IFS=" "
54005b261ecSmrg  for arg
54105b261ecSmrg  do
54205b261ecSmrg    case "$arg" in
54305b261ecSmrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
54405b261ecSmrg	set fnord "$@"
54505b261ecSmrg	shift
54605b261ecSmrg	shift
54705b261ecSmrg	;;
54805b261ecSmrg    *)
54905b261ecSmrg	set fnord "$@" "$arg"
55005b261ecSmrg	shift
55105b261ecSmrg	shift
55205b261ecSmrg	;;
55305b261ecSmrg    esac
55405b261ecSmrg  done
555475c125cSmrg  "$@" -E |
556475c125cSmrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
55705b261ecSmrg  rm -f "$depfile"
55805b261ecSmrg  echo "$object : \\" > "$depfile"
559475c125cSmrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
56005b261ecSmrg  echo "	" >> "$depfile"
561475c125cSmrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
56205b261ecSmrg  rm -f "$tmpdepfile"
56305b261ecSmrg  ;;
56405b261ecSmrg
56505b261ecSmrgnone)
56605b261ecSmrg  exec "$@"
56705b261ecSmrg  ;;
56805b261ecSmrg
56905b261ecSmrg*)
57005b261ecSmrg  echo "Unknown depmode $depmode" 1>&2
57105b261ecSmrg  exit 1
57205b261ecSmrg  ;;
57305b261ecSmrgesac
57405b261ecSmrg
57505b261ecSmrgexit 0
57605b261ecSmrg
57705b261ecSmrg# Local Variables:
57805b261ecSmrg# mode: shell-script
57905b261ecSmrg# sh-indentation: 2
58005b261ecSmrg# eval: (add-hook 'write-file-hooks 'time-stamp)
58105b261ecSmrg# time-stamp-start: "scriptversion="
58205b261ecSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
583475c125cSmrg# time-stamp-end: "$"
58405b261ecSmrg# End:
585