depcomp revision 45bc899b
145bc899bSmrg#! /bin/sh
245bc899bSmrg# depcomp - compile a program generating dependencies as side-effects
345bc899bSmrg
445bc899bSmrgscriptversion=2005-07-09.11
545bc899bSmrg
645bc899bSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
745bc899bSmrg
845bc899bSmrg# This program is free software; you can redistribute it and/or modify
945bc899bSmrg# it under the terms of the GNU General Public License as published by
1045bc899bSmrg# the Free Software Foundation; either version 2, or (at your option)
1145bc899bSmrg# any later version.
1245bc899bSmrg
1345bc899bSmrg# This program is distributed in the hope that it will be useful,
1445bc899bSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
1545bc899bSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1645bc899bSmrg# GNU General Public License for more details.
1745bc899bSmrg
1845bc899bSmrg# You should have received a copy of the GNU General Public License
1945bc899bSmrg# along with this program; if not, write to the Free Software
2045bc899bSmrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
2145bc899bSmrg# 02110-1301, USA.
2245bc899bSmrg
2345bc899bSmrg# As a special exception to the GNU General Public License, if you
2445bc899bSmrg# distribute this file as part of a program that contains a
2545bc899bSmrg# configuration script generated by Autoconf, you may include it under
2645bc899bSmrg# the same distribution terms that you use for the rest of that program.
2745bc899bSmrg
2845bc899bSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
2945bc899bSmrg
3045bc899bSmrgcase $1 in
3145bc899bSmrg  '')
3245bc899bSmrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
3345bc899bSmrg     exit 1;
3445bc899bSmrg     ;;
3545bc899bSmrg  -h | --h*)
3645bc899bSmrg    cat <<\EOF
3745bc899bSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
3845bc899bSmrg
3945bc899bSmrgRun PROGRAMS ARGS to compile a file, generating dependencies
4045bc899bSmrgas side-effects.
4145bc899bSmrg
4245bc899bSmrgEnvironment variables:
4345bc899bSmrg  depmode     Dependency tracking mode.
4445bc899bSmrg  source      Source file read by `PROGRAMS ARGS'.
4545bc899bSmrg  object      Object file output by `PROGRAMS ARGS'.
4645bc899bSmrg  DEPDIR      directory where to store dependencies.
4745bc899bSmrg  depfile     Dependency file to output.
4845bc899bSmrg  tmpdepfile  Temporary file to use when outputing dependencies.
4945bc899bSmrg  libtool     Whether libtool is used (yes/no).
5045bc899bSmrg
5145bc899bSmrgReport bugs to <bug-automake@gnu.org>.
5245bc899bSmrgEOF
5345bc899bSmrg    exit $?
5445bc899bSmrg    ;;
5545bc899bSmrg  -v | --v*)
5645bc899bSmrg    echo "depcomp $scriptversion"
5745bc899bSmrg    exit $?
5845bc899bSmrg    ;;
5945bc899bSmrgesac
6045bc899bSmrg
6145bc899bSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
6245bc899bSmrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
6345bc899bSmrg  exit 1
6445bc899bSmrgfi
6545bc899bSmrg
6645bc899bSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
6745bc899bSmrgdepfile=${depfile-`echo "$object" |
6845bc899bSmrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
6945bc899bSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
7045bc899bSmrg
7145bc899bSmrgrm -f "$tmpdepfile"
7245bc899bSmrg
7345bc899bSmrg# Some modes work just like other modes, but use different flags.  We
7445bc899bSmrg# parameterize here, but still list the modes in the big case below,
7545bc899bSmrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
7645bc899bSmrg# here, because this file can only contain one case statement.
7745bc899bSmrgif test "$depmode" = hp; then
7845bc899bSmrg  # HP compiler uses -M and no extra arg.
7945bc899bSmrg  gccflag=-M
8045bc899bSmrg  depmode=gcc
8145bc899bSmrgfi
8245bc899bSmrg
8345bc899bSmrgif test "$depmode" = dashXmstdout; then
8445bc899bSmrg   # This is just like dashmstdout with a different argument.
8545bc899bSmrg   dashmflag=-xM
8645bc899bSmrg   depmode=dashmstdout
8745bc899bSmrgfi
8845bc899bSmrg
8945bc899bSmrgcase "$depmode" in
9045bc899bSmrggcc3)
9145bc899bSmrg## gcc 3 implements dependency tracking that does exactly what
9245bc899bSmrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
9345bc899bSmrg## it if -MD -MP comes after the -MF stuff.  Hmm.
9445bc899bSmrg  "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
9545bc899bSmrg  stat=$?
9645bc899bSmrg  if test $stat -eq 0; then :
9745bc899bSmrg  else
9845bc899bSmrg    rm -f "$tmpdepfile"
9945bc899bSmrg    exit $stat
10045bc899bSmrg  fi
10145bc899bSmrg  mv "$tmpdepfile" "$depfile"
10245bc899bSmrg  ;;
10345bc899bSmrg
10445bc899bSmrggcc)
10545bc899bSmrg## There are various ways to get dependency output from gcc.  Here's
10645bc899bSmrg## why we pick this rather obscure method:
10745bc899bSmrg## - Don't want to use -MD because we'd like the dependencies to end
10845bc899bSmrg##   up in a subdir.  Having to rename by hand is ugly.
10945bc899bSmrg##   (We might end up doing this anyway to support other compilers.)
11045bc899bSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
11145bc899bSmrg##   -MM, not -M (despite what the docs say).
11245bc899bSmrg## - Using -M directly means running the compiler twice (even worse
11345bc899bSmrg##   than renaming).
11445bc899bSmrg  if test -z "$gccflag"; then
11545bc899bSmrg    gccflag=-MD,
11645bc899bSmrg  fi
11745bc899bSmrg  "$@" -Wp,"$gccflag$tmpdepfile"
11845bc899bSmrg  stat=$?
11945bc899bSmrg  if test $stat -eq 0; then :
12045bc899bSmrg  else
12145bc899bSmrg    rm -f "$tmpdepfile"
12245bc899bSmrg    exit $stat
12345bc899bSmrg  fi
12445bc899bSmrg  rm -f "$depfile"
12545bc899bSmrg  echo "$object : \\" > "$depfile"
12645bc899bSmrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
12745bc899bSmrg## The second -e expression handles DOS-style file names with drive letters.
12845bc899bSmrg  sed -e 's/^[^:]*: / /' \
12945bc899bSmrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
13045bc899bSmrg## This next piece of magic avoids the `deleted header file' problem.
13145bc899bSmrg## The problem is that when a header file which appears in a .P file
13245bc899bSmrg## is deleted, the dependency causes make to die (because there is
13345bc899bSmrg## typically no way to rebuild the header).  We avoid this by adding
13445bc899bSmrg## dummy dependencies for each header file.  Too bad gcc doesn't do
13545bc899bSmrg## this for us directly.
13645bc899bSmrg  tr ' ' '
13745bc899bSmrg' < "$tmpdepfile" |
13845bc899bSmrg## Some versions of gcc put a space before the `:'.  On the theory
13945bc899bSmrg## that the space means something, we add a space to the output as
14045bc899bSmrg## well.
14145bc899bSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
14245bc899bSmrg## correctly.  Breaking it into two sed invocations is a workaround.
14345bc899bSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
14445bc899bSmrg  rm -f "$tmpdepfile"
14545bc899bSmrg  ;;
14645bc899bSmrg
14745bc899bSmrghp)
14845bc899bSmrg  # This case exists only to let depend.m4 do its work.  It works by
14945bc899bSmrg  # looking at the text of this script.  This case will never be run,
15045bc899bSmrg  # since it is checked for above.
15145bc899bSmrg  exit 1
15245bc899bSmrg  ;;
15345bc899bSmrg
15445bc899bSmrgsgi)
15545bc899bSmrg  if test "$libtool" = yes; then
15645bc899bSmrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
15745bc899bSmrg  else
15845bc899bSmrg    "$@" -MDupdate "$tmpdepfile"
15945bc899bSmrg  fi
16045bc899bSmrg  stat=$?
16145bc899bSmrg  if test $stat -eq 0; then :
16245bc899bSmrg  else
16345bc899bSmrg    rm -f "$tmpdepfile"
16445bc899bSmrg    exit $stat
16545bc899bSmrg  fi
16645bc899bSmrg  rm -f "$depfile"
16745bc899bSmrg
16845bc899bSmrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
16945bc899bSmrg    echo "$object : \\" > "$depfile"
17045bc899bSmrg
17145bc899bSmrg    # Clip off the initial element (the dependent).  Don't try to be
17245bc899bSmrg    # clever and replace this with sed code, as IRIX sed won't handle
17345bc899bSmrg    # lines with more than a fixed number of characters (4096 in
17445bc899bSmrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
17545bc899bSmrg    # the IRIX cc adds comments like `#:fec' to the end of the
17645bc899bSmrg    # dependency line.
17745bc899bSmrg    tr ' ' '
17845bc899bSmrg' < "$tmpdepfile" \
17945bc899bSmrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
18045bc899bSmrg    tr '
18145bc899bSmrg' ' ' >> $depfile
18245bc899bSmrg    echo >> $depfile
18345bc899bSmrg
18445bc899bSmrg    # The second pass generates a dummy entry for each header file.
18545bc899bSmrg    tr ' ' '
18645bc899bSmrg' < "$tmpdepfile" \
18745bc899bSmrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
18845bc899bSmrg   >> $depfile
18945bc899bSmrg  else
19045bc899bSmrg    # The sourcefile does not contain any dependencies, so just
19145bc899bSmrg    # store a dummy comment line, to avoid errors with the Makefile
19245bc899bSmrg    # "include basename.Plo" scheme.
19345bc899bSmrg    echo "#dummy" > "$depfile"
19445bc899bSmrg  fi
19545bc899bSmrg  rm -f "$tmpdepfile"
19645bc899bSmrg  ;;
19745bc899bSmrg
19845bc899bSmrgaix)
19945bc899bSmrg  # The C for AIX Compiler uses -M and outputs the dependencies
20045bc899bSmrg  # in a .u file.  In older versions, this file always lives in the
20145bc899bSmrg  # current directory.  Also, the AIX compiler puts `$object:' at the
20245bc899bSmrg  # start of each line; $object doesn't have directory information.
20345bc899bSmrg  # Version 6 uses the directory in both cases.
20445bc899bSmrg  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
20545bc899bSmrg  tmpdepfile="$stripped.u"
20645bc899bSmrg  if test "$libtool" = yes; then
20745bc899bSmrg    "$@" -Wc,-M
20845bc899bSmrg  else
20945bc899bSmrg    "$@" -M
21045bc899bSmrg  fi
21145bc899bSmrg  stat=$?
21245bc899bSmrg
21345bc899bSmrg  if test -f "$tmpdepfile"; then :
21445bc899bSmrg  else
21545bc899bSmrg    stripped=`echo "$stripped" | sed 's,^.*/,,'`
21645bc899bSmrg    tmpdepfile="$stripped.u"
21745bc899bSmrg  fi
21845bc899bSmrg
21945bc899bSmrg  if test $stat -eq 0; then :
22045bc899bSmrg  else
22145bc899bSmrg    rm -f "$tmpdepfile"
22245bc899bSmrg    exit $stat
22345bc899bSmrg  fi
22445bc899bSmrg
22545bc899bSmrg  if test -f "$tmpdepfile"; then
22645bc899bSmrg    outname="$stripped.o"
22745bc899bSmrg    # Each line is of the form `foo.o: dependent.h'.
22845bc899bSmrg    # Do two passes, one to just change these to
22945bc899bSmrg    # `$object: dependent.h' and one to simply `dependent.h:'.
23045bc899bSmrg    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
23145bc899bSmrg    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
23245bc899bSmrg  else
23345bc899bSmrg    # The sourcefile does not contain any dependencies, so just
23445bc899bSmrg    # store a dummy comment line, to avoid errors with the Makefile
23545bc899bSmrg    # "include basename.Plo" scheme.
23645bc899bSmrg    echo "#dummy" > "$depfile"
23745bc899bSmrg  fi
23845bc899bSmrg  rm -f "$tmpdepfile"
23945bc899bSmrg  ;;
24045bc899bSmrg
24145bc899bSmrgicc)
24245bc899bSmrg  # Intel's C compiler understands `-MD -MF file'.  However on
24345bc899bSmrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
24445bc899bSmrg  # ICC 7.0 will fill foo.d with something like
24545bc899bSmrg  #    foo.o: sub/foo.c
24645bc899bSmrg  #    foo.o: sub/foo.h
24745bc899bSmrg  # which is wrong.  We want:
24845bc899bSmrg  #    sub/foo.o: sub/foo.c
24945bc899bSmrg  #    sub/foo.o: sub/foo.h
25045bc899bSmrg  #    sub/foo.c:
25145bc899bSmrg  #    sub/foo.h:
25245bc899bSmrg  # ICC 7.1 will output
25345bc899bSmrg  #    foo.o: sub/foo.c sub/foo.h
25445bc899bSmrg  # and will wrap long lines using \ :
25545bc899bSmrg  #    foo.o: sub/foo.c ... \
25645bc899bSmrg  #     sub/foo.h ... \
25745bc899bSmrg  #     ...
25845bc899bSmrg
25945bc899bSmrg  "$@" -MD -MF "$tmpdepfile"
26045bc899bSmrg  stat=$?
26145bc899bSmrg  if test $stat -eq 0; then :
26245bc899bSmrg  else
26345bc899bSmrg    rm -f "$tmpdepfile"
26445bc899bSmrg    exit $stat
26545bc899bSmrg  fi
26645bc899bSmrg  rm -f "$depfile"
26745bc899bSmrg  # Each line is of the form `foo.o: dependent.h',
26845bc899bSmrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
26945bc899bSmrg  # Do two passes, one to just change these to
27045bc899bSmrg  # `$object: dependent.h' and one to simply `dependent.h:'.
27145bc899bSmrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
27245bc899bSmrg  # Some versions of the HPUX 10.20 sed can't process this invocation
27345bc899bSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
27445bc899bSmrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
27545bc899bSmrg    sed -e 's/$/ :/' >> "$depfile"
27645bc899bSmrg  rm -f "$tmpdepfile"
27745bc899bSmrg  ;;
27845bc899bSmrg
27945bc899bSmrgtru64)
28045bc899bSmrg   # The Tru64 compiler uses -MD to generate dependencies as a side
28145bc899bSmrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
28245bc899bSmrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
28345bc899bSmrg   # dependencies in `foo.d' instead, so we check for that too.
28445bc899bSmrg   # Subdirectories are respected.
28545bc899bSmrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
28645bc899bSmrg   test "x$dir" = "x$object" && dir=
28745bc899bSmrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
28845bc899bSmrg
28945bc899bSmrg   if test "$libtool" = yes; then
29045bc899bSmrg      # With Tru64 cc, shared objects can also be used to make a
29145bc899bSmrg      # static library.  This mecanism is used in libtool 1.4 series to
29245bc899bSmrg      # handle both shared and static libraries in a single compilation.
29345bc899bSmrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
29445bc899bSmrg      #
29545bc899bSmrg      # With libtool 1.5 this exception was removed, and libtool now
29645bc899bSmrg      # generates 2 separate objects for the 2 libraries.  These two
29745bc899bSmrg      # compilations output dependencies in in $dir.libs/$base.o.d and
29845bc899bSmrg      # in $dir$base.o.d.  We have to check for both files, because
29945bc899bSmrg      # one of the two compilations can be disabled.  We should prefer
30045bc899bSmrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
30145bc899bSmrg      # automatically cleaned when .libs/ is deleted, while ignoring
30245bc899bSmrg      # the former would cause a distcleancheck panic.
30345bc899bSmrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
30445bc899bSmrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
30545bc899bSmrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
30645bc899bSmrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
30745bc899bSmrg      "$@" -Wc,-MD
30845bc899bSmrg   else
30945bc899bSmrg      tmpdepfile1=$dir$base.o.d
31045bc899bSmrg      tmpdepfile2=$dir$base.d
31145bc899bSmrg      tmpdepfile3=$dir$base.d
31245bc899bSmrg      tmpdepfile4=$dir$base.d
31345bc899bSmrg      "$@" -MD
31445bc899bSmrg   fi
31545bc899bSmrg
31645bc899bSmrg   stat=$?
31745bc899bSmrg   if test $stat -eq 0; then :
31845bc899bSmrg   else
31945bc899bSmrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
32045bc899bSmrg      exit $stat
32145bc899bSmrg   fi
32245bc899bSmrg
32345bc899bSmrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
32445bc899bSmrg   do
32545bc899bSmrg     test -f "$tmpdepfile" && break
32645bc899bSmrg   done
32745bc899bSmrg   if test -f "$tmpdepfile"; then
32845bc899bSmrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
32945bc899bSmrg      # That's a tab and a space in the [].
33045bc899bSmrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
33145bc899bSmrg   else
33245bc899bSmrg      echo "#dummy" > "$depfile"
33345bc899bSmrg   fi
33445bc899bSmrg   rm -f "$tmpdepfile"
33545bc899bSmrg   ;;
33645bc899bSmrg
33745bc899bSmrg#nosideeffect)
33845bc899bSmrg  # This comment above is used by automake to tell side-effect
33945bc899bSmrg  # dependency tracking mechanisms from slower ones.
34045bc899bSmrg
34145bc899bSmrgdashmstdout)
34245bc899bSmrg  # Important note: in order to support this mode, a compiler *must*
34345bc899bSmrg  # always write the preprocessed file to stdout, regardless of -o.
34445bc899bSmrg  "$@" || exit $?
34545bc899bSmrg
34645bc899bSmrg  # Remove the call to Libtool.
34745bc899bSmrg  if test "$libtool" = yes; then
34845bc899bSmrg    while test $1 != '--mode=compile'; do
34945bc899bSmrg      shift
35045bc899bSmrg    done
35145bc899bSmrg    shift
35245bc899bSmrg  fi
35345bc899bSmrg
35445bc899bSmrg  # Remove `-o $object'.
35545bc899bSmrg  IFS=" "
35645bc899bSmrg  for arg
35745bc899bSmrg  do
35845bc899bSmrg    case $arg in
35945bc899bSmrg    -o)
36045bc899bSmrg      shift
36145bc899bSmrg      ;;
36245bc899bSmrg    $object)
36345bc899bSmrg      shift
36445bc899bSmrg      ;;
36545bc899bSmrg    *)
36645bc899bSmrg      set fnord "$@" "$arg"
36745bc899bSmrg      shift # fnord
36845bc899bSmrg      shift # $arg
36945bc899bSmrg      ;;
37045bc899bSmrg    esac
37145bc899bSmrg  done
37245bc899bSmrg
37345bc899bSmrg  test -z "$dashmflag" && dashmflag=-M
37445bc899bSmrg  # Require at least two characters before searching for `:'
37545bc899bSmrg  # in the target name.  This is to cope with DOS-style filenames:
37645bc899bSmrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
37745bc899bSmrg  "$@" $dashmflag |
37845bc899bSmrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
37945bc899bSmrg  rm -f "$depfile"
38045bc899bSmrg  cat < "$tmpdepfile" > "$depfile"
38145bc899bSmrg  tr ' ' '
38245bc899bSmrg' < "$tmpdepfile" | \
38345bc899bSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
38445bc899bSmrg## correctly.  Breaking it into two sed invocations is a workaround.
38545bc899bSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
38645bc899bSmrg  rm -f "$tmpdepfile"
38745bc899bSmrg  ;;
38845bc899bSmrg
38945bc899bSmrgdashXmstdout)
39045bc899bSmrg  # This case only exists to satisfy depend.m4.  It is never actually
39145bc899bSmrg  # run, as this mode is specially recognized in the preamble.
39245bc899bSmrg  exit 1
39345bc899bSmrg  ;;
39445bc899bSmrg
39545bc899bSmrgmakedepend)
39645bc899bSmrg  "$@" || exit $?
39745bc899bSmrg  # Remove any Libtool call
39845bc899bSmrg  if test "$libtool" = yes; then
39945bc899bSmrg    while test $1 != '--mode=compile'; do
40045bc899bSmrg      shift
40145bc899bSmrg    done
40245bc899bSmrg    shift
40345bc899bSmrg  fi
40445bc899bSmrg  # X makedepend
40545bc899bSmrg  shift
40645bc899bSmrg  cleared=no
40745bc899bSmrg  for arg in "$@"; do
40845bc899bSmrg    case $cleared in
40945bc899bSmrg    no)
41045bc899bSmrg      set ""; shift
41145bc899bSmrg      cleared=yes ;;
41245bc899bSmrg    esac
41345bc899bSmrg    case "$arg" in
41445bc899bSmrg    -D*|-I*)
41545bc899bSmrg      set fnord "$@" "$arg"; shift ;;
41645bc899bSmrg    # Strip any option that makedepend may not understand.  Remove
41745bc899bSmrg    # the object too, otherwise makedepend will parse it as a source file.
41845bc899bSmrg    -*|$object)
41945bc899bSmrg      ;;
42045bc899bSmrg    *)
42145bc899bSmrg      set fnord "$@" "$arg"; shift ;;
42245bc899bSmrg    esac
42345bc899bSmrg  done
42445bc899bSmrg  obj_suffix="`echo $object | sed 's/^.*\././'`"
42545bc899bSmrg  touch "$tmpdepfile"
42645bc899bSmrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
42745bc899bSmrg  rm -f "$depfile"
42845bc899bSmrg  cat < "$tmpdepfile" > "$depfile"
42945bc899bSmrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
43045bc899bSmrg' | \
43145bc899bSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
43245bc899bSmrg## correctly.  Breaking it into two sed invocations is a workaround.
43345bc899bSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
43445bc899bSmrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
43545bc899bSmrg  ;;
43645bc899bSmrg
43745bc899bSmrgcpp)
43845bc899bSmrg  # Important note: in order to support this mode, a compiler *must*
43945bc899bSmrg  # always write the preprocessed file to stdout.
44045bc899bSmrg  "$@" || exit $?
44145bc899bSmrg
44245bc899bSmrg  # Remove the call to Libtool.
44345bc899bSmrg  if test "$libtool" = yes; then
44445bc899bSmrg    while test $1 != '--mode=compile'; do
44545bc899bSmrg      shift
44645bc899bSmrg    done
44745bc899bSmrg    shift
44845bc899bSmrg  fi
44945bc899bSmrg
45045bc899bSmrg  # Remove `-o $object'.
45145bc899bSmrg  IFS=" "
45245bc899bSmrg  for arg
45345bc899bSmrg  do
45445bc899bSmrg    case $arg in
45545bc899bSmrg    -o)
45645bc899bSmrg      shift
45745bc899bSmrg      ;;
45845bc899bSmrg    $object)
45945bc899bSmrg      shift
46045bc899bSmrg      ;;
46145bc899bSmrg    *)
46245bc899bSmrg      set fnord "$@" "$arg"
46345bc899bSmrg      shift # fnord
46445bc899bSmrg      shift # $arg
46545bc899bSmrg      ;;
46645bc899bSmrg    esac
46745bc899bSmrg  done
46845bc899bSmrg
46945bc899bSmrg  "$@" -E |
47045bc899bSmrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
47145bc899bSmrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
47245bc899bSmrg    sed '$ s: \\$::' > "$tmpdepfile"
47345bc899bSmrg  rm -f "$depfile"
47445bc899bSmrg  echo "$object : \\" > "$depfile"
47545bc899bSmrg  cat < "$tmpdepfile" >> "$depfile"
47645bc899bSmrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
47745bc899bSmrg  rm -f "$tmpdepfile"
47845bc899bSmrg  ;;
47945bc899bSmrg
48045bc899bSmrgmsvisualcpp)
48145bc899bSmrg  # Important note: in order to support this mode, a compiler *must*
48245bc899bSmrg  # always write the preprocessed file to stdout, regardless of -o,
48345bc899bSmrg  # because we must use -o when running libtool.
48445bc899bSmrg  "$@" || exit $?
48545bc899bSmrg  IFS=" "
48645bc899bSmrg  for arg
48745bc899bSmrg  do
48845bc899bSmrg    case "$arg" in
48945bc899bSmrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
49045bc899bSmrg	set fnord "$@"
49145bc899bSmrg	shift
49245bc899bSmrg	shift
49345bc899bSmrg	;;
49445bc899bSmrg    *)
49545bc899bSmrg	set fnord "$@" "$arg"
49645bc899bSmrg	shift
49745bc899bSmrg	shift
49845bc899bSmrg	;;
49945bc899bSmrg    esac
50045bc899bSmrg  done
50145bc899bSmrg  "$@" -E |
50245bc899bSmrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
50345bc899bSmrg  rm -f "$depfile"
50445bc899bSmrg  echo "$object : \\" > "$depfile"
50545bc899bSmrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
50645bc899bSmrg  echo "	" >> "$depfile"
50745bc899bSmrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
50845bc899bSmrg  rm -f "$tmpdepfile"
50945bc899bSmrg  ;;
51045bc899bSmrg
51145bc899bSmrgnone)
51245bc899bSmrg  exec "$@"
51345bc899bSmrg  ;;
51445bc899bSmrg
51545bc899bSmrg*)
51645bc899bSmrg  echo "Unknown depmode $depmode" 1>&2
51745bc899bSmrg  exit 1
51845bc899bSmrg  ;;
51945bc899bSmrgesac
52045bc899bSmrg
52145bc899bSmrgexit 0
52245bc899bSmrg
52345bc899bSmrg# Local Variables:
52445bc899bSmrg# mode: shell-script
52545bc899bSmrg# sh-indentation: 2
52645bc899bSmrg# eval: (add-hook 'write-file-hooks 'time-stamp)
52745bc899bSmrg# time-stamp-start: "scriptversion="
52845bc899bSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
52945bc899bSmrg# time-stamp-end: "$"
53045bc899bSmrg# End:
531