depcomp revision 52f9793f
152f9793fSmrg#! /bin/sh
252f9793fSmrg# depcomp - compile a program generating dependencies as side-effects
352f9793fSmrg
452f9793fSmrgscriptversion=2005-07-09.11
552f9793fSmrg
652f9793fSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
752f9793fSmrg
852f9793fSmrg# This program is free software; you can redistribute it and/or modify
952f9793fSmrg# it under the terms of the GNU General Public License as published by
1052f9793fSmrg# the Free Software Foundation; either version 2, or (at your option)
1152f9793fSmrg# any later version.
1252f9793fSmrg
1352f9793fSmrg# This program is distributed in the hope that it will be useful,
1452f9793fSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
1552f9793fSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1652f9793fSmrg# GNU General Public License for more details.
1752f9793fSmrg
1852f9793fSmrg# You should have received a copy of the GNU General Public License
1952f9793fSmrg# along with this program; if not, write to the Free Software
2052f9793fSmrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
2152f9793fSmrg# 02110-1301, USA.
2252f9793fSmrg
2352f9793fSmrg# As a special exception to the GNU General Public License, if you
2452f9793fSmrg# distribute this file as part of a program that contains a
2552f9793fSmrg# configuration script generated by Autoconf, you may include it under
2652f9793fSmrg# the same distribution terms that you use for the rest of that program.
2752f9793fSmrg
2852f9793fSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
2952f9793fSmrg
3052f9793fSmrgcase $1 in
3152f9793fSmrg  '')
3252f9793fSmrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
3352f9793fSmrg     exit 1;
3452f9793fSmrg     ;;
3552f9793fSmrg  -h | --h*)
3652f9793fSmrg    cat <<\EOF
3752f9793fSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
3852f9793fSmrg
3952f9793fSmrgRun PROGRAMS ARGS to compile a file, generating dependencies
4052f9793fSmrgas side-effects.
4152f9793fSmrg
4252f9793fSmrgEnvironment variables:
4352f9793fSmrg  depmode     Dependency tracking mode.
4452f9793fSmrg  source      Source file read by `PROGRAMS ARGS'.
4552f9793fSmrg  object      Object file output by `PROGRAMS ARGS'.
4652f9793fSmrg  DEPDIR      directory where to store dependencies.
4752f9793fSmrg  depfile     Dependency file to output.
4852f9793fSmrg  tmpdepfile  Temporary file to use when outputing dependencies.
4952f9793fSmrg  libtool     Whether libtool is used (yes/no).
5052f9793fSmrg
5152f9793fSmrgReport bugs to <bug-automake@gnu.org>.
5252f9793fSmrgEOF
5352f9793fSmrg    exit $?
5452f9793fSmrg    ;;
5552f9793fSmrg  -v | --v*)
5652f9793fSmrg    echo "depcomp $scriptversion"
5752f9793fSmrg    exit $?
5852f9793fSmrg    ;;
5952f9793fSmrgesac
6052f9793fSmrg
6152f9793fSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
6252f9793fSmrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
6352f9793fSmrg  exit 1
6452f9793fSmrgfi
6552f9793fSmrg
6652f9793fSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
6752f9793fSmrgdepfile=${depfile-`echo "$object" |
6852f9793fSmrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
6952f9793fSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
7052f9793fSmrg
7152f9793fSmrgrm -f "$tmpdepfile"
7252f9793fSmrg
7352f9793fSmrg# Some modes work just like other modes, but use different flags.  We
7452f9793fSmrg# parameterize here, but still list the modes in the big case below,
7552f9793fSmrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
7652f9793fSmrg# here, because this file can only contain one case statement.
7752f9793fSmrgif test "$depmode" = hp; then
7852f9793fSmrg  # HP compiler uses -M and no extra arg.
7952f9793fSmrg  gccflag=-M
8052f9793fSmrg  depmode=gcc
8152f9793fSmrgfi
8252f9793fSmrg
8352f9793fSmrgif test "$depmode" = dashXmstdout; then
8452f9793fSmrg   # This is just like dashmstdout with a different argument.
8552f9793fSmrg   dashmflag=-xM
8652f9793fSmrg   depmode=dashmstdout
8752f9793fSmrgfi
8852f9793fSmrg
8952f9793fSmrgcase "$depmode" in
9052f9793fSmrggcc3)
9152f9793fSmrg## gcc 3 implements dependency tracking that does exactly what
9252f9793fSmrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
9352f9793fSmrg## it if -MD -MP comes after the -MF stuff.  Hmm.
9452f9793fSmrg  "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
9552f9793fSmrg  stat=$?
9652f9793fSmrg  if test $stat -eq 0; then :
9752f9793fSmrg  else
9852f9793fSmrg    rm -f "$tmpdepfile"
9952f9793fSmrg    exit $stat
10052f9793fSmrg  fi
10152f9793fSmrg  mv "$tmpdepfile" "$depfile"
10252f9793fSmrg  ;;
10352f9793fSmrg
10452f9793fSmrggcc)
10552f9793fSmrg## There are various ways to get dependency output from gcc.  Here's
10652f9793fSmrg## why we pick this rather obscure method:
10752f9793fSmrg## - Don't want to use -MD because we'd like the dependencies to end
10852f9793fSmrg##   up in a subdir.  Having to rename by hand is ugly.
10952f9793fSmrg##   (We might end up doing this anyway to support other compilers.)
11052f9793fSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
11152f9793fSmrg##   -MM, not -M (despite what the docs say).
11252f9793fSmrg## - Using -M directly means running the compiler twice (even worse
11352f9793fSmrg##   than renaming).
11452f9793fSmrg  if test -z "$gccflag"; then
11552f9793fSmrg    gccflag=-MD,
11652f9793fSmrg  fi
11752f9793fSmrg  "$@" -Wp,"$gccflag$tmpdepfile"
11852f9793fSmrg  stat=$?
11952f9793fSmrg  if test $stat -eq 0; then :
12052f9793fSmrg  else
12152f9793fSmrg    rm -f "$tmpdepfile"
12252f9793fSmrg    exit $stat
12352f9793fSmrg  fi
12452f9793fSmrg  rm -f "$depfile"
12552f9793fSmrg  echo "$object : \\" > "$depfile"
12652f9793fSmrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
12752f9793fSmrg## The second -e expression handles DOS-style file names with drive letters.
12852f9793fSmrg  sed -e 's/^[^:]*: / /' \
12952f9793fSmrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
13052f9793fSmrg## This next piece of magic avoids the `deleted header file' problem.
13152f9793fSmrg## The problem is that when a header file which appears in a .P file
13252f9793fSmrg## is deleted, the dependency causes make to die (because there is
13352f9793fSmrg## typically no way to rebuild the header).  We avoid this by adding
13452f9793fSmrg## dummy dependencies for each header file.  Too bad gcc doesn't do
13552f9793fSmrg## this for us directly.
13652f9793fSmrg  tr ' ' '
13752f9793fSmrg' < "$tmpdepfile" |
13852f9793fSmrg## Some versions of gcc put a space before the `:'.  On the theory
13952f9793fSmrg## that the space means something, we add a space to the output as
14052f9793fSmrg## well.
14152f9793fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
14252f9793fSmrg## correctly.  Breaking it into two sed invocations is a workaround.
14352f9793fSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
14452f9793fSmrg  rm -f "$tmpdepfile"
14552f9793fSmrg  ;;
14652f9793fSmrg
14752f9793fSmrghp)
14852f9793fSmrg  # This case exists only to let depend.m4 do its work.  It works by
14952f9793fSmrg  # looking at the text of this script.  This case will never be run,
15052f9793fSmrg  # since it is checked for above.
15152f9793fSmrg  exit 1
15252f9793fSmrg  ;;
15352f9793fSmrg
15452f9793fSmrgsgi)
15552f9793fSmrg  if test "$libtool" = yes; then
15652f9793fSmrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
15752f9793fSmrg  else
15852f9793fSmrg    "$@" -MDupdate "$tmpdepfile"
15952f9793fSmrg  fi
16052f9793fSmrg  stat=$?
16152f9793fSmrg  if test $stat -eq 0; then :
16252f9793fSmrg  else
16352f9793fSmrg    rm -f "$tmpdepfile"
16452f9793fSmrg    exit $stat
16552f9793fSmrg  fi
16652f9793fSmrg  rm -f "$depfile"
16752f9793fSmrg
16852f9793fSmrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
16952f9793fSmrg    echo "$object : \\" > "$depfile"
17052f9793fSmrg
17152f9793fSmrg    # Clip off the initial element (the dependent).  Don't try to be
17252f9793fSmrg    # clever and replace this with sed code, as IRIX sed won't handle
17352f9793fSmrg    # lines with more than a fixed number of characters (4096 in
17452f9793fSmrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
17552f9793fSmrg    # the IRIX cc adds comments like `#:fec' to the end of the
17652f9793fSmrg    # dependency line.
17752f9793fSmrg    tr ' ' '
17852f9793fSmrg' < "$tmpdepfile" \
17952f9793fSmrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
18052f9793fSmrg    tr '
18152f9793fSmrg' ' ' >> $depfile
18252f9793fSmrg    echo >> $depfile
18352f9793fSmrg
18452f9793fSmrg    # The second pass generates a dummy entry for each header file.
18552f9793fSmrg    tr ' ' '
18652f9793fSmrg' < "$tmpdepfile" \
18752f9793fSmrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
18852f9793fSmrg   >> $depfile
18952f9793fSmrg  else
19052f9793fSmrg    # The sourcefile does not contain any dependencies, so just
19152f9793fSmrg    # store a dummy comment line, to avoid errors with the Makefile
19252f9793fSmrg    # "include basename.Plo" scheme.
19352f9793fSmrg    echo "#dummy" > "$depfile"
19452f9793fSmrg  fi
19552f9793fSmrg  rm -f "$tmpdepfile"
19652f9793fSmrg  ;;
19752f9793fSmrg
19852f9793fSmrgaix)
19952f9793fSmrg  # The C for AIX Compiler uses -M and outputs the dependencies
20052f9793fSmrg  # in a .u file.  In older versions, this file always lives in the
20152f9793fSmrg  # current directory.  Also, the AIX compiler puts `$object:' at the
20252f9793fSmrg  # start of each line; $object doesn't have directory information.
20352f9793fSmrg  # Version 6 uses the directory in both cases.
20452f9793fSmrg  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
20552f9793fSmrg  tmpdepfile="$stripped.u"
20652f9793fSmrg  if test "$libtool" = yes; then
20752f9793fSmrg    "$@" -Wc,-M
20852f9793fSmrg  else
20952f9793fSmrg    "$@" -M
21052f9793fSmrg  fi
21152f9793fSmrg  stat=$?
21252f9793fSmrg
21352f9793fSmrg  if test -f "$tmpdepfile"; then :
21452f9793fSmrg  else
21552f9793fSmrg    stripped=`echo "$stripped" | sed 's,^.*/,,'`
21652f9793fSmrg    tmpdepfile="$stripped.u"
21752f9793fSmrg  fi
21852f9793fSmrg
21952f9793fSmrg  if test $stat -eq 0; then :
22052f9793fSmrg  else
22152f9793fSmrg    rm -f "$tmpdepfile"
22252f9793fSmrg    exit $stat
22352f9793fSmrg  fi
22452f9793fSmrg
22552f9793fSmrg  if test -f "$tmpdepfile"; then
22652f9793fSmrg    outname="$stripped.o"
22752f9793fSmrg    # Each line is of the form `foo.o: dependent.h'.
22852f9793fSmrg    # Do two passes, one to just change these to
22952f9793fSmrg    # `$object: dependent.h' and one to simply `dependent.h:'.
23052f9793fSmrg    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
23152f9793fSmrg    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
23252f9793fSmrg  else
23352f9793fSmrg    # The sourcefile does not contain any dependencies, so just
23452f9793fSmrg    # store a dummy comment line, to avoid errors with the Makefile
23552f9793fSmrg    # "include basename.Plo" scheme.
23652f9793fSmrg    echo "#dummy" > "$depfile"
23752f9793fSmrg  fi
23852f9793fSmrg  rm -f "$tmpdepfile"
23952f9793fSmrg  ;;
24052f9793fSmrg
24152f9793fSmrgicc)
24252f9793fSmrg  # Intel's C compiler understands `-MD -MF file'.  However on
24352f9793fSmrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
24452f9793fSmrg  # ICC 7.0 will fill foo.d with something like
24552f9793fSmrg  #    foo.o: sub/foo.c
24652f9793fSmrg  #    foo.o: sub/foo.h
24752f9793fSmrg  # which is wrong.  We want:
24852f9793fSmrg  #    sub/foo.o: sub/foo.c
24952f9793fSmrg  #    sub/foo.o: sub/foo.h
25052f9793fSmrg  #    sub/foo.c:
25152f9793fSmrg  #    sub/foo.h:
25252f9793fSmrg  # ICC 7.1 will output
25352f9793fSmrg  #    foo.o: sub/foo.c sub/foo.h
25452f9793fSmrg  # and will wrap long lines using \ :
25552f9793fSmrg  #    foo.o: sub/foo.c ... \
25652f9793fSmrg  #     sub/foo.h ... \
25752f9793fSmrg  #     ...
25852f9793fSmrg
25952f9793fSmrg  "$@" -MD -MF "$tmpdepfile"
26052f9793fSmrg  stat=$?
26152f9793fSmrg  if test $stat -eq 0; then :
26252f9793fSmrg  else
26352f9793fSmrg    rm -f "$tmpdepfile"
26452f9793fSmrg    exit $stat
26552f9793fSmrg  fi
26652f9793fSmrg  rm -f "$depfile"
26752f9793fSmrg  # Each line is of the form `foo.o: dependent.h',
26852f9793fSmrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
26952f9793fSmrg  # Do two passes, one to just change these to
27052f9793fSmrg  # `$object: dependent.h' and one to simply `dependent.h:'.
27152f9793fSmrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
27252f9793fSmrg  # Some versions of the HPUX 10.20 sed can't process this invocation
27352f9793fSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
27452f9793fSmrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
27552f9793fSmrg    sed -e 's/$/ :/' >> "$depfile"
27652f9793fSmrg  rm -f "$tmpdepfile"
27752f9793fSmrg  ;;
27852f9793fSmrg
27952f9793fSmrgtru64)
28052f9793fSmrg   # The Tru64 compiler uses -MD to generate dependencies as a side
28152f9793fSmrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
28252f9793fSmrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
28352f9793fSmrg   # dependencies in `foo.d' instead, so we check for that too.
28452f9793fSmrg   # Subdirectories are respected.
28552f9793fSmrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
28652f9793fSmrg   test "x$dir" = "x$object" && dir=
28752f9793fSmrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
28852f9793fSmrg
28952f9793fSmrg   if test "$libtool" = yes; then
29052f9793fSmrg      # With Tru64 cc, shared objects can also be used to make a
29152f9793fSmrg      # static library.  This mecanism is used in libtool 1.4 series to
29252f9793fSmrg      # handle both shared and static libraries in a single compilation.
29352f9793fSmrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
29452f9793fSmrg      #
29552f9793fSmrg      # With libtool 1.5 this exception was removed, and libtool now
29652f9793fSmrg      # generates 2 separate objects for the 2 libraries.  These two
29752f9793fSmrg      # compilations output dependencies in in $dir.libs/$base.o.d and
29852f9793fSmrg      # in $dir$base.o.d.  We have to check for both files, because
29952f9793fSmrg      # one of the two compilations can be disabled.  We should prefer
30052f9793fSmrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
30152f9793fSmrg      # automatically cleaned when .libs/ is deleted, while ignoring
30252f9793fSmrg      # the former would cause a distcleancheck panic.
30352f9793fSmrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
30452f9793fSmrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
30552f9793fSmrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
30652f9793fSmrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
30752f9793fSmrg      "$@" -Wc,-MD
30852f9793fSmrg   else
30952f9793fSmrg      tmpdepfile1=$dir$base.o.d
31052f9793fSmrg      tmpdepfile2=$dir$base.d
31152f9793fSmrg      tmpdepfile3=$dir$base.d
31252f9793fSmrg      tmpdepfile4=$dir$base.d
31352f9793fSmrg      "$@" -MD
31452f9793fSmrg   fi
31552f9793fSmrg
31652f9793fSmrg   stat=$?
31752f9793fSmrg   if test $stat -eq 0; then :
31852f9793fSmrg   else
31952f9793fSmrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
32052f9793fSmrg      exit $stat
32152f9793fSmrg   fi
32252f9793fSmrg
32352f9793fSmrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
32452f9793fSmrg   do
32552f9793fSmrg     test -f "$tmpdepfile" && break
32652f9793fSmrg   done
32752f9793fSmrg   if test -f "$tmpdepfile"; then
32852f9793fSmrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
32952f9793fSmrg      # That's a tab and a space in the [].
33052f9793fSmrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
33152f9793fSmrg   else
33252f9793fSmrg      echo "#dummy" > "$depfile"
33352f9793fSmrg   fi
33452f9793fSmrg   rm -f "$tmpdepfile"
33552f9793fSmrg   ;;
33652f9793fSmrg
33752f9793fSmrg#nosideeffect)
33852f9793fSmrg  # This comment above is used by automake to tell side-effect
33952f9793fSmrg  # dependency tracking mechanisms from slower ones.
34052f9793fSmrg
34152f9793fSmrgdashmstdout)
34252f9793fSmrg  # Important note: in order to support this mode, a compiler *must*
34352f9793fSmrg  # always write the preprocessed file to stdout, regardless of -o.
34452f9793fSmrg  "$@" || exit $?
34552f9793fSmrg
34652f9793fSmrg  # Remove the call to Libtool.
34752f9793fSmrg  if test "$libtool" = yes; then
34852f9793fSmrg    while test $1 != '--mode=compile'; do
34952f9793fSmrg      shift
35052f9793fSmrg    done
35152f9793fSmrg    shift
35252f9793fSmrg  fi
35352f9793fSmrg
35452f9793fSmrg  # Remove `-o $object'.
35552f9793fSmrg  IFS=" "
35652f9793fSmrg  for arg
35752f9793fSmrg  do
35852f9793fSmrg    case $arg in
35952f9793fSmrg    -o)
36052f9793fSmrg      shift
36152f9793fSmrg      ;;
36252f9793fSmrg    $object)
36352f9793fSmrg      shift
36452f9793fSmrg      ;;
36552f9793fSmrg    *)
36652f9793fSmrg      set fnord "$@" "$arg"
36752f9793fSmrg      shift # fnord
36852f9793fSmrg      shift # $arg
36952f9793fSmrg      ;;
37052f9793fSmrg    esac
37152f9793fSmrg  done
37252f9793fSmrg
37352f9793fSmrg  test -z "$dashmflag" && dashmflag=-M
37452f9793fSmrg  # Require at least two characters before searching for `:'
37552f9793fSmrg  # in the target name.  This is to cope with DOS-style filenames:
37652f9793fSmrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
37752f9793fSmrg  "$@" $dashmflag |
37852f9793fSmrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
37952f9793fSmrg  rm -f "$depfile"
38052f9793fSmrg  cat < "$tmpdepfile" > "$depfile"
38152f9793fSmrg  tr ' ' '
38252f9793fSmrg' < "$tmpdepfile" | \
38352f9793fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
38452f9793fSmrg## correctly.  Breaking it into two sed invocations is a workaround.
38552f9793fSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
38652f9793fSmrg  rm -f "$tmpdepfile"
38752f9793fSmrg  ;;
38852f9793fSmrg
38952f9793fSmrgdashXmstdout)
39052f9793fSmrg  # This case only exists to satisfy depend.m4.  It is never actually
39152f9793fSmrg  # run, as this mode is specially recognized in the preamble.
39252f9793fSmrg  exit 1
39352f9793fSmrg  ;;
39452f9793fSmrg
39552f9793fSmrgmakedepend)
39652f9793fSmrg  "$@" || exit $?
39752f9793fSmrg  # Remove any Libtool call
39852f9793fSmrg  if test "$libtool" = yes; then
39952f9793fSmrg    while test $1 != '--mode=compile'; do
40052f9793fSmrg      shift
40152f9793fSmrg    done
40252f9793fSmrg    shift
40352f9793fSmrg  fi
40452f9793fSmrg  # X makedepend
40552f9793fSmrg  shift
40652f9793fSmrg  cleared=no
40752f9793fSmrg  for arg in "$@"; do
40852f9793fSmrg    case $cleared in
40952f9793fSmrg    no)
41052f9793fSmrg      set ""; shift
41152f9793fSmrg      cleared=yes ;;
41252f9793fSmrg    esac
41352f9793fSmrg    case "$arg" in
41452f9793fSmrg    -D*|-I*)
41552f9793fSmrg      set fnord "$@" "$arg"; shift ;;
41652f9793fSmrg    # Strip any option that makedepend may not understand.  Remove
41752f9793fSmrg    # the object too, otherwise makedepend will parse it as a source file.
41852f9793fSmrg    -*|$object)
41952f9793fSmrg      ;;
42052f9793fSmrg    *)
42152f9793fSmrg      set fnord "$@" "$arg"; shift ;;
42252f9793fSmrg    esac
42352f9793fSmrg  done
42452f9793fSmrg  obj_suffix="`echo $object | sed 's/^.*\././'`"
42552f9793fSmrg  touch "$tmpdepfile"
42652f9793fSmrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
42752f9793fSmrg  rm -f "$depfile"
42852f9793fSmrg  cat < "$tmpdepfile" > "$depfile"
42952f9793fSmrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
43052f9793fSmrg' | \
43152f9793fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
43252f9793fSmrg## correctly.  Breaking it into two sed invocations is a workaround.
43352f9793fSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
43452f9793fSmrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
43552f9793fSmrg  ;;
43652f9793fSmrg
43752f9793fSmrgcpp)
43852f9793fSmrg  # Important note: in order to support this mode, a compiler *must*
43952f9793fSmrg  # always write the preprocessed file to stdout.
44052f9793fSmrg  "$@" || exit $?
44152f9793fSmrg
44252f9793fSmrg  # Remove the call to Libtool.
44352f9793fSmrg  if test "$libtool" = yes; then
44452f9793fSmrg    while test $1 != '--mode=compile'; do
44552f9793fSmrg      shift
44652f9793fSmrg    done
44752f9793fSmrg    shift
44852f9793fSmrg  fi
44952f9793fSmrg
45052f9793fSmrg  # Remove `-o $object'.
45152f9793fSmrg  IFS=" "
45252f9793fSmrg  for arg
45352f9793fSmrg  do
45452f9793fSmrg    case $arg in
45552f9793fSmrg    -o)
45652f9793fSmrg      shift
45752f9793fSmrg      ;;
45852f9793fSmrg    $object)
45952f9793fSmrg      shift
46052f9793fSmrg      ;;
46152f9793fSmrg    *)
46252f9793fSmrg      set fnord "$@" "$arg"
46352f9793fSmrg      shift # fnord
46452f9793fSmrg      shift # $arg
46552f9793fSmrg      ;;
46652f9793fSmrg    esac
46752f9793fSmrg  done
46852f9793fSmrg
46952f9793fSmrg  "$@" -E |
47052f9793fSmrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
47152f9793fSmrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
47252f9793fSmrg    sed '$ s: \\$::' > "$tmpdepfile"
47352f9793fSmrg  rm -f "$depfile"
47452f9793fSmrg  echo "$object : \\" > "$depfile"
47552f9793fSmrg  cat < "$tmpdepfile" >> "$depfile"
47652f9793fSmrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
47752f9793fSmrg  rm -f "$tmpdepfile"
47852f9793fSmrg  ;;
47952f9793fSmrg
48052f9793fSmrgmsvisualcpp)
48152f9793fSmrg  # Important note: in order to support this mode, a compiler *must*
48252f9793fSmrg  # always write the preprocessed file to stdout, regardless of -o,
48352f9793fSmrg  # because we must use -o when running libtool.
48452f9793fSmrg  "$@" || exit $?
48552f9793fSmrg  IFS=" "
48652f9793fSmrg  for arg
48752f9793fSmrg  do
48852f9793fSmrg    case "$arg" in
48952f9793fSmrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
49052f9793fSmrg	set fnord "$@"
49152f9793fSmrg	shift
49252f9793fSmrg	shift
49352f9793fSmrg	;;
49452f9793fSmrg    *)
49552f9793fSmrg	set fnord "$@" "$arg"
49652f9793fSmrg	shift
49752f9793fSmrg	shift
49852f9793fSmrg	;;
49952f9793fSmrg    esac
50052f9793fSmrg  done
50152f9793fSmrg  "$@" -E |
50252f9793fSmrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
50352f9793fSmrg  rm -f "$depfile"
50452f9793fSmrg  echo "$object : \\" > "$depfile"
50552f9793fSmrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
50652f9793fSmrg  echo "	" >> "$depfile"
50752f9793fSmrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
50852f9793fSmrg  rm -f "$tmpdepfile"
50952f9793fSmrg  ;;
51052f9793fSmrg
51152f9793fSmrgnone)
51252f9793fSmrg  exec "$@"
51352f9793fSmrg  ;;
51452f9793fSmrg
51552f9793fSmrg*)
51652f9793fSmrg  echo "Unknown depmode $depmode" 1>&2
51752f9793fSmrg  exit 1
51852f9793fSmrg  ;;
51952f9793fSmrgesac
52052f9793fSmrg
52152f9793fSmrgexit 0
52252f9793fSmrg
52352f9793fSmrg# Local Variables:
52452f9793fSmrg# mode: shell-script
52552f9793fSmrg# sh-indentation: 2
52652f9793fSmrg# eval: (add-hook 'write-file-hooks 'time-stamp)
52752f9793fSmrg# time-stamp-start: "scriptversion="
52852f9793fSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
52952f9793fSmrg# time-stamp-end: "$"
53052f9793fSmrg# End:
531