depcomp revision 33c89af1
133c89af1Smrg#! /bin/sh
233c89af1Smrg# depcomp - compile a program generating dependencies as side-effects
333c89af1Smrg
433c89af1Smrgscriptversion=2005-07-09.11
533c89af1Smrg
633c89af1Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
733c89af1Smrg
833c89af1Smrg# This program is free software; you can redistribute it and/or modify
933c89af1Smrg# it under the terms of the GNU General Public License as published by
1033c89af1Smrg# the Free Software Foundation; either version 2, or (at your option)
1133c89af1Smrg# any later version.
1233c89af1Smrg
1333c89af1Smrg# This program is distributed in the hope that it will be useful,
1433c89af1Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
1533c89af1Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1633c89af1Smrg# GNU General Public License for more details.
1733c89af1Smrg
1833c89af1Smrg# You should have received a copy of the GNU General Public License
1933c89af1Smrg# along with this program; if not, write to the Free Software
2033c89af1Smrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
2133c89af1Smrg# 02110-1301, USA.
2233c89af1Smrg
2333c89af1Smrg# As a special exception to the GNU General Public License, if you
2433c89af1Smrg# distribute this file as part of a program that contains a
2533c89af1Smrg# configuration script generated by Autoconf, you may include it under
2633c89af1Smrg# the same distribution terms that you use for the rest of that program.
2733c89af1Smrg
2833c89af1Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
2933c89af1Smrg
3033c89af1Smrgcase $1 in
3133c89af1Smrg  '')
3233c89af1Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
3333c89af1Smrg     exit 1;
3433c89af1Smrg     ;;
3533c89af1Smrg  -h | --h*)
3633c89af1Smrg    cat <<\EOF
3733c89af1SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
3833c89af1Smrg
3933c89af1SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
4033c89af1Smrgas side-effects.
4133c89af1Smrg
4233c89af1SmrgEnvironment variables:
4333c89af1Smrg  depmode     Dependency tracking mode.
4433c89af1Smrg  source      Source file read by `PROGRAMS ARGS'.
4533c89af1Smrg  object      Object file output by `PROGRAMS ARGS'.
4633c89af1Smrg  DEPDIR      directory where to store dependencies.
4733c89af1Smrg  depfile     Dependency file to output.
4833c89af1Smrg  tmpdepfile  Temporary file to use when outputing dependencies.
4933c89af1Smrg  libtool     Whether libtool is used (yes/no).
5033c89af1Smrg
5133c89af1SmrgReport bugs to <bug-automake@gnu.org>.
5233c89af1SmrgEOF
5333c89af1Smrg    exit $?
5433c89af1Smrg    ;;
5533c89af1Smrg  -v | --v*)
5633c89af1Smrg    echo "depcomp $scriptversion"
5733c89af1Smrg    exit $?
5833c89af1Smrg    ;;
5933c89af1Smrgesac
6033c89af1Smrg
6133c89af1Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
6233c89af1Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
6333c89af1Smrg  exit 1
6433c89af1Smrgfi
6533c89af1Smrg
6633c89af1Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
6733c89af1Smrgdepfile=${depfile-`echo "$object" |
6833c89af1Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
6933c89af1Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
7033c89af1Smrg
7133c89af1Smrgrm -f "$tmpdepfile"
7233c89af1Smrg
7333c89af1Smrg# Some modes work just like other modes, but use different flags.  We
7433c89af1Smrg# parameterize here, but still list the modes in the big case below,
7533c89af1Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
7633c89af1Smrg# here, because this file can only contain one case statement.
7733c89af1Smrgif test "$depmode" = hp; then
7833c89af1Smrg  # HP compiler uses -M and no extra arg.
7933c89af1Smrg  gccflag=-M
8033c89af1Smrg  depmode=gcc
8133c89af1Smrgfi
8233c89af1Smrg
8333c89af1Smrgif test "$depmode" = dashXmstdout; then
8433c89af1Smrg   # This is just like dashmstdout with a different argument.
8533c89af1Smrg   dashmflag=-xM
8633c89af1Smrg   depmode=dashmstdout
8733c89af1Smrgfi
8833c89af1Smrg
8933c89af1Smrgcase "$depmode" in
9033c89af1Smrggcc3)
9133c89af1Smrg## gcc 3 implements dependency tracking that does exactly what
9233c89af1Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
9333c89af1Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
9433c89af1Smrg  "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
9533c89af1Smrg  stat=$?
9633c89af1Smrg  if test $stat -eq 0; then :
9733c89af1Smrg  else
9833c89af1Smrg    rm -f "$tmpdepfile"
9933c89af1Smrg    exit $stat
10033c89af1Smrg  fi
10133c89af1Smrg  mv "$tmpdepfile" "$depfile"
10233c89af1Smrg  ;;
10333c89af1Smrg
10433c89af1Smrggcc)
10533c89af1Smrg## There are various ways to get dependency output from gcc.  Here's
10633c89af1Smrg## why we pick this rather obscure method:
10733c89af1Smrg## - Don't want to use -MD because we'd like the dependencies to end
10833c89af1Smrg##   up in a subdir.  Having to rename by hand is ugly.
10933c89af1Smrg##   (We might end up doing this anyway to support other compilers.)
11033c89af1Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
11133c89af1Smrg##   -MM, not -M (despite what the docs say).
11233c89af1Smrg## - Using -M directly means running the compiler twice (even worse
11333c89af1Smrg##   than renaming).
11433c89af1Smrg  if test -z "$gccflag"; then
11533c89af1Smrg    gccflag=-MD,
11633c89af1Smrg  fi
11733c89af1Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
11833c89af1Smrg  stat=$?
11933c89af1Smrg  if test $stat -eq 0; then :
12033c89af1Smrg  else
12133c89af1Smrg    rm -f "$tmpdepfile"
12233c89af1Smrg    exit $stat
12333c89af1Smrg  fi
12433c89af1Smrg  rm -f "$depfile"
12533c89af1Smrg  echo "$object : \\" > "$depfile"
12633c89af1Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
12733c89af1Smrg## The second -e expression handles DOS-style file names with drive letters.
12833c89af1Smrg  sed -e 's/^[^:]*: / /' \
12933c89af1Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
13033c89af1Smrg## This next piece of magic avoids the `deleted header file' problem.
13133c89af1Smrg## The problem is that when a header file which appears in a .P file
13233c89af1Smrg## is deleted, the dependency causes make to die (because there is
13333c89af1Smrg## typically no way to rebuild the header).  We avoid this by adding
13433c89af1Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
13533c89af1Smrg## this for us directly.
13633c89af1Smrg  tr ' ' '
13733c89af1Smrg' < "$tmpdepfile" |
13833c89af1Smrg## Some versions of gcc put a space before the `:'.  On the theory
13933c89af1Smrg## that the space means something, we add a space to the output as
14033c89af1Smrg## well.
14133c89af1Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
14233c89af1Smrg## correctly.  Breaking it into two sed invocations is a workaround.
14333c89af1Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
14433c89af1Smrg  rm -f "$tmpdepfile"
14533c89af1Smrg  ;;
14633c89af1Smrg
14733c89af1Smrghp)
14833c89af1Smrg  # This case exists only to let depend.m4 do its work.  It works by
14933c89af1Smrg  # looking at the text of this script.  This case will never be run,
15033c89af1Smrg  # since it is checked for above.
15133c89af1Smrg  exit 1
15233c89af1Smrg  ;;
15333c89af1Smrg
15433c89af1Smrgsgi)
15533c89af1Smrg  if test "$libtool" = yes; then
15633c89af1Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
15733c89af1Smrg  else
15833c89af1Smrg    "$@" -MDupdate "$tmpdepfile"
15933c89af1Smrg  fi
16033c89af1Smrg  stat=$?
16133c89af1Smrg  if test $stat -eq 0; then :
16233c89af1Smrg  else
16333c89af1Smrg    rm -f "$tmpdepfile"
16433c89af1Smrg    exit $stat
16533c89af1Smrg  fi
16633c89af1Smrg  rm -f "$depfile"
16733c89af1Smrg
16833c89af1Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
16933c89af1Smrg    echo "$object : \\" > "$depfile"
17033c89af1Smrg
17133c89af1Smrg    # Clip off the initial element (the dependent).  Don't try to be
17233c89af1Smrg    # clever and replace this with sed code, as IRIX sed won't handle
17333c89af1Smrg    # lines with more than a fixed number of characters (4096 in
17433c89af1Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
17533c89af1Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
17633c89af1Smrg    # dependency line.
17733c89af1Smrg    tr ' ' '
17833c89af1Smrg' < "$tmpdepfile" \
17933c89af1Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
18033c89af1Smrg    tr '
18133c89af1Smrg' ' ' >> $depfile
18233c89af1Smrg    echo >> $depfile
18333c89af1Smrg
18433c89af1Smrg    # The second pass generates a dummy entry for each header file.
18533c89af1Smrg    tr ' ' '
18633c89af1Smrg' < "$tmpdepfile" \
18733c89af1Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
18833c89af1Smrg   >> $depfile
18933c89af1Smrg  else
19033c89af1Smrg    # The sourcefile does not contain any dependencies, so just
19133c89af1Smrg    # store a dummy comment line, to avoid errors with the Makefile
19233c89af1Smrg    # "include basename.Plo" scheme.
19333c89af1Smrg    echo "#dummy" > "$depfile"
19433c89af1Smrg  fi
19533c89af1Smrg  rm -f "$tmpdepfile"
19633c89af1Smrg  ;;
19733c89af1Smrg
19833c89af1Smrgaix)
19933c89af1Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
20033c89af1Smrg  # in a .u file.  In older versions, this file always lives in the
20133c89af1Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
20233c89af1Smrg  # start of each line; $object doesn't have directory information.
20333c89af1Smrg  # Version 6 uses the directory in both cases.
20433c89af1Smrg  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
20533c89af1Smrg  tmpdepfile="$stripped.u"
20633c89af1Smrg  if test "$libtool" = yes; then
20733c89af1Smrg    "$@" -Wc,-M
20833c89af1Smrg  else
20933c89af1Smrg    "$@" -M
21033c89af1Smrg  fi
21133c89af1Smrg  stat=$?
21233c89af1Smrg
21333c89af1Smrg  if test -f "$tmpdepfile"; then :
21433c89af1Smrg  else
21533c89af1Smrg    stripped=`echo "$stripped" | sed 's,^.*/,,'`
21633c89af1Smrg    tmpdepfile="$stripped.u"
21733c89af1Smrg  fi
21833c89af1Smrg
21933c89af1Smrg  if test $stat -eq 0; then :
22033c89af1Smrg  else
22133c89af1Smrg    rm -f "$tmpdepfile"
22233c89af1Smrg    exit $stat
22333c89af1Smrg  fi
22433c89af1Smrg
22533c89af1Smrg  if test -f "$tmpdepfile"; then
22633c89af1Smrg    outname="$stripped.o"
22733c89af1Smrg    # Each line is of the form `foo.o: dependent.h'.
22833c89af1Smrg    # Do two passes, one to just change these to
22933c89af1Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
23033c89af1Smrg    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
23133c89af1Smrg    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
23233c89af1Smrg  else
23333c89af1Smrg    # The sourcefile does not contain any dependencies, so just
23433c89af1Smrg    # store a dummy comment line, to avoid errors with the Makefile
23533c89af1Smrg    # "include basename.Plo" scheme.
23633c89af1Smrg    echo "#dummy" > "$depfile"
23733c89af1Smrg  fi
23833c89af1Smrg  rm -f "$tmpdepfile"
23933c89af1Smrg  ;;
24033c89af1Smrg
24133c89af1Smrgicc)
24233c89af1Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
24333c89af1Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
24433c89af1Smrg  # ICC 7.0 will fill foo.d with something like
24533c89af1Smrg  #    foo.o: sub/foo.c
24633c89af1Smrg  #    foo.o: sub/foo.h
24733c89af1Smrg  # which is wrong.  We want:
24833c89af1Smrg  #    sub/foo.o: sub/foo.c
24933c89af1Smrg  #    sub/foo.o: sub/foo.h
25033c89af1Smrg  #    sub/foo.c:
25133c89af1Smrg  #    sub/foo.h:
25233c89af1Smrg  # ICC 7.1 will output
25333c89af1Smrg  #    foo.o: sub/foo.c sub/foo.h
25433c89af1Smrg  # and will wrap long lines using \ :
25533c89af1Smrg  #    foo.o: sub/foo.c ... \
25633c89af1Smrg  #     sub/foo.h ... \
25733c89af1Smrg  #     ...
25833c89af1Smrg
25933c89af1Smrg  "$@" -MD -MF "$tmpdepfile"
26033c89af1Smrg  stat=$?
26133c89af1Smrg  if test $stat -eq 0; then :
26233c89af1Smrg  else
26333c89af1Smrg    rm -f "$tmpdepfile"
26433c89af1Smrg    exit $stat
26533c89af1Smrg  fi
26633c89af1Smrg  rm -f "$depfile"
26733c89af1Smrg  # Each line is of the form `foo.o: dependent.h',
26833c89af1Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
26933c89af1Smrg  # Do two passes, one to just change these to
27033c89af1Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
27133c89af1Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
27233c89af1Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
27333c89af1Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
27433c89af1Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
27533c89af1Smrg    sed -e 's/$/ :/' >> "$depfile"
27633c89af1Smrg  rm -f "$tmpdepfile"
27733c89af1Smrg  ;;
27833c89af1Smrg
27933c89af1Smrgtru64)
28033c89af1Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
28133c89af1Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
28233c89af1Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
28333c89af1Smrg   # dependencies in `foo.d' instead, so we check for that too.
28433c89af1Smrg   # Subdirectories are respected.
28533c89af1Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
28633c89af1Smrg   test "x$dir" = "x$object" && dir=
28733c89af1Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
28833c89af1Smrg
28933c89af1Smrg   if test "$libtool" = yes; then
29033c89af1Smrg      # With Tru64 cc, shared objects can also be used to make a
29133c89af1Smrg      # static library.  This mecanism is used in libtool 1.4 series to
29233c89af1Smrg      # handle both shared and static libraries in a single compilation.
29333c89af1Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
29433c89af1Smrg      #
29533c89af1Smrg      # With libtool 1.5 this exception was removed, and libtool now
29633c89af1Smrg      # generates 2 separate objects for the 2 libraries.  These two
29733c89af1Smrg      # compilations output dependencies in in $dir.libs/$base.o.d and
29833c89af1Smrg      # in $dir$base.o.d.  We have to check for both files, because
29933c89af1Smrg      # one of the two compilations can be disabled.  We should prefer
30033c89af1Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
30133c89af1Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
30233c89af1Smrg      # the former would cause a distcleancheck panic.
30333c89af1Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
30433c89af1Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
30533c89af1Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
30633c89af1Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
30733c89af1Smrg      "$@" -Wc,-MD
30833c89af1Smrg   else
30933c89af1Smrg      tmpdepfile1=$dir$base.o.d
31033c89af1Smrg      tmpdepfile2=$dir$base.d
31133c89af1Smrg      tmpdepfile3=$dir$base.d
31233c89af1Smrg      tmpdepfile4=$dir$base.d
31333c89af1Smrg      "$@" -MD
31433c89af1Smrg   fi
31533c89af1Smrg
31633c89af1Smrg   stat=$?
31733c89af1Smrg   if test $stat -eq 0; then :
31833c89af1Smrg   else
31933c89af1Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
32033c89af1Smrg      exit $stat
32133c89af1Smrg   fi
32233c89af1Smrg
32333c89af1Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
32433c89af1Smrg   do
32533c89af1Smrg     test -f "$tmpdepfile" && break
32633c89af1Smrg   done
32733c89af1Smrg   if test -f "$tmpdepfile"; then
32833c89af1Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
32933c89af1Smrg      # That's a tab and a space in the [].
33033c89af1Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
33133c89af1Smrg   else
33233c89af1Smrg      echo "#dummy" > "$depfile"
33333c89af1Smrg   fi
33433c89af1Smrg   rm -f "$tmpdepfile"
33533c89af1Smrg   ;;
33633c89af1Smrg
33733c89af1Smrg#nosideeffect)
33833c89af1Smrg  # This comment above is used by automake to tell side-effect
33933c89af1Smrg  # dependency tracking mechanisms from slower ones.
34033c89af1Smrg
34133c89af1Smrgdashmstdout)
34233c89af1Smrg  # Important note: in order to support this mode, a compiler *must*
34333c89af1Smrg  # always write the preprocessed file to stdout, regardless of -o.
34433c89af1Smrg  "$@" || exit $?
34533c89af1Smrg
34633c89af1Smrg  # Remove the call to Libtool.
34733c89af1Smrg  if test "$libtool" = yes; then
34833c89af1Smrg    while test $1 != '--mode=compile'; do
34933c89af1Smrg      shift
35033c89af1Smrg    done
35133c89af1Smrg    shift
35233c89af1Smrg  fi
35333c89af1Smrg
35433c89af1Smrg  # Remove `-o $object'.
35533c89af1Smrg  IFS=" "
35633c89af1Smrg  for arg
35733c89af1Smrg  do
35833c89af1Smrg    case $arg in
35933c89af1Smrg    -o)
36033c89af1Smrg      shift
36133c89af1Smrg      ;;
36233c89af1Smrg    $object)
36333c89af1Smrg      shift
36433c89af1Smrg      ;;
36533c89af1Smrg    *)
36633c89af1Smrg      set fnord "$@" "$arg"
36733c89af1Smrg      shift # fnord
36833c89af1Smrg      shift # $arg
36933c89af1Smrg      ;;
37033c89af1Smrg    esac
37133c89af1Smrg  done
37233c89af1Smrg
37333c89af1Smrg  test -z "$dashmflag" && dashmflag=-M
37433c89af1Smrg  # Require at least two characters before searching for `:'
37533c89af1Smrg  # in the target name.  This is to cope with DOS-style filenames:
37633c89af1Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
37733c89af1Smrg  "$@" $dashmflag |
37833c89af1Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
37933c89af1Smrg  rm -f "$depfile"
38033c89af1Smrg  cat < "$tmpdepfile" > "$depfile"
38133c89af1Smrg  tr ' ' '
38233c89af1Smrg' < "$tmpdepfile" | \
38333c89af1Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
38433c89af1Smrg## correctly.  Breaking it into two sed invocations is a workaround.
38533c89af1Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
38633c89af1Smrg  rm -f "$tmpdepfile"
38733c89af1Smrg  ;;
38833c89af1Smrg
38933c89af1SmrgdashXmstdout)
39033c89af1Smrg  # This case only exists to satisfy depend.m4.  It is never actually
39133c89af1Smrg  # run, as this mode is specially recognized in the preamble.
39233c89af1Smrg  exit 1
39333c89af1Smrg  ;;
39433c89af1Smrg
39533c89af1Smrgmakedepend)
39633c89af1Smrg  "$@" || exit $?
39733c89af1Smrg  # Remove any Libtool call
39833c89af1Smrg  if test "$libtool" = yes; then
39933c89af1Smrg    while test $1 != '--mode=compile'; do
40033c89af1Smrg      shift
40133c89af1Smrg    done
40233c89af1Smrg    shift
40333c89af1Smrg  fi
40433c89af1Smrg  # X makedepend
40533c89af1Smrg  shift
40633c89af1Smrg  cleared=no
40733c89af1Smrg  for arg in "$@"; do
40833c89af1Smrg    case $cleared in
40933c89af1Smrg    no)
41033c89af1Smrg      set ""; shift
41133c89af1Smrg      cleared=yes ;;
41233c89af1Smrg    esac
41333c89af1Smrg    case "$arg" in
41433c89af1Smrg    -D*|-I*)
41533c89af1Smrg      set fnord "$@" "$arg"; shift ;;
41633c89af1Smrg    # Strip any option that makedepend may not understand.  Remove
41733c89af1Smrg    # the object too, otherwise makedepend will parse it as a source file.
41833c89af1Smrg    -*|$object)
41933c89af1Smrg      ;;
42033c89af1Smrg    *)
42133c89af1Smrg      set fnord "$@" "$arg"; shift ;;
42233c89af1Smrg    esac
42333c89af1Smrg  done
42433c89af1Smrg  obj_suffix="`echo $object | sed 's/^.*\././'`"
42533c89af1Smrg  touch "$tmpdepfile"
42633c89af1Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
42733c89af1Smrg  rm -f "$depfile"
42833c89af1Smrg  cat < "$tmpdepfile" > "$depfile"
42933c89af1Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
43033c89af1Smrg' | \
43133c89af1Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
43233c89af1Smrg## correctly.  Breaking it into two sed invocations is a workaround.
43333c89af1Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
43433c89af1Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
43533c89af1Smrg  ;;
43633c89af1Smrg
43733c89af1Smrgcpp)
43833c89af1Smrg  # Important note: in order to support this mode, a compiler *must*
43933c89af1Smrg  # always write the preprocessed file to stdout.
44033c89af1Smrg  "$@" || exit $?
44133c89af1Smrg
44233c89af1Smrg  # Remove the call to Libtool.
44333c89af1Smrg  if test "$libtool" = yes; then
44433c89af1Smrg    while test $1 != '--mode=compile'; do
44533c89af1Smrg      shift
44633c89af1Smrg    done
44733c89af1Smrg    shift
44833c89af1Smrg  fi
44933c89af1Smrg
45033c89af1Smrg  # Remove `-o $object'.
45133c89af1Smrg  IFS=" "
45233c89af1Smrg  for arg
45333c89af1Smrg  do
45433c89af1Smrg    case $arg in
45533c89af1Smrg    -o)
45633c89af1Smrg      shift
45733c89af1Smrg      ;;
45833c89af1Smrg    $object)
45933c89af1Smrg      shift
46033c89af1Smrg      ;;
46133c89af1Smrg    *)
46233c89af1Smrg      set fnord "$@" "$arg"
46333c89af1Smrg      shift # fnord
46433c89af1Smrg      shift # $arg
46533c89af1Smrg      ;;
46633c89af1Smrg    esac
46733c89af1Smrg  done
46833c89af1Smrg
46933c89af1Smrg  "$@" -E |
47033c89af1Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
47133c89af1Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
47233c89af1Smrg    sed '$ s: \\$::' > "$tmpdepfile"
47333c89af1Smrg  rm -f "$depfile"
47433c89af1Smrg  echo "$object : \\" > "$depfile"
47533c89af1Smrg  cat < "$tmpdepfile" >> "$depfile"
47633c89af1Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
47733c89af1Smrg  rm -f "$tmpdepfile"
47833c89af1Smrg  ;;
47933c89af1Smrg
48033c89af1Smrgmsvisualcpp)
48133c89af1Smrg  # Important note: in order to support this mode, a compiler *must*
48233c89af1Smrg  # always write the preprocessed file to stdout, regardless of -o,
48333c89af1Smrg  # because we must use -o when running libtool.
48433c89af1Smrg  "$@" || exit $?
48533c89af1Smrg  IFS=" "
48633c89af1Smrg  for arg
48733c89af1Smrg  do
48833c89af1Smrg    case "$arg" in
48933c89af1Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
49033c89af1Smrg	set fnord "$@"
49133c89af1Smrg	shift
49233c89af1Smrg	shift
49333c89af1Smrg	;;
49433c89af1Smrg    *)
49533c89af1Smrg	set fnord "$@" "$arg"
49633c89af1Smrg	shift
49733c89af1Smrg	shift
49833c89af1Smrg	;;
49933c89af1Smrg    esac
50033c89af1Smrg  done
50133c89af1Smrg  "$@" -E |
50233c89af1Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
50333c89af1Smrg  rm -f "$depfile"
50433c89af1Smrg  echo "$object : \\" > "$depfile"
50533c89af1Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
50633c89af1Smrg  echo "	" >> "$depfile"
50733c89af1Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
50833c89af1Smrg  rm -f "$tmpdepfile"
50933c89af1Smrg  ;;
51033c89af1Smrg
51133c89af1Smrgnone)
51233c89af1Smrg  exec "$@"
51333c89af1Smrg  ;;
51433c89af1Smrg
51533c89af1Smrg*)
51633c89af1Smrg  echo "Unknown depmode $depmode" 1>&2
51733c89af1Smrg  exit 1
51833c89af1Smrg  ;;
51933c89af1Smrgesac
52033c89af1Smrg
52133c89af1Smrgexit 0
52233c89af1Smrg
52333c89af1Smrg# Local Variables:
52433c89af1Smrg# mode: shell-script
52533c89af1Smrg# sh-indentation: 2
52633c89af1Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
52733c89af1Smrg# time-stamp-start: "scriptversion="
52833c89af1Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
52933c89af1Smrg# time-stamp-end: "$"
53033c89af1Smrg# End:
531