depcomp revision 7965d9ac
150806d53Smrg#! /bin/sh
250806d53Smrg# depcomp - compile a program generating dependencies as side-effects
350806d53Smrg
47965d9acSmrgscriptversion=2007-03-29.01
550806d53Smrg
67965d9acSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software
77965d9acSmrg# Foundation, Inc.
850806d53Smrg
950806d53Smrg# This program is free software; you can redistribute it and/or modify
1050806d53Smrg# it under the terms of the GNU General Public License as published by
1150806d53Smrg# the Free Software Foundation; either version 2, or (at your option)
1250806d53Smrg# any later version.
1350806d53Smrg
1450806d53Smrg# This program is distributed in the hope that it will be useful,
1550806d53Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
1650806d53Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1750806d53Smrg# GNU General Public License for more details.
1850806d53Smrg
1950806d53Smrg# You should have received a copy of the GNU General Public License
2050806d53Smrg# along with this program; if not, write to the Free Software
2150806d53Smrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
2250806d53Smrg# 02110-1301, USA.
2350806d53Smrg
2450806d53Smrg# As a special exception to the GNU General Public License, if you
2550806d53Smrg# distribute this file as part of a program that contains a
2650806d53Smrg# configuration script generated by Autoconf, you may include it under
2750806d53Smrg# the same distribution terms that you use for the rest of that program.
2850806d53Smrg
2950806d53Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
3050806d53Smrg
3150806d53Smrgcase $1 in
3250806d53Smrg  '')
3350806d53Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
3450806d53Smrg     exit 1;
3550806d53Smrg     ;;
3650806d53Smrg  -h | --h*)
3750806d53Smrg    cat <<\EOF
3850806d53SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
3950806d53Smrg
4050806d53SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
4150806d53Smrgas side-effects.
4250806d53Smrg
4350806d53SmrgEnvironment variables:
4450806d53Smrg  depmode     Dependency tracking mode.
4550806d53Smrg  source      Source file read by `PROGRAMS ARGS'.
4650806d53Smrg  object      Object file output by `PROGRAMS ARGS'.
4750806d53Smrg  DEPDIR      directory where to store dependencies.
4850806d53Smrg  depfile     Dependency file to output.
4950806d53Smrg  tmpdepfile  Temporary file to use when outputing dependencies.
5050806d53Smrg  libtool     Whether libtool is used (yes/no).
5150806d53Smrg
5250806d53SmrgReport bugs to <bug-automake@gnu.org>.
5350806d53SmrgEOF
5450806d53Smrg    exit $?
5550806d53Smrg    ;;
5650806d53Smrg  -v | --v*)
5750806d53Smrg    echo "depcomp $scriptversion"
5850806d53Smrg    exit $?
5950806d53Smrg    ;;
6050806d53Smrgesac
6150806d53Smrg
6250806d53Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
6350806d53Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
6450806d53Smrg  exit 1
6550806d53Smrgfi
6650806d53Smrg
6750806d53Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
6850806d53Smrgdepfile=${depfile-`echo "$object" |
6950806d53Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
7050806d53Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
7150806d53Smrg
7250806d53Smrgrm -f "$tmpdepfile"
7350806d53Smrg
7450806d53Smrg# Some modes work just like other modes, but use different flags.  We
7550806d53Smrg# parameterize here, but still list the modes in the big case below,
7650806d53Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
7750806d53Smrg# here, because this file can only contain one case statement.
7850806d53Smrgif test "$depmode" = hp; then
7950806d53Smrg  # HP compiler uses -M and no extra arg.
8050806d53Smrg  gccflag=-M
8150806d53Smrg  depmode=gcc
8250806d53Smrgfi
8350806d53Smrg
8450806d53Smrgif test "$depmode" = dashXmstdout; then
8550806d53Smrg   # This is just like dashmstdout with a different argument.
8650806d53Smrg   dashmflag=-xM
8750806d53Smrg   depmode=dashmstdout
8850806d53Smrgfi
8950806d53Smrg
9050806d53Smrgcase "$depmode" in
9150806d53Smrggcc3)
9250806d53Smrg## gcc 3 implements dependency tracking that does exactly what
9350806d53Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
9450806d53Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
957965d9acSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
967965d9acSmrg## the command line argument order; so add the flags where they
977965d9acSmrg## appear in depend2.am.  Note that the slowdown incurred here
987965d9acSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
997965d9acSmrg  for arg
1007965d9acSmrg  do
1017965d9acSmrg    case $arg in
1027965d9acSmrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
1037965d9acSmrg    *)  set fnord "$@" "$arg" ;;
1047965d9acSmrg    esac
1057965d9acSmrg    shift # fnord
1067965d9acSmrg    shift # $arg
1077965d9acSmrg  done
1087965d9acSmrg  "$@"
10950806d53Smrg  stat=$?
11050806d53Smrg  if test $stat -eq 0; then :
11150806d53Smrg  else
11250806d53Smrg    rm -f "$tmpdepfile"
11350806d53Smrg    exit $stat
11450806d53Smrg  fi
11550806d53Smrg  mv "$tmpdepfile" "$depfile"
11650806d53Smrg  ;;
11750806d53Smrg
11850806d53Smrggcc)
11950806d53Smrg## There are various ways to get dependency output from gcc.  Here's
12050806d53Smrg## why we pick this rather obscure method:
12150806d53Smrg## - Don't want to use -MD because we'd like the dependencies to end
12250806d53Smrg##   up in a subdir.  Having to rename by hand is ugly.
12350806d53Smrg##   (We might end up doing this anyway to support other compilers.)
12450806d53Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
12550806d53Smrg##   -MM, not -M (despite what the docs say).
12650806d53Smrg## - Using -M directly means running the compiler twice (even worse
12750806d53Smrg##   than renaming).
12850806d53Smrg  if test -z "$gccflag"; then
12950806d53Smrg    gccflag=-MD,
13050806d53Smrg  fi
13150806d53Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
13250806d53Smrg  stat=$?
13350806d53Smrg  if test $stat -eq 0; then :
13450806d53Smrg  else
13550806d53Smrg    rm -f "$tmpdepfile"
13650806d53Smrg    exit $stat
13750806d53Smrg  fi
13850806d53Smrg  rm -f "$depfile"
13950806d53Smrg  echo "$object : \\" > "$depfile"
14050806d53Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
14150806d53Smrg## The second -e expression handles DOS-style file names with drive letters.
14250806d53Smrg  sed -e 's/^[^:]*: / /' \
14350806d53Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
14450806d53Smrg## This next piece of magic avoids the `deleted header file' problem.
14550806d53Smrg## The problem is that when a header file which appears in a .P file
14650806d53Smrg## is deleted, the dependency causes make to die (because there is
14750806d53Smrg## typically no way to rebuild the header).  We avoid this by adding
14850806d53Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
14950806d53Smrg## this for us directly.
15050806d53Smrg  tr ' ' '
15150806d53Smrg' < "$tmpdepfile" |
15250806d53Smrg## Some versions of gcc put a space before the `:'.  On the theory
15350806d53Smrg## that the space means something, we add a space to the output as
15450806d53Smrg## well.
15550806d53Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
15650806d53Smrg## correctly.  Breaking it into two sed invocations is a workaround.
15750806d53Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
15850806d53Smrg  rm -f "$tmpdepfile"
15950806d53Smrg  ;;
16050806d53Smrg
16150806d53Smrghp)
16250806d53Smrg  # This case exists only to let depend.m4 do its work.  It works by
16350806d53Smrg  # looking at the text of this script.  This case will never be run,
16450806d53Smrg  # since it is checked for above.
16550806d53Smrg  exit 1
16650806d53Smrg  ;;
16750806d53Smrg
16850806d53Smrgsgi)
16950806d53Smrg  if test "$libtool" = yes; then
17050806d53Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
17150806d53Smrg  else
17250806d53Smrg    "$@" -MDupdate "$tmpdepfile"
17350806d53Smrg  fi
17450806d53Smrg  stat=$?
17550806d53Smrg  if test $stat -eq 0; then :
17650806d53Smrg  else
17750806d53Smrg    rm -f "$tmpdepfile"
17850806d53Smrg    exit $stat
17950806d53Smrg  fi
18050806d53Smrg  rm -f "$depfile"
18150806d53Smrg
18250806d53Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
18350806d53Smrg    echo "$object : \\" > "$depfile"
18450806d53Smrg
18550806d53Smrg    # Clip off the initial element (the dependent).  Don't try to be
18650806d53Smrg    # clever and replace this with sed code, as IRIX sed won't handle
18750806d53Smrg    # lines with more than a fixed number of characters (4096 in
18850806d53Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
18950806d53Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
19050806d53Smrg    # dependency line.
19150806d53Smrg    tr ' ' '
19250806d53Smrg' < "$tmpdepfile" \
19350806d53Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
19450806d53Smrg    tr '
19550806d53Smrg' ' ' >> $depfile
19650806d53Smrg    echo >> $depfile
19750806d53Smrg
19850806d53Smrg    # The second pass generates a dummy entry for each header file.
19950806d53Smrg    tr ' ' '
20050806d53Smrg' < "$tmpdepfile" \
20150806d53Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
20250806d53Smrg   >> $depfile
20350806d53Smrg  else
20450806d53Smrg    # The sourcefile does not contain any dependencies, so just
20550806d53Smrg    # store a dummy comment line, to avoid errors with the Makefile
20650806d53Smrg    # "include basename.Plo" scheme.
20750806d53Smrg    echo "#dummy" > "$depfile"
20850806d53Smrg  fi
20950806d53Smrg  rm -f "$tmpdepfile"
21050806d53Smrg  ;;
21150806d53Smrg
21250806d53Smrgaix)
21350806d53Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
21450806d53Smrg  # in a .u file.  In older versions, this file always lives in the
21550806d53Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
21650806d53Smrg  # start of each line; $object doesn't have directory information.
21750806d53Smrg  # Version 6 uses the directory in both cases.
2187965d9acSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
2197965d9acSmrg  test "x$dir" = "x$object" && dir=
2207965d9acSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
22150806d53Smrg  if test "$libtool" = yes; then
2227965d9acSmrg    tmpdepfile1=$dir$base.u
2237965d9acSmrg    tmpdepfile2=$base.u
2247965d9acSmrg    tmpdepfile3=$dir.libs/$base.u
22550806d53Smrg    "$@" -Wc,-M
22650806d53Smrg  else
2277965d9acSmrg    tmpdepfile1=$dir$base.u
2287965d9acSmrg    tmpdepfile2=$dir$base.u
2297965d9acSmrg    tmpdepfile3=$dir$base.u
23050806d53Smrg    "$@" -M
23150806d53Smrg  fi
23250806d53Smrg  stat=$?
23350806d53Smrg
23450806d53Smrg  if test $stat -eq 0; then :
23550806d53Smrg  else
2367965d9acSmrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
23750806d53Smrg    exit $stat
23850806d53Smrg  fi
23950806d53Smrg
2407965d9acSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2417965d9acSmrg  do
2427965d9acSmrg    test -f "$tmpdepfile" && break
2437965d9acSmrg  done
24450806d53Smrg  if test -f "$tmpdepfile"; then
24550806d53Smrg    # Each line is of the form `foo.o: dependent.h'.
24650806d53Smrg    # Do two passes, one to just change these to
24750806d53Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
2487965d9acSmrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
2497965d9acSmrg    # That's a tab and a space in the [].
2507965d9acSmrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
25150806d53Smrg  else
25250806d53Smrg    # The sourcefile does not contain any dependencies, so just
25350806d53Smrg    # store a dummy comment line, to avoid errors with the Makefile
25450806d53Smrg    # "include basename.Plo" scheme.
25550806d53Smrg    echo "#dummy" > "$depfile"
25650806d53Smrg  fi
25750806d53Smrg  rm -f "$tmpdepfile"
25850806d53Smrg  ;;
25950806d53Smrg
26050806d53Smrgicc)
26150806d53Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
26250806d53Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
26350806d53Smrg  # ICC 7.0 will fill foo.d with something like
26450806d53Smrg  #    foo.o: sub/foo.c
26550806d53Smrg  #    foo.o: sub/foo.h
26650806d53Smrg  # which is wrong.  We want:
26750806d53Smrg  #    sub/foo.o: sub/foo.c
26850806d53Smrg  #    sub/foo.o: sub/foo.h
26950806d53Smrg  #    sub/foo.c:
27050806d53Smrg  #    sub/foo.h:
27150806d53Smrg  # ICC 7.1 will output
27250806d53Smrg  #    foo.o: sub/foo.c sub/foo.h
27350806d53Smrg  # and will wrap long lines using \ :
27450806d53Smrg  #    foo.o: sub/foo.c ... \
27550806d53Smrg  #     sub/foo.h ... \
27650806d53Smrg  #     ...
27750806d53Smrg
27850806d53Smrg  "$@" -MD -MF "$tmpdepfile"
27950806d53Smrg  stat=$?
28050806d53Smrg  if test $stat -eq 0; then :
28150806d53Smrg  else
28250806d53Smrg    rm -f "$tmpdepfile"
28350806d53Smrg    exit $stat
28450806d53Smrg  fi
28550806d53Smrg  rm -f "$depfile"
28650806d53Smrg  # Each line is of the form `foo.o: dependent.h',
28750806d53Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
28850806d53Smrg  # Do two passes, one to just change these to
28950806d53Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
29050806d53Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
29150806d53Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
29250806d53Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
29350806d53Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
29450806d53Smrg    sed -e 's/$/ :/' >> "$depfile"
29550806d53Smrg  rm -f "$tmpdepfile"
29650806d53Smrg  ;;
29750806d53Smrg
2987965d9acSmrghp2)
2997965d9acSmrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
3007965d9acSmrg  # compilers, which have integrated preprocessors.  The correct option
3017965d9acSmrg  # to use with these is +Maked; it writes dependencies to a file named
3027965d9acSmrg  # 'foo.d', which lands next to the object file, wherever that
3037965d9acSmrg  # happens to be.
3047965d9acSmrg  # Much of this is similar to the tru64 case; see comments there.
3057965d9acSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3067965d9acSmrg  test "x$dir" = "x$object" && dir=
3077965d9acSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3087965d9acSmrg  if test "$libtool" = yes; then
3097965d9acSmrg    tmpdepfile1=$dir$base.d
3107965d9acSmrg    tmpdepfile2=$dir.libs/$base.d
3117965d9acSmrg    "$@" -Wc,+Maked
3127965d9acSmrg  else
3137965d9acSmrg    tmpdepfile1=$dir$base.d
3147965d9acSmrg    tmpdepfile2=$dir$base.d
3157965d9acSmrg    "$@" +Maked
3167965d9acSmrg  fi
3177965d9acSmrg  stat=$?
3187965d9acSmrg  if test $stat -eq 0; then :
3197965d9acSmrg  else
3207965d9acSmrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
3217965d9acSmrg     exit $stat
3227965d9acSmrg  fi
3237965d9acSmrg
3247965d9acSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
3257965d9acSmrg  do
3267965d9acSmrg    test -f "$tmpdepfile" && break
3277965d9acSmrg  done
3287965d9acSmrg  if test -f "$tmpdepfile"; then
3297965d9acSmrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
3307965d9acSmrg    # Add `dependent.h:' lines.
3317965d9acSmrg    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
3327965d9acSmrg  else
3337965d9acSmrg    echo "#dummy" > "$depfile"
3347965d9acSmrg  fi
3357965d9acSmrg  rm -f "$tmpdepfile" "$tmpdepfile2"
3367965d9acSmrg  ;;
3377965d9acSmrg
33850806d53Smrgtru64)
33950806d53Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
34050806d53Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
34150806d53Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
34250806d53Smrg   # dependencies in `foo.d' instead, so we check for that too.
34350806d53Smrg   # Subdirectories are respected.
34450806d53Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
34550806d53Smrg   test "x$dir" = "x$object" && dir=
34650806d53Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
34750806d53Smrg
34850806d53Smrg   if test "$libtool" = yes; then
34950806d53Smrg      # With Tru64 cc, shared objects can also be used to make a
3507965d9acSmrg      # static library.  This mechanism is used in libtool 1.4 series to
35150806d53Smrg      # handle both shared and static libraries in a single compilation.
35250806d53Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
35350806d53Smrg      #
35450806d53Smrg      # With libtool 1.5 this exception was removed, and libtool now
35550806d53Smrg      # generates 2 separate objects for the 2 libraries.  These two
3567965d9acSmrg      # compilations output dependencies in $dir.libs/$base.o.d and
35750806d53Smrg      # in $dir$base.o.d.  We have to check for both files, because
35850806d53Smrg      # one of the two compilations can be disabled.  We should prefer
35950806d53Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
36050806d53Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
36150806d53Smrg      # the former would cause a distcleancheck panic.
36250806d53Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
36350806d53Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
36450806d53Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
36550806d53Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
36650806d53Smrg      "$@" -Wc,-MD
36750806d53Smrg   else
36850806d53Smrg      tmpdepfile1=$dir$base.o.d
36950806d53Smrg      tmpdepfile2=$dir$base.d
37050806d53Smrg      tmpdepfile3=$dir$base.d
37150806d53Smrg      tmpdepfile4=$dir$base.d
37250806d53Smrg      "$@" -MD
37350806d53Smrg   fi
37450806d53Smrg
37550806d53Smrg   stat=$?
37650806d53Smrg   if test $stat -eq 0; then :
37750806d53Smrg   else
37850806d53Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
37950806d53Smrg      exit $stat
38050806d53Smrg   fi
38150806d53Smrg
38250806d53Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
38350806d53Smrg   do
38450806d53Smrg     test -f "$tmpdepfile" && break
38550806d53Smrg   done
38650806d53Smrg   if test -f "$tmpdepfile"; then
38750806d53Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
38850806d53Smrg      # That's a tab and a space in the [].
38950806d53Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
39050806d53Smrg   else
39150806d53Smrg      echo "#dummy" > "$depfile"
39250806d53Smrg   fi
39350806d53Smrg   rm -f "$tmpdepfile"
39450806d53Smrg   ;;
39550806d53Smrg
39650806d53Smrg#nosideeffect)
39750806d53Smrg  # This comment above is used by automake to tell side-effect
39850806d53Smrg  # dependency tracking mechanisms from slower ones.
39950806d53Smrg
40050806d53Smrgdashmstdout)
40150806d53Smrg  # Important note: in order to support this mode, a compiler *must*
40250806d53Smrg  # always write the preprocessed file to stdout, regardless of -o.
40350806d53Smrg  "$@" || exit $?
40450806d53Smrg
40550806d53Smrg  # Remove the call to Libtool.
40650806d53Smrg  if test "$libtool" = yes; then
40750806d53Smrg    while test $1 != '--mode=compile'; do
40850806d53Smrg      shift
40950806d53Smrg    done
41050806d53Smrg    shift
41150806d53Smrg  fi
41250806d53Smrg
41350806d53Smrg  # Remove `-o $object'.
41450806d53Smrg  IFS=" "
41550806d53Smrg  for arg
41650806d53Smrg  do
41750806d53Smrg    case $arg in
41850806d53Smrg    -o)
41950806d53Smrg      shift
42050806d53Smrg      ;;
42150806d53Smrg    $object)
42250806d53Smrg      shift
42350806d53Smrg      ;;
42450806d53Smrg    *)
42550806d53Smrg      set fnord "$@" "$arg"
42650806d53Smrg      shift # fnord
42750806d53Smrg      shift # $arg
42850806d53Smrg      ;;
42950806d53Smrg    esac
43050806d53Smrg  done
43150806d53Smrg
43250806d53Smrg  test -z "$dashmflag" && dashmflag=-M
43350806d53Smrg  # Require at least two characters before searching for `:'
43450806d53Smrg  # in the target name.  This is to cope with DOS-style filenames:
43550806d53Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
43650806d53Smrg  "$@" $dashmflag |
43750806d53Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
43850806d53Smrg  rm -f "$depfile"
43950806d53Smrg  cat < "$tmpdepfile" > "$depfile"
44050806d53Smrg  tr ' ' '
44150806d53Smrg' < "$tmpdepfile" | \
44250806d53Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
44350806d53Smrg## correctly.  Breaking it into two sed invocations is a workaround.
44450806d53Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
44550806d53Smrg  rm -f "$tmpdepfile"
44650806d53Smrg  ;;
44750806d53Smrg
44850806d53SmrgdashXmstdout)
44950806d53Smrg  # This case only exists to satisfy depend.m4.  It is never actually
45050806d53Smrg  # run, as this mode is specially recognized in the preamble.
45150806d53Smrg  exit 1
45250806d53Smrg  ;;
45350806d53Smrg
45450806d53Smrgmakedepend)
45550806d53Smrg  "$@" || exit $?
45650806d53Smrg  # Remove any Libtool call
45750806d53Smrg  if test "$libtool" = yes; then
45850806d53Smrg    while test $1 != '--mode=compile'; do
45950806d53Smrg      shift
46050806d53Smrg    done
46150806d53Smrg    shift
46250806d53Smrg  fi
46350806d53Smrg  # X makedepend
46450806d53Smrg  shift
46550806d53Smrg  cleared=no
46650806d53Smrg  for arg in "$@"; do
46750806d53Smrg    case $cleared in
46850806d53Smrg    no)
46950806d53Smrg      set ""; shift
47050806d53Smrg      cleared=yes ;;
47150806d53Smrg    esac
47250806d53Smrg    case "$arg" in
47350806d53Smrg    -D*|-I*)
47450806d53Smrg      set fnord "$@" "$arg"; shift ;;
47550806d53Smrg    # Strip any option that makedepend may not understand.  Remove
47650806d53Smrg    # the object too, otherwise makedepend will parse it as a source file.
47750806d53Smrg    -*|$object)
47850806d53Smrg      ;;
47950806d53Smrg    *)
48050806d53Smrg      set fnord "$@" "$arg"; shift ;;
48150806d53Smrg    esac
48250806d53Smrg  done
48350806d53Smrg  obj_suffix="`echo $object | sed 's/^.*\././'`"
48450806d53Smrg  touch "$tmpdepfile"
48550806d53Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
48650806d53Smrg  rm -f "$depfile"
48750806d53Smrg  cat < "$tmpdepfile" > "$depfile"
48850806d53Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
48950806d53Smrg' | \
49050806d53Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
49150806d53Smrg## correctly.  Breaking it into two sed invocations is a workaround.
49250806d53Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
49350806d53Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
49450806d53Smrg  ;;
49550806d53Smrg
49650806d53Smrgcpp)
49750806d53Smrg  # Important note: in order to support this mode, a compiler *must*
49850806d53Smrg  # always write the preprocessed file to stdout.
49950806d53Smrg  "$@" || exit $?
50050806d53Smrg
50150806d53Smrg  # Remove the call to Libtool.
50250806d53Smrg  if test "$libtool" = yes; then
50350806d53Smrg    while test $1 != '--mode=compile'; do
50450806d53Smrg      shift
50550806d53Smrg    done
50650806d53Smrg    shift
50750806d53Smrg  fi
50850806d53Smrg
50950806d53Smrg  # Remove `-o $object'.
51050806d53Smrg  IFS=" "
51150806d53Smrg  for arg
51250806d53Smrg  do
51350806d53Smrg    case $arg in
51450806d53Smrg    -o)
51550806d53Smrg      shift
51650806d53Smrg      ;;
51750806d53Smrg    $object)
51850806d53Smrg      shift
51950806d53Smrg      ;;
52050806d53Smrg    *)
52150806d53Smrg      set fnord "$@" "$arg"
52250806d53Smrg      shift # fnord
52350806d53Smrg      shift # $arg
52450806d53Smrg      ;;
52550806d53Smrg    esac
52650806d53Smrg  done
52750806d53Smrg
52850806d53Smrg  "$@" -E |
52950806d53Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
53050806d53Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
53150806d53Smrg    sed '$ s: \\$::' > "$tmpdepfile"
53250806d53Smrg  rm -f "$depfile"
53350806d53Smrg  echo "$object : \\" > "$depfile"
53450806d53Smrg  cat < "$tmpdepfile" >> "$depfile"
53550806d53Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
53650806d53Smrg  rm -f "$tmpdepfile"
53750806d53Smrg  ;;
53850806d53Smrg
53950806d53Smrgmsvisualcpp)
54050806d53Smrg  # Important note: in order to support this mode, a compiler *must*
54150806d53Smrg  # always write the preprocessed file to stdout, regardless of -o,
54250806d53Smrg  # because we must use -o when running libtool.
54350806d53Smrg  "$@" || exit $?
54450806d53Smrg  IFS=" "
54550806d53Smrg  for arg
54650806d53Smrg  do
54750806d53Smrg    case "$arg" in
54850806d53Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
54950806d53Smrg	set fnord "$@"
55050806d53Smrg	shift
55150806d53Smrg	shift
55250806d53Smrg	;;
55350806d53Smrg    *)
55450806d53Smrg	set fnord "$@" "$arg"
55550806d53Smrg	shift
55650806d53Smrg	shift
55750806d53Smrg	;;
55850806d53Smrg    esac
55950806d53Smrg  done
56050806d53Smrg  "$@" -E |
56150806d53Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
56250806d53Smrg  rm -f "$depfile"
56350806d53Smrg  echo "$object : \\" > "$depfile"
56450806d53Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
56550806d53Smrg  echo "	" >> "$depfile"
56650806d53Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
56750806d53Smrg  rm -f "$tmpdepfile"
56850806d53Smrg  ;;
56950806d53Smrg
57050806d53Smrgnone)
57150806d53Smrg  exec "$@"
57250806d53Smrg  ;;
57350806d53Smrg
57450806d53Smrg*)
57550806d53Smrg  echo "Unknown depmode $depmode" 1>&2
57650806d53Smrg  exit 1
57750806d53Smrg  ;;
57850806d53Smrgesac
57950806d53Smrg
58050806d53Smrgexit 0
58150806d53Smrg
58250806d53Smrg# Local Variables:
58350806d53Smrg# mode: shell-script
58450806d53Smrg# sh-indentation: 2
58550806d53Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
58650806d53Smrg# time-stamp-start: "scriptversion="
58750806d53Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
58850806d53Smrg# time-stamp-end: "$"
58950806d53Smrg# End:
590