153e90a53Smrg#! /bin/sh
253e90a53Smrg# depcomp - compile a program generating dependencies as side-effects
353e90a53Smrg
453e90a53Smrgscriptversion=2005-07-09.11
553e90a53Smrg
653e90a53Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
753e90a53Smrg
853e90a53Smrg# This program is free software; you can redistribute it and/or modify
953e90a53Smrg# it under the terms of the GNU General Public License as published by
1053e90a53Smrg# the Free Software Foundation; either version 2, or (at your option)
1153e90a53Smrg# any later version.
1253e90a53Smrg
1353e90a53Smrg# This program is distributed in the hope that it will be useful,
1453e90a53Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
1553e90a53Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1653e90a53Smrg# GNU General Public License for more details.
1753e90a53Smrg
1853e90a53Smrg# You should have received a copy of the GNU General Public License
1953e90a53Smrg# along with this program; if not, write to the Free Software
2053e90a53Smrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
2153e90a53Smrg# 02110-1301, USA.
2253e90a53Smrg
2353e90a53Smrg# As a special exception to the GNU General Public License, if you
2453e90a53Smrg# distribute this file as part of a program that contains a
2553e90a53Smrg# configuration script generated by Autoconf, you may include it under
2653e90a53Smrg# the same distribution terms that you use for the rest of that program.
2753e90a53Smrg
2853e90a53Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
2953e90a53Smrg
3053e90a53Smrgcase $1 in
3153e90a53Smrg  '')
3253e90a53Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
3353e90a53Smrg     exit 1;
3453e90a53Smrg     ;;
3553e90a53Smrg  -h | --h*)
3653e90a53Smrg    cat <<\EOF
3753e90a53SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
3853e90a53Smrg
3953e90a53SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
4053e90a53Smrgas side-effects.
4153e90a53Smrg
4253e90a53SmrgEnvironment variables:
4353e90a53Smrg  depmode     Dependency tracking mode.
4453e90a53Smrg  source      Source file read by `PROGRAMS ARGS'.
4553e90a53Smrg  object      Object file output by `PROGRAMS ARGS'.
4653e90a53Smrg  DEPDIR      directory where to store dependencies.
4753e90a53Smrg  depfile     Dependency file to output.
4853e90a53Smrg  tmpdepfile  Temporary file to use when outputing dependencies.
4953e90a53Smrg  libtool     Whether libtool is used (yes/no).
5053e90a53Smrg
5153e90a53SmrgReport bugs to <bug-automake@gnu.org>.
5253e90a53SmrgEOF
5353e90a53Smrg    exit $?
5453e90a53Smrg    ;;
5553e90a53Smrg  -v | --v*)
5653e90a53Smrg    echo "depcomp $scriptversion"
5753e90a53Smrg    exit $?
5853e90a53Smrg    ;;
5953e90a53Smrgesac
6053e90a53Smrg
6153e90a53Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
6253e90a53Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
6353e90a53Smrg  exit 1
6453e90a53Smrgfi
6553e90a53Smrg
6653e90a53Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
6753e90a53Smrgdepfile=${depfile-`echo "$object" |
6853e90a53Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
6953e90a53Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
7053e90a53Smrg
7153e90a53Smrgrm -f "$tmpdepfile"
7253e90a53Smrg
7353e90a53Smrg# Some modes work just like other modes, but use different flags.  We
7453e90a53Smrg# parameterize here, but still list the modes in the big case below,
7553e90a53Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
7653e90a53Smrg# here, because this file can only contain one case statement.
7753e90a53Smrgif test "$depmode" = hp; then
7853e90a53Smrg  # HP compiler uses -M and no extra arg.
7953e90a53Smrg  gccflag=-M
8053e90a53Smrg  depmode=gcc
8153e90a53Smrgfi
8253e90a53Smrg
8353e90a53Smrgif test "$depmode" = dashXmstdout; then
8453e90a53Smrg   # This is just like dashmstdout with a different argument.
8553e90a53Smrg   dashmflag=-xM
8653e90a53Smrg   depmode=dashmstdout
8753e90a53Smrgfi
8853e90a53Smrg
8953e90a53Smrgcase "$depmode" in
9053e90a53Smrggcc3)
9153e90a53Smrg## gcc 3 implements dependency tracking that does exactly what
9253e90a53Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
9353e90a53Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
9453e90a53Smrg  "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
9553e90a53Smrg  stat=$?
9653e90a53Smrg  if test $stat -eq 0; then :
9753e90a53Smrg  else
9853e90a53Smrg    rm -f "$tmpdepfile"
9953e90a53Smrg    exit $stat
10053e90a53Smrg  fi
10153e90a53Smrg  mv "$tmpdepfile" "$depfile"
10253e90a53Smrg  ;;
10353e90a53Smrg
10453e90a53Smrggcc)
10553e90a53Smrg## There are various ways to get dependency output from gcc.  Here's
10653e90a53Smrg## why we pick this rather obscure method:
10753e90a53Smrg## - Don't want to use -MD because we'd like the dependencies to end
10853e90a53Smrg##   up in a subdir.  Having to rename by hand is ugly.
10953e90a53Smrg##   (We might end up doing this anyway to support other compilers.)
11053e90a53Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
11153e90a53Smrg##   -MM, not -M (despite what the docs say).
11253e90a53Smrg## - Using -M directly means running the compiler twice (even worse
11353e90a53Smrg##   than renaming).
11453e90a53Smrg  if test -z "$gccflag"; then
11553e90a53Smrg    gccflag=-MD,
11653e90a53Smrg  fi
11753e90a53Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
11853e90a53Smrg  stat=$?
11953e90a53Smrg  if test $stat -eq 0; then :
12053e90a53Smrg  else
12153e90a53Smrg    rm -f "$tmpdepfile"
12253e90a53Smrg    exit $stat
12353e90a53Smrg  fi
12453e90a53Smrg  rm -f "$depfile"
12553e90a53Smrg  echo "$object : \\" > "$depfile"
12653e90a53Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
12753e90a53Smrg## The second -e expression handles DOS-style file names with drive letters.
12853e90a53Smrg  sed -e 's/^[^:]*: / /' \
12953e90a53Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
13053e90a53Smrg## This next piece of magic avoids the `deleted header file' problem.
13153e90a53Smrg## The problem is that when a header file which appears in a .P file
13253e90a53Smrg## is deleted, the dependency causes make to die (because there is
13353e90a53Smrg## typically no way to rebuild the header).  We avoid this by adding
13453e90a53Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
13553e90a53Smrg## this for us directly.
13653e90a53Smrg  tr ' ' '
13753e90a53Smrg' < "$tmpdepfile" |
13853e90a53Smrg## Some versions of gcc put a space before the `:'.  On the theory
13953e90a53Smrg## that the space means something, we add a space to the output as
14053e90a53Smrg## well.
14153e90a53Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
14253e90a53Smrg## correctly.  Breaking it into two sed invocations is a workaround.
14353e90a53Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
14453e90a53Smrg  rm -f "$tmpdepfile"
14553e90a53Smrg  ;;
14653e90a53Smrg
14753e90a53Smrghp)
14853e90a53Smrg  # This case exists only to let depend.m4 do its work.  It works by
14953e90a53Smrg  # looking at the text of this script.  This case will never be run,
15053e90a53Smrg  # since it is checked for above.
15153e90a53Smrg  exit 1
15253e90a53Smrg  ;;
15353e90a53Smrg
15453e90a53Smrgsgi)
15553e90a53Smrg  if test "$libtool" = yes; then
15653e90a53Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
15753e90a53Smrg  else
15853e90a53Smrg    "$@" -MDupdate "$tmpdepfile"
15953e90a53Smrg  fi
16053e90a53Smrg  stat=$?
16153e90a53Smrg  if test $stat -eq 0; then :
16253e90a53Smrg  else
16353e90a53Smrg    rm -f "$tmpdepfile"
16453e90a53Smrg    exit $stat
16553e90a53Smrg  fi
16653e90a53Smrg  rm -f "$depfile"
16753e90a53Smrg
16853e90a53Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
16953e90a53Smrg    echo "$object : \\" > "$depfile"
17053e90a53Smrg
17153e90a53Smrg    # Clip off the initial element (the dependent).  Don't try to be
17253e90a53Smrg    # clever and replace this with sed code, as IRIX sed won't handle
17353e90a53Smrg    # lines with more than a fixed number of characters (4096 in
17453e90a53Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
17553e90a53Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
17653e90a53Smrg    # dependency line.
17753e90a53Smrg    tr ' ' '
17853e90a53Smrg' < "$tmpdepfile" \
17953e90a53Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
18053e90a53Smrg    tr '
18153e90a53Smrg' ' ' >> $depfile
18253e90a53Smrg    echo >> $depfile
18353e90a53Smrg
18453e90a53Smrg    # The second pass generates a dummy entry for each header file.
18553e90a53Smrg    tr ' ' '
18653e90a53Smrg' < "$tmpdepfile" \
18753e90a53Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
18853e90a53Smrg   >> $depfile
18953e90a53Smrg  else
19053e90a53Smrg    # The sourcefile does not contain any dependencies, so just
19153e90a53Smrg    # store a dummy comment line, to avoid errors with the Makefile
19253e90a53Smrg    # "include basename.Plo" scheme.
19353e90a53Smrg    echo "#dummy" > "$depfile"
19453e90a53Smrg  fi
19553e90a53Smrg  rm -f "$tmpdepfile"
19653e90a53Smrg  ;;
19753e90a53Smrg
19853e90a53Smrgaix)
19953e90a53Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
20053e90a53Smrg  # in a .u file.  In older versions, this file always lives in the
20153e90a53Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
20253e90a53Smrg  # start of each line; $object doesn't have directory information.
20353e90a53Smrg  # Version 6 uses the directory in both cases.
20453e90a53Smrg  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
20553e90a53Smrg  tmpdepfile="$stripped.u"
20653e90a53Smrg  if test "$libtool" = yes; then
20753e90a53Smrg    "$@" -Wc,-M
20853e90a53Smrg  else
20953e90a53Smrg    "$@" -M
21053e90a53Smrg  fi
21153e90a53Smrg  stat=$?
21253e90a53Smrg
21353e90a53Smrg  if test -f "$tmpdepfile"; then :
21453e90a53Smrg  else
21553e90a53Smrg    stripped=`echo "$stripped" | sed 's,^.*/,,'`
21653e90a53Smrg    tmpdepfile="$stripped.u"
21753e90a53Smrg  fi
21853e90a53Smrg
21953e90a53Smrg  if test $stat -eq 0; then :
22053e90a53Smrg  else
22153e90a53Smrg    rm -f "$tmpdepfile"
22253e90a53Smrg    exit $stat
22353e90a53Smrg  fi
22453e90a53Smrg
22553e90a53Smrg  if test -f "$tmpdepfile"; then
22653e90a53Smrg    outname="$stripped.o"
22753e90a53Smrg    # Each line is of the form `foo.o: dependent.h'.
22853e90a53Smrg    # Do two passes, one to just change these to
22953e90a53Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
23053e90a53Smrg    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
23153e90a53Smrg    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
23253e90a53Smrg  else
23353e90a53Smrg    # The sourcefile does not contain any dependencies, so just
23453e90a53Smrg    # store a dummy comment line, to avoid errors with the Makefile
23553e90a53Smrg    # "include basename.Plo" scheme.
23653e90a53Smrg    echo "#dummy" > "$depfile"
23753e90a53Smrg  fi
23853e90a53Smrg  rm -f "$tmpdepfile"
23953e90a53Smrg  ;;
24053e90a53Smrg
24153e90a53Smrgicc)
24253e90a53Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
24353e90a53Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
24453e90a53Smrg  # ICC 7.0 will fill foo.d with something like
24553e90a53Smrg  #    foo.o: sub/foo.c
24653e90a53Smrg  #    foo.o: sub/foo.h
24753e90a53Smrg  # which is wrong.  We want:
24853e90a53Smrg  #    sub/foo.o: sub/foo.c
24953e90a53Smrg  #    sub/foo.o: sub/foo.h
25053e90a53Smrg  #    sub/foo.c:
25153e90a53Smrg  #    sub/foo.h:
25253e90a53Smrg  # ICC 7.1 will output
25353e90a53Smrg  #    foo.o: sub/foo.c sub/foo.h
25453e90a53Smrg  # and will wrap long lines using \ :
25553e90a53Smrg  #    foo.o: sub/foo.c ... \
25653e90a53Smrg  #     sub/foo.h ... \
25753e90a53Smrg  #     ...
25853e90a53Smrg
25953e90a53Smrg  "$@" -MD -MF "$tmpdepfile"
26053e90a53Smrg  stat=$?
26153e90a53Smrg  if test $stat -eq 0; then :
26253e90a53Smrg  else
26353e90a53Smrg    rm -f "$tmpdepfile"
26453e90a53Smrg    exit $stat
26553e90a53Smrg  fi
26653e90a53Smrg  rm -f "$depfile"
26753e90a53Smrg  # Each line is of the form `foo.o: dependent.h',
26853e90a53Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
26953e90a53Smrg  # Do two passes, one to just change these to
27053e90a53Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
27153e90a53Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
27253e90a53Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
27353e90a53Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
27453e90a53Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
27553e90a53Smrg    sed -e 's/$/ :/' >> "$depfile"
27653e90a53Smrg  rm -f "$tmpdepfile"
27753e90a53Smrg  ;;
27853e90a53Smrg
27953e90a53Smrgtru64)
28053e90a53Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
28153e90a53Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
28253e90a53Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
28353e90a53Smrg   # dependencies in `foo.d' instead, so we check for that too.
28453e90a53Smrg   # Subdirectories are respected.
28553e90a53Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
28653e90a53Smrg   test "x$dir" = "x$object" && dir=
28753e90a53Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
28853e90a53Smrg
28953e90a53Smrg   if test "$libtool" = yes; then
29053e90a53Smrg      # With Tru64 cc, shared objects can also be used to make a
29153e90a53Smrg      # static library.  This mecanism is used in libtool 1.4 series to
29253e90a53Smrg      # handle both shared and static libraries in a single compilation.
29353e90a53Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
29453e90a53Smrg      #
29553e90a53Smrg      # With libtool 1.5 this exception was removed, and libtool now
29653e90a53Smrg      # generates 2 separate objects for the 2 libraries.  These two
29753e90a53Smrg      # compilations output dependencies in in $dir.libs/$base.o.d and
29853e90a53Smrg      # in $dir$base.o.d.  We have to check for both files, because
29953e90a53Smrg      # one of the two compilations can be disabled.  We should prefer
30053e90a53Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
30153e90a53Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
30253e90a53Smrg      # the former would cause a distcleancheck panic.
30353e90a53Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
30453e90a53Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
30553e90a53Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
30653e90a53Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
30753e90a53Smrg      "$@" -Wc,-MD
30853e90a53Smrg   else
30953e90a53Smrg      tmpdepfile1=$dir$base.o.d
31053e90a53Smrg      tmpdepfile2=$dir$base.d
31153e90a53Smrg      tmpdepfile3=$dir$base.d
31253e90a53Smrg      tmpdepfile4=$dir$base.d
31353e90a53Smrg      "$@" -MD
31453e90a53Smrg   fi
31553e90a53Smrg
31653e90a53Smrg   stat=$?
31753e90a53Smrg   if test $stat -eq 0; then :
31853e90a53Smrg   else
31953e90a53Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
32053e90a53Smrg      exit $stat
32153e90a53Smrg   fi
32253e90a53Smrg
32353e90a53Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
32453e90a53Smrg   do
32553e90a53Smrg     test -f "$tmpdepfile" && break
32653e90a53Smrg   done
32753e90a53Smrg   if test -f "$tmpdepfile"; then
32853e90a53Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
32953e90a53Smrg      # That's a tab and a space in the [].
33053e90a53Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
33153e90a53Smrg   else
33253e90a53Smrg      echo "#dummy" > "$depfile"
33353e90a53Smrg   fi
33453e90a53Smrg   rm -f "$tmpdepfile"
33553e90a53Smrg   ;;
33653e90a53Smrg
33753e90a53Smrg#nosideeffect)
33853e90a53Smrg  # This comment above is used by automake to tell side-effect
33953e90a53Smrg  # dependency tracking mechanisms from slower ones.
34053e90a53Smrg
34153e90a53Smrgdashmstdout)
34253e90a53Smrg  # Important note: in order to support this mode, a compiler *must*
34353e90a53Smrg  # always write the preprocessed file to stdout, regardless of -o.
34453e90a53Smrg  "$@" || exit $?
34553e90a53Smrg
34653e90a53Smrg  # Remove the call to Libtool.
34753e90a53Smrg  if test "$libtool" = yes; then
34853e90a53Smrg    while test $1 != '--mode=compile'; do
34953e90a53Smrg      shift
35053e90a53Smrg    done
35153e90a53Smrg    shift
35253e90a53Smrg  fi
35353e90a53Smrg
35453e90a53Smrg  # Remove `-o $object'.
35553e90a53Smrg  IFS=" "
35653e90a53Smrg  for arg
35753e90a53Smrg  do
35853e90a53Smrg    case $arg in
35953e90a53Smrg    -o)
36053e90a53Smrg      shift
36153e90a53Smrg      ;;
36253e90a53Smrg    $object)
36353e90a53Smrg      shift
36453e90a53Smrg      ;;
36553e90a53Smrg    *)
36653e90a53Smrg      set fnord "$@" "$arg"
36753e90a53Smrg      shift # fnord
36853e90a53Smrg      shift # $arg
36953e90a53Smrg      ;;
37053e90a53Smrg    esac
37153e90a53Smrg  done
37253e90a53Smrg
37353e90a53Smrg  test -z "$dashmflag" && dashmflag=-M
37453e90a53Smrg  # Require at least two characters before searching for `:'
37553e90a53Smrg  # in the target name.  This is to cope with DOS-style filenames:
37653e90a53Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
37753e90a53Smrg  "$@" $dashmflag |
37853e90a53Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
37953e90a53Smrg  rm -f "$depfile"
38053e90a53Smrg  cat < "$tmpdepfile" > "$depfile"
38153e90a53Smrg  tr ' ' '
38253e90a53Smrg' < "$tmpdepfile" | \
38353e90a53Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
38453e90a53Smrg## correctly.  Breaking it into two sed invocations is a workaround.
38553e90a53Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
38653e90a53Smrg  rm -f "$tmpdepfile"
38753e90a53Smrg  ;;
38853e90a53Smrg
38953e90a53SmrgdashXmstdout)
39053e90a53Smrg  # This case only exists to satisfy depend.m4.  It is never actually
39153e90a53Smrg  # run, as this mode is specially recognized in the preamble.
39253e90a53Smrg  exit 1
39353e90a53Smrg  ;;
39453e90a53Smrg
39553e90a53Smrgmakedepend)
39653e90a53Smrg  "$@" || exit $?
39753e90a53Smrg  # Remove any Libtool call
39853e90a53Smrg  if test "$libtool" = yes; then
39953e90a53Smrg    while test $1 != '--mode=compile'; do
40053e90a53Smrg      shift
40153e90a53Smrg    done
40253e90a53Smrg    shift
40353e90a53Smrg  fi
40453e90a53Smrg  # X makedepend
40553e90a53Smrg  shift
40653e90a53Smrg  cleared=no
40753e90a53Smrg  for arg in "$@"; do
40853e90a53Smrg    case $cleared in
40953e90a53Smrg    no)
41053e90a53Smrg      set ""; shift
41153e90a53Smrg      cleared=yes ;;
41253e90a53Smrg    esac
41353e90a53Smrg    case "$arg" in
41453e90a53Smrg    -D*|-I*)
41553e90a53Smrg      set fnord "$@" "$arg"; shift ;;
41653e90a53Smrg    # Strip any option that makedepend may not understand.  Remove
41753e90a53Smrg    # the object too, otherwise makedepend will parse it as a source file.
41853e90a53Smrg    -*|$object)
41953e90a53Smrg      ;;
42053e90a53Smrg    *)
42153e90a53Smrg      set fnord "$@" "$arg"; shift ;;
42253e90a53Smrg    esac
42353e90a53Smrg  done
42453e90a53Smrg  obj_suffix="`echo $object | sed 's/^.*\././'`"
42553e90a53Smrg  touch "$tmpdepfile"
42653e90a53Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
42753e90a53Smrg  rm -f "$depfile"
42853e90a53Smrg  cat < "$tmpdepfile" > "$depfile"
42953e90a53Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
43053e90a53Smrg' | \
43153e90a53Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
43253e90a53Smrg## correctly.  Breaking it into two sed invocations is a workaround.
43353e90a53Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
43453e90a53Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
43553e90a53Smrg  ;;
43653e90a53Smrg
43753e90a53Smrgcpp)
43853e90a53Smrg  # Important note: in order to support this mode, a compiler *must*
43953e90a53Smrg  # always write the preprocessed file to stdout.
44053e90a53Smrg  "$@" || exit $?
44153e90a53Smrg
44253e90a53Smrg  # Remove the call to Libtool.
44353e90a53Smrg  if test "$libtool" = yes; then
44453e90a53Smrg    while test $1 != '--mode=compile'; do
44553e90a53Smrg      shift
44653e90a53Smrg    done
44753e90a53Smrg    shift
44853e90a53Smrg  fi
44953e90a53Smrg
45053e90a53Smrg  # Remove `-o $object'.
45153e90a53Smrg  IFS=" "
45253e90a53Smrg  for arg
45353e90a53Smrg  do
45453e90a53Smrg    case $arg in
45553e90a53Smrg    -o)
45653e90a53Smrg      shift
45753e90a53Smrg      ;;
45853e90a53Smrg    $object)
45953e90a53Smrg      shift
46053e90a53Smrg      ;;
46153e90a53Smrg    *)
46253e90a53Smrg      set fnord "$@" "$arg"
46353e90a53Smrg      shift # fnord
46453e90a53Smrg      shift # $arg
46553e90a53Smrg      ;;
46653e90a53Smrg    esac
46753e90a53Smrg  done
46853e90a53Smrg
46953e90a53Smrg  "$@" -E |
47053e90a53Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
47153e90a53Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
47253e90a53Smrg    sed '$ s: \\$::' > "$tmpdepfile"
47353e90a53Smrg  rm -f "$depfile"
47453e90a53Smrg  echo "$object : \\" > "$depfile"
47553e90a53Smrg  cat < "$tmpdepfile" >> "$depfile"
47653e90a53Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
47753e90a53Smrg  rm -f "$tmpdepfile"
47853e90a53Smrg  ;;
47953e90a53Smrg
48053e90a53Smrgmsvisualcpp)
48153e90a53Smrg  # Important note: in order to support this mode, a compiler *must*
48253e90a53Smrg  # always write the preprocessed file to stdout, regardless of -o,
48353e90a53Smrg  # because we must use -o when running libtool.
48453e90a53Smrg  "$@" || exit $?
48553e90a53Smrg  IFS=" "
48653e90a53Smrg  for arg
48753e90a53Smrg  do
48853e90a53Smrg    case "$arg" in
48953e90a53Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
49053e90a53Smrg	set fnord "$@"
49153e90a53Smrg	shift
49253e90a53Smrg	shift
49353e90a53Smrg	;;
49453e90a53Smrg    *)
49553e90a53Smrg	set fnord "$@" "$arg"
49653e90a53Smrg	shift
49753e90a53Smrg	shift
49853e90a53Smrg	;;
49953e90a53Smrg    esac
50053e90a53Smrg  done
50153e90a53Smrg  "$@" -E |
50253e90a53Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
50353e90a53Smrg  rm -f "$depfile"
50453e90a53Smrg  echo "$object : \\" > "$depfile"
50553e90a53Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
50653e90a53Smrg  echo "	" >> "$depfile"
50753e90a53Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
50853e90a53Smrg  rm -f "$tmpdepfile"
50953e90a53Smrg  ;;
51053e90a53Smrg
51153e90a53Smrgnone)
51253e90a53Smrg  exec "$@"
51353e90a53Smrg  ;;
51453e90a53Smrg
51553e90a53Smrg*)
51653e90a53Smrg  echo "Unknown depmode $depmode" 1>&2
51753e90a53Smrg  exit 1
51853e90a53Smrg  ;;
51953e90a53Smrgesac
52053e90a53Smrg
52153e90a53Smrgexit 0
52253e90a53Smrg
52353e90a53Smrg# Local Variables:
52453e90a53Smrg# mode: shell-script
52553e90a53Smrg# sh-indentation: 2
52653e90a53Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
52753e90a53Smrg# time-stamp-start: "scriptversion="
52853e90a53Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
52953e90a53Smrg# time-stamp-end: "$"
53053e90a53Smrg# End:
531