depcomp revision a73423d7
150806d53Smrg#! /bin/sh
250806d53Smrg# depcomp - compile a program generating dependencies as side-effects
350806d53Smrg
4a73423d7Smrgscriptversion=2011-12-04.11; # UTC
550806d53Smrg
6a73423d7Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
7a73423d7Smrg# 2011 Free Software 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
20a73423d7Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
2150806d53Smrg
2250806d53Smrg# As a special exception to the GNU General Public License, if you
2350806d53Smrg# distribute this file as part of a program that contains a
2450806d53Smrg# configuration script generated by Autoconf, you may include it under
2550806d53Smrg# the same distribution terms that you use for the rest of that program.
2650806d53Smrg
2750806d53Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
2850806d53Smrg
2950806d53Smrgcase $1 in
3050806d53Smrg  '')
3150806d53Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
3250806d53Smrg     exit 1;
3350806d53Smrg     ;;
3450806d53Smrg  -h | --h*)
3550806d53Smrg    cat <<\EOF
3650806d53SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
3750806d53Smrg
3850806d53SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
3950806d53Smrgas side-effects.
4050806d53Smrg
4150806d53SmrgEnvironment variables:
4250806d53Smrg  depmode     Dependency tracking mode.
4350806d53Smrg  source      Source file read by `PROGRAMS ARGS'.
4450806d53Smrg  object      Object file output by `PROGRAMS ARGS'.
4550806d53Smrg  DEPDIR      directory where to store dependencies.
4650806d53Smrg  depfile     Dependency file to output.
47a73423d7Smrg  tmpdepfile  Temporary file to use when outputting dependencies.
4850806d53Smrg  libtool     Whether libtool is used (yes/no).
4950806d53Smrg
5050806d53SmrgReport bugs to <bug-automake@gnu.org>.
5150806d53SmrgEOF
5250806d53Smrg    exit $?
5350806d53Smrg    ;;
5450806d53Smrg  -v | --v*)
5550806d53Smrg    echo "depcomp $scriptversion"
5650806d53Smrg    exit $?
5750806d53Smrg    ;;
5850806d53Smrgesac
5950806d53Smrg
6050806d53Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
6150806d53Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
6250806d53Smrg  exit 1
6350806d53Smrgfi
6450806d53Smrg
6550806d53Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
6650806d53Smrgdepfile=${depfile-`echo "$object" |
6750806d53Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
6850806d53Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
6950806d53Smrg
7050806d53Smrgrm -f "$tmpdepfile"
7150806d53Smrg
7250806d53Smrg# Some modes work just like other modes, but use different flags.  We
7350806d53Smrg# parameterize here, but still list the modes in the big case below,
7450806d53Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
7550806d53Smrg# here, because this file can only contain one case statement.
7650806d53Smrgif test "$depmode" = hp; then
7750806d53Smrg  # HP compiler uses -M and no extra arg.
7850806d53Smrg  gccflag=-M
7950806d53Smrg  depmode=gcc
8050806d53Smrgfi
8150806d53Smrg
8250806d53Smrgif test "$depmode" = dashXmstdout; then
8350806d53Smrg   # This is just like dashmstdout with a different argument.
8450806d53Smrg   dashmflag=-xM
8550806d53Smrg   depmode=dashmstdout
8650806d53Smrgfi
8750806d53Smrg
88a73423d7Smrgcygpath_u="cygpath -u -f -"
89a73423d7Smrgif test "$depmode" = msvcmsys; then
90a73423d7Smrg   # This is just like msvisualcpp but w/o cygpath translation.
91a73423d7Smrg   # Just convert the backslash-escaped backslashes to single forward
92a73423d7Smrg   # slashes to satisfy depend.m4
93a73423d7Smrg   cygpath_u='sed s,\\\\,/,g'
94a73423d7Smrg   depmode=msvisualcpp
95a73423d7Smrgfi
96a73423d7Smrg
97a73423d7Smrgif test "$depmode" = msvc7msys; then
98a73423d7Smrg   # This is just like msvc7 but w/o cygpath translation.
99a73423d7Smrg   # Just convert the backslash-escaped backslashes to single forward
100a73423d7Smrg   # slashes to satisfy depend.m4
101a73423d7Smrg   cygpath_u='sed s,\\\\,/,g'
102a73423d7Smrg   depmode=msvc7
103a73423d7Smrgfi
104a73423d7Smrg
10550806d53Smrgcase "$depmode" in
10650806d53Smrggcc3)
10750806d53Smrg## gcc 3 implements dependency tracking that does exactly what
10850806d53Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
10950806d53Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
1107965d9acSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
1117965d9acSmrg## the command line argument order; so add the flags where they
1127965d9acSmrg## appear in depend2.am.  Note that the slowdown incurred here
1137965d9acSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
1147965d9acSmrg  for arg
1157965d9acSmrg  do
1167965d9acSmrg    case $arg in
1177965d9acSmrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
1187965d9acSmrg    *)  set fnord "$@" "$arg" ;;
1197965d9acSmrg    esac
1207965d9acSmrg    shift # fnord
1217965d9acSmrg    shift # $arg
1227965d9acSmrg  done
1237965d9acSmrg  "$@"
12450806d53Smrg  stat=$?
12550806d53Smrg  if test $stat -eq 0; then :
12650806d53Smrg  else
12750806d53Smrg    rm -f "$tmpdepfile"
12850806d53Smrg    exit $stat
12950806d53Smrg  fi
13050806d53Smrg  mv "$tmpdepfile" "$depfile"
13150806d53Smrg  ;;
13250806d53Smrg
13350806d53Smrggcc)
13450806d53Smrg## There are various ways to get dependency output from gcc.  Here's
13550806d53Smrg## why we pick this rather obscure method:
13650806d53Smrg## - Don't want to use -MD because we'd like the dependencies to end
13750806d53Smrg##   up in a subdir.  Having to rename by hand is ugly.
13850806d53Smrg##   (We might end up doing this anyway to support other compilers.)
13950806d53Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
14050806d53Smrg##   -MM, not -M (despite what the docs say).
14150806d53Smrg## - Using -M directly means running the compiler twice (even worse
14250806d53Smrg##   than renaming).
14350806d53Smrg  if test -z "$gccflag"; then
14450806d53Smrg    gccflag=-MD,
14550806d53Smrg  fi
14650806d53Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
14750806d53Smrg  stat=$?
14850806d53Smrg  if test $stat -eq 0; then :
14950806d53Smrg  else
15050806d53Smrg    rm -f "$tmpdepfile"
15150806d53Smrg    exit $stat
15250806d53Smrg  fi
15350806d53Smrg  rm -f "$depfile"
15450806d53Smrg  echo "$object : \\" > "$depfile"
15550806d53Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
15650806d53Smrg## The second -e expression handles DOS-style file names with drive letters.
15750806d53Smrg  sed -e 's/^[^:]*: / /' \
15850806d53Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
15950806d53Smrg## This next piece of magic avoids the `deleted header file' problem.
16050806d53Smrg## The problem is that when a header file which appears in a .P file
16150806d53Smrg## is deleted, the dependency causes make to die (because there is
16250806d53Smrg## typically no way to rebuild the header).  We avoid this by adding
16350806d53Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
16450806d53Smrg## this for us directly.
16550806d53Smrg  tr ' ' '
16650806d53Smrg' < "$tmpdepfile" |
16750806d53Smrg## Some versions of gcc put a space before the `:'.  On the theory
16850806d53Smrg## that the space means something, we add a space to the output as
169a73423d7Smrg## well.  hp depmode also adds that space, but also prefixes the VPATH
170a73423d7Smrg## to the object.  Take care to not repeat it in the output.
17150806d53Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
17250806d53Smrg## correctly.  Breaking it into two sed invocations is a workaround.
173a73423d7Smrg    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
174a73423d7Smrg      | sed -e 's/$/ :/' >> "$depfile"
17550806d53Smrg  rm -f "$tmpdepfile"
17650806d53Smrg  ;;
17750806d53Smrg
17850806d53Smrghp)
17950806d53Smrg  # This case exists only to let depend.m4 do its work.  It works by
18050806d53Smrg  # looking at the text of this script.  This case will never be run,
18150806d53Smrg  # since it is checked for above.
18250806d53Smrg  exit 1
18350806d53Smrg  ;;
18450806d53Smrg
18550806d53Smrgsgi)
18650806d53Smrg  if test "$libtool" = yes; then
18750806d53Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
18850806d53Smrg  else
18950806d53Smrg    "$@" -MDupdate "$tmpdepfile"
19050806d53Smrg  fi
19150806d53Smrg  stat=$?
19250806d53Smrg  if test $stat -eq 0; then :
19350806d53Smrg  else
19450806d53Smrg    rm -f "$tmpdepfile"
19550806d53Smrg    exit $stat
19650806d53Smrg  fi
19750806d53Smrg  rm -f "$depfile"
19850806d53Smrg
19950806d53Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
20050806d53Smrg    echo "$object : \\" > "$depfile"
20150806d53Smrg
20250806d53Smrg    # Clip off the initial element (the dependent).  Don't try to be
20350806d53Smrg    # clever and replace this with sed code, as IRIX sed won't handle
20450806d53Smrg    # lines with more than a fixed number of characters (4096 in
20550806d53Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
20650806d53Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
20750806d53Smrg    # dependency line.
20850806d53Smrg    tr ' ' '
20950806d53Smrg' < "$tmpdepfile" \
21050806d53Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
21150806d53Smrg    tr '
212a73423d7Smrg' ' ' >> "$depfile"
213a73423d7Smrg    echo >> "$depfile"
21450806d53Smrg
21550806d53Smrg    # The second pass generates a dummy entry for each header file.
21650806d53Smrg    tr ' ' '
21750806d53Smrg' < "$tmpdepfile" \
21850806d53Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
219a73423d7Smrg   >> "$depfile"
22050806d53Smrg  else
22150806d53Smrg    # The sourcefile does not contain any dependencies, so just
22250806d53Smrg    # store a dummy comment line, to avoid errors with the Makefile
22350806d53Smrg    # "include basename.Plo" scheme.
22450806d53Smrg    echo "#dummy" > "$depfile"
22550806d53Smrg  fi
22650806d53Smrg  rm -f "$tmpdepfile"
22750806d53Smrg  ;;
22850806d53Smrg
22950806d53Smrgaix)
23050806d53Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
23150806d53Smrg  # in a .u file.  In older versions, this file always lives in the
23250806d53Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
23350806d53Smrg  # start of each line; $object doesn't have directory information.
23450806d53Smrg  # Version 6 uses the directory in both cases.
2357965d9acSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
2367965d9acSmrg  test "x$dir" = "x$object" && dir=
2377965d9acSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
23850806d53Smrg  if test "$libtool" = yes; then
2397965d9acSmrg    tmpdepfile1=$dir$base.u
2407965d9acSmrg    tmpdepfile2=$base.u
2417965d9acSmrg    tmpdepfile3=$dir.libs/$base.u
24250806d53Smrg    "$@" -Wc,-M
24350806d53Smrg  else
2447965d9acSmrg    tmpdepfile1=$dir$base.u
2457965d9acSmrg    tmpdepfile2=$dir$base.u
2467965d9acSmrg    tmpdepfile3=$dir$base.u
24750806d53Smrg    "$@" -M
24850806d53Smrg  fi
24950806d53Smrg  stat=$?
25050806d53Smrg
25150806d53Smrg  if test $stat -eq 0; then :
25250806d53Smrg  else
2537965d9acSmrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
25450806d53Smrg    exit $stat
25550806d53Smrg  fi
25650806d53Smrg
2577965d9acSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2587965d9acSmrg  do
2597965d9acSmrg    test -f "$tmpdepfile" && break
2607965d9acSmrg  done
26150806d53Smrg  if test -f "$tmpdepfile"; then
26250806d53Smrg    # Each line is of the form `foo.o: dependent.h'.
26350806d53Smrg    # Do two passes, one to just change these to
26450806d53Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
2657965d9acSmrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
2667965d9acSmrg    # That's a tab and a space in the [].
2677965d9acSmrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
26850806d53Smrg  else
26950806d53Smrg    # The sourcefile does not contain any dependencies, so just
27050806d53Smrg    # store a dummy comment line, to avoid errors with the Makefile
27150806d53Smrg    # "include basename.Plo" scheme.
27250806d53Smrg    echo "#dummy" > "$depfile"
27350806d53Smrg  fi
27450806d53Smrg  rm -f "$tmpdepfile"
27550806d53Smrg  ;;
27650806d53Smrg
27750806d53Smrgicc)
27850806d53Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
27950806d53Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
28050806d53Smrg  # ICC 7.0 will fill foo.d with something like
28150806d53Smrg  #    foo.o: sub/foo.c
28250806d53Smrg  #    foo.o: sub/foo.h
28350806d53Smrg  # which is wrong.  We want:
28450806d53Smrg  #    sub/foo.o: sub/foo.c
28550806d53Smrg  #    sub/foo.o: sub/foo.h
28650806d53Smrg  #    sub/foo.c:
28750806d53Smrg  #    sub/foo.h:
28850806d53Smrg  # ICC 7.1 will output
28950806d53Smrg  #    foo.o: sub/foo.c sub/foo.h
29050806d53Smrg  # and will wrap long lines using \ :
29150806d53Smrg  #    foo.o: sub/foo.c ... \
29250806d53Smrg  #     sub/foo.h ... \
29350806d53Smrg  #     ...
29450806d53Smrg
29550806d53Smrg  "$@" -MD -MF "$tmpdepfile"
29650806d53Smrg  stat=$?
29750806d53Smrg  if test $stat -eq 0; then :
29850806d53Smrg  else
29950806d53Smrg    rm -f "$tmpdepfile"
30050806d53Smrg    exit $stat
30150806d53Smrg  fi
30250806d53Smrg  rm -f "$depfile"
30350806d53Smrg  # Each line is of the form `foo.o: dependent.h',
30450806d53Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
30550806d53Smrg  # Do two passes, one to just change these to
30650806d53Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
30750806d53Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
30850806d53Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
30950806d53Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
31050806d53Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
31150806d53Smrg    sed -e 's/$/ :/' >> "$depfile"
31250806d53Smrg  rm -f "$tmpdepfile"
31350806d53Smrg  ;;
31450806d53Smrg
3157965d9acSmrghp2)
3167965d9acSmrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
3177965d9acSmrg  # compilers, which have integrated preprocessors.  The correct option
3187965d9acSmrg  # to use with these is +Maked; it writes dependencies to a file named
3197965d9acSmrg  # 'foo.d', which lands next to the object file, wherever that
3207965d9acSmrg  # happens to be.
3217965d9acSmrg  # Much of this is similar to the tru64 case; see comments there.
3227965d9acSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3237965d9acSmrg  test "x$dir" = "x$object" && dir=
3247965d9acSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3257965d9acSmrg  if test "$libtool" = yes; then
3267965d9acSmrg    tmpdepfile1=$dir$base.d
3277965d9acSmrg    tmpdepfile2=$dir.libs/$base.d
3287965d9acSmrg    "$@" -Wc,+Maked
3297965d9acSmrg  else
3307965d9acSmrg    tmpdepfile1=$dir$base.d
3317965d9acSmrg    tmpdepfile2=$dir$base.d
3327965d9acSmrg    "$@" +Maked
3337965d9acSmrg  fi
3347965d9acSmrg  stat=$?
3357965d9acSmrg  if test $stat -eq 0; then :
3367965d9acSmrg  else
3377965d9acSmrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
3387965d9acSmrg     exit $stat
3397965d9acSmrg  fi
3407965d9acSmrg
3417965d9acSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
3427965d9acSmrg  do
3437965d9acSmrg    test -f "$tmpdepfile" && break
3447965d9acSmrg  done
3457965d9acSmrg  if test -f "$tmpdepfile"; then
3467965d9acSmrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
3477965d9acSmrg    # Add `dependent.h:' lines.
348a73423d7Smrg    sed -ne '2,${
349a73423d7Smrg	       s/^ *//
350a73423d7Smrg	       s/ \\*$//
351a73423d7Smrg	       s/$/:/
352a73423d7Smrg	       p
353a73423d7Smrg	     }' "$tmpdepfile" >> "$depfile"
3547965d9acSmrg  else
3557965d9acSmrg    echo "#dummy" > "$depfile"
3567965d9acSmrg  fi
3577965d9acSmrg  rm -f "$tmpdepfile" "$tmpdepfile2"
3587965d9acSmrg  ;;
3597965d9acSmrg
36050806d53Smrgtru64)
36150806d53Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
36250806d53Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
36350806d53Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
36450806d53Smrg   # dependencies in `foo.d' instead, so we check for that too.
36550806d53Smrg   # Subdirectories are respected.
36650806d53Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
36750806d53Smrg   test "x$dir" = "x$object" && dir=
36850806d53Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
36950806d53Smrg
37050806d53Smrg   if test "$libtool" = yes; then
37150806d53Smrg      # With Tru64 cc, shared objects can also be used to make a
3727965d9acSmrg      # static library.  This mechanism is used in libtool 1.4 series to
37350806d53Smrg      # handle both shared and static libraries in a single compilation.
37450806d53Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
37550806d53Smrg      #
37650806d53Smrg      # With libtool 1.5 this exception was removed, and libtool now
37750806d53Smrg      # generates 2 separate objects for the 2 libraries.  These two
3787965d9acSmrg      # compilations output dependencies in $dir.libs/$base.o.d and
37950806d53Smrg      # in $dir$base.o.d.  We have to check for both files, because
38050806d53Smrg      # one of the two compilations can be disabled.  We should prefer
38150806d53Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
38250806d53Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
38350806d53Smrg      # the former would cause a distcleancheck panic.
38450806d53Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
38550806d53Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
38650806d53Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
38750806d53Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
38850806d53Smrg      "$@" -Wc,-MD
38950806d53Smrg   else
39050806d53Smrg      tmpdepfile1=$dir$base.o.d
39150806d53Smrg      tmpdepfile2=$dir$base.d
39250806d53Smrg      tmpdepfile3=$dir$base.d
39350806d53Smrg      tmpdepfile4=$dir$base.d
39450806d53Smrg      "$@" -MD
39550806d53Smrg   fi
39650806d53Smrg
39750806d53Smrg   stat=$?
39850806d53Smrg   if test $stat -eq 0; then :
39950806d53Smrg   else
40050806d53Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
40150806d53Smrg      exit $stat
40250806d53Smrg   fi
40350806d53Smrg
40450806d53Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
40550806d53Smrg   do
40650806d53Smrg     test -f "$tmpdepfile" && break
40750806d53Smrg   done
40850806d53Smrg   if test -f "$tmpdepfile"; then
40950806d53Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
41050806d53Smrg      # That's a tab and a space in the [].
41150806d53Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
41250806d53Smrg   else
41350806d53Smrg      echo "#dummy" > "$depfile"
41450806d53Smrg   fi
41550806d53Smrg   rm -f "$tmpdepfile"
41650806d53Smrg   ;;
41750806d53Smrg
418a73423d7Smrgmsvc7)
419a73423d7Smrg  if test "$libtool" = yes; then
420a73423d7Smrg    showIncludes=-Wc,-showIncludes
421a73423d7Smrg  else
422a73423d7Smrg    showIncludes=-showIncludes
423a73423d7Smrg  fi
424a73423d7Smrg  "$@" $showIncludes > "$tmpdepfile"
425a73423d7Smrg  stat=$?
426a73423d7Smrg  grep -v '^Note: including file: ' "$tmpdepfile"
427a73423d7Smrg  if test "$stat" = 0; then :
428a73423d7Smrg  else
429a73423d7Smrg    rm -f "$tmpdepfile"
430a73423d7Smrg    exit $stat
431a73423d7Smrg  fi
432a73423d7Smrg  rm -f "$depfile"
433a73423d7Smrg  echo "$object : \\" > "$depfile"
434a73423d7Smrg  # The first sed program below extracts the file names and escapes
435a73423d7Smrg  # backslashes for cygpath.  The second sed program outputs the file
436a73423d7Smrg  # name when reading, but also accumulates all include files in the
437a73423d7Smrg  # hold buffer in order to output them again at the end.  This only
438a73423d7Smrg  # works with sed implementations that can handle large buffers.
439a73423d7Smrg  sed < "$tmpdepfile" -n '
440a73423d7Smrg/^Note: including file:  *\(.*\)/ {
441a73423d7Smrg  s//\1/
442a73423d7Smrg  s/\\/\\\\/g
443a73423d7Smrg  p
444a73423d7Smrg}' | $cygpath_u | sort -u | sed -n '
445a73423d7Smrgs/ /\\ /g
446a73423d7Smrgs/\(.*\)/	\1 \\/p
447a73423d7Smrgs/.\(.*\) \\/\1:/
448a73423d7SmrgH
449a73423d7Smrg$ {
450a73423d7Smrg  s/.*/	/
451a73423d7Smrg  G
452a73423d7Smrg  p
453a73423d7Smrg}' >> "$depfile"
454a73423d7Smrg  rm -f "$tmpdepfile"
455a73423d7Smrg  ;;
456a73423d7Smrg
457a73423d7Smrgmsvc7msys)
458a73423d7Smrg  # This case exists only to let depend.m4 do its work.  It works by
459a73423d7Smrg  # looking at the text of this script.  This case will never be run,
460a73423d7Smrg  # since it is checked for above.
461a73423d7Smrg  exit 1
462a73423d7Smrg  ;;
463a73423d7Smrg
46450806d53Smrg#nosideeffect)
46550806d53Smrg  # This comment above is used by automake to tell side-effect
46650806d53Smrg  # dependency tracking mechanisms from slower ones.
46750806d53Smrg
46850806d53Smrgdashmstdout)
46950806d53Smrg  # Important note: in order to support this mode, a compiler *must*
47050806d53Smrg  # always write the preprocessed file to stdout, regardless of -o.
47150806d53Smrg  "$@" || exit $?
47250806d53Smrg
47350806d53Smrg  # Remove the call to Libtool.
47450806d53Smrg  if test "$libtool" = yes; then
475a73423d7Smrg    while test "X$1" != 'X--mode=compile'; do
47650806d53Smrg      shift
47750806d53Smrg    done
47850806d53Smrg    shift
47950806d53Smrg  fi
48050806d53Smrg
48150806d53Smrg  # Remove `-o $object'.
48250806d53Smrg  IFS=" "
48350806d53Smrg  for arg
48450806d53Smrg  do
48550806d53Smrg    case $arg in
48650806d53Smrg    -o)
48750806d53Smrg      shift
48850806d53Smrg      ;;
48950806d53Smrg    $object)
49050806d53Smrg      shift
49150806d53Smrg      ;;
49250806d53Smrg    *)
49350806d53Smrg      set fnord "$@" "$arg"
49450806d53Smrg      shift # fnord
49550806d53Smrg      shift # $arg
49650806d53Smrg      ;;
49750806d53Smrg    esac
49850806d53Smrg  done
49950806d53Smrg
50050806d53Smrg  test -z "$dashmflag" && dashmflag=-M
50150806d53Smrg  # Require at least two characters before searching for `:'
50250806d53Smrg  # in the target name.  This is to cope with DOS-style filenames:
50350806d53Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
50450806d53Smrg  "$@" $dashmflag |
50550806d53Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
50650806d53Smrg  rm -f "$depfile"
50750806d53Smrg  cat < "$tmpdepfile" > "$depfile"
50850806d53Smrg  tr ' ' '
50950806d53Smrg' < "$tmpdepfile" | \
51050806d53Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
51150806d53Smrg## correctly.  Breaking it into two sed invocations is a workaround.
51250806d53Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
51350806d53Smrg  rm -f "$tmpdepfile"
51450806d53Smrg  ;;
51550806d53Smrg
51650806d53SmrgdashXmstdout)
51750806d53Smrg  # This case only exists to satisfy depend.m4.  It is never actually
51850806d53Smrg  # run, as this mode is specially recognized in the preamble.
51950806d53Smrg  exit 1
52050806d53Smrg  ;;
52150806d53Smrg
52250806d53Smrgmakedepend)
52350806d53Smrg  "$@" || exit $?
52450806d53Smrg  # Remove any Libtool call
52550806d53Smrg  if test "$libtool" = yes; then
526a73423d7Smrg    while test "X$1" != 'X--mode=compile'; do
52750806d53Smrg      shift
52850806d53Smrg    done
52950806d53Smrg    shift
53050806d53Smrg  fi
53150806d53Smrg  # X makedepend
53250806d53Smrg  shift
533a73423d7Smrg  cleared=no eat=no
534a73423d7Smrg  for arg
535a73423d7Smrg  do
53650806d53Smrg    case $cleared in
53750806d53Smrg    no)
53850806d53Smrg      set ""; shift
53950806d53Smrg      cleared=yes ;;
54050806d53Smrg    esac
541a73423d7Smrg    if test $eat = yes; then
542a73423d7Smrg      eat=no
543a73423d7Smrg      continue
544a73423d7Smrg    fi
54550806d53Smrg    case "$arg" in
54650806d53Smrg    -D*|-I*)
54750806d53Smrg      set fnord "$@" "$arg"; shift ;;
54850806d53Smrg    # Strip any option that makedepend may not understand.  Remove
54950806d53Smrg    # the object too, otherwise makedepend will parse it as a source file.
550a73423d7Smrg    -arch)
551a73423d7Smrg      eat=yes ;;
55250806d53Smrg    -*|$object)
55350806d53Smrg      ;;
55450806d53Smrg    *)
55550806d53Smrg      set fnord "$@" "$arg"; shift ;;
55650806d53Smrg    esac
55750806d53Smrg  done
558a73423d7Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
55950806d53Smrg  touch "$tmpdepfile"
56050806d53Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
56150806d53Smrg  rm -f "$depfile"
562a73423d7Smrg  # makedepend may prepend the VPATH from the source file name to the object.
563a73423d7Smrg  # No need to regex-escape $object, excess matching of '.' is harmless.
564a73423d7Smrg  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
56550806d53Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
56650806d53Smrg' | \
56750806d53Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
56850806d53Smrg## correctly.  Breaking it into two sed invocations is a workaround.
56950806d53Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
57050806d53Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
57150806d53Smrg  ;;
57250806d53Smrg
57350806d53Smrgcpp)
57450806d53Smrg  # Important note: in order to support this mode, a compiler *must*
57550806d53Smrg  # always write the preprocessed file to stdout.
57650806d53Smrg  "$@" || exit $?
57750806d53Smrg
57850806d53Smrg  # Remove the call to Libtool.
57950806d53Smrg  if test "$libtool" = yes; then
580a73423d7Smrg    while test "X$1" != 'X--mode=compile'; do
58150806d53Smrg      shift
58250806d53Smrg    done
58350806d53Smrg    shift
58450806d53Smrg  fi
58550806d53Smrg
58650806d53Smrg  # Remove `-o $object'.
58750806d53Smrg  IFS=" "
58850806d53Smrg  for arg
58950806d53Smrg  do
59050806d53Smrg    case $arg in
59150806d53Smrg    -o)
59250806d53Smrg      shift
59350806d53Smrg      ;;
59450806d53Smrg    $object)
59550806d53Smrg      shift
59650806d53Smrg      ;;
59750806d53Smrg    *)
59850806d53Smrg      set fnord "$@" "$arg"
59950806d53Smrg      shift # fnord
60050806d53Smrg      shift # $arg
60150806d53Smrg      ;;
60250806d53Smrg    esac
60350806d53Smrg  done
60450806d53Smrg
60550806d53Smrg  "$@" -E |
60650806d53Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
60750806d53Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
60850806d53Smrg    sed '$ s: \\$::' > "$tmpdepfile"
60950806d53Smrg  rm -f "$depfile"
61050806d53Smrg  echo "$object : \\" > "$depfile"
61150806d53Smrg  cat < "$tmpdepfile" >> "$depfile"
61250806d53Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
61350806d53Smrg  rm -f "$tmpdepfile"
61450806d53Smrg  ;;
61550806d53Smrg
61650806d53Smrgmsvisualcpp)
61750806d53Smrg  # Important note: in order to support this mode, a compiler *must*
618a73423d7Smrg  # always write the preprocessed file to stdout.
61950806d53Smrg  "$@" || exit $?
620a73423d7Smrg
621a73423d7Smrg  # Remove the call to Libtool.
622a73423d7Smrg  if test "$libtool" = yes; then
623a73423d7Smrg    while test "X$1" != 'X--mode=compile'; do
624a73423d7Smrg      shift
625a73423d7Smrg    done
626a73423d7Smrg    shift
627a73423d7Smrg  fi
628a73423d7Smrg
62950806d53Smrg  IFS=" "
63050806d53Smrg  for arg
63150806d53Smrg  do
63250806d53Smrg    case "$arg" in
633a73423d7Smrg    -o)
634a73423d7Smrg      shift
635a73423d7Smrg      ;;
636a73423d7Smrg    $object)
637a73423d7Smrg      shift
638a73423d7Smrg      ;;
63950806d53Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
64050806d53Smrg	set fnord "$@"
64150806d53Smrg	shift
64250806d53Smrg	shift
64350806d53Smrg	;;
64450806d53Smrg    *)
64550806d53Smrg	set fnord "$@" "$arg"
64650806d53Smrg	shift
64750806d53Smrg	shift
64850806d53Smrg	;;
64950806d53Smrg    esac
65050806d53Smrg  done
651a73423d7Smrg  "$@" -E 2>/dev/null |
652a73423d7Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
65350806d53Smrg  rm -f "$depfile"
65450806d53Smrg  echo "$object : \\" > "$depfile"
655a73423d7Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
65650806d53Smrg  echo "	" >> "$depfile"
657a73423d7Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
65850806d53Smrg  rm -f "$tmpdepfile"
65950806d53Smrg  ;;
66050806d53Smrg
661a73423d7Smrgmsvcmsys)
662a73423d7Smrg  # This case exists only to let depend.m4 do its work.  It works by
663a73423d7Smrg  # looking at the text of this script.  This case will never be run,
664a73423d7Smrg  # since it is checked for above.
665a73423d7Smrg  exit 1
666a73423d7Smrg  ;;
667a73423d7Smrg
66850806d53Smrgnone)
66950806d53Smrg  exec "$@"
67050806d53Smrg  ;;
67150806d53Smrg
67250806d53Smrg*)
67350806d53Smrg  echo "Unknown depmode $depmode" 1>&2
67450806d53Smrg  exit 1
67550806d53Smrg  ;;
67650806d53Smrgesac
67750806d53Smrg
67850806d53Smrgexit 0
67950806d53Smrg
68050806d53Smrg# Local Variables:
68150806d53Smrg# mode: shell-script
68250806d53Smrg# sh-indentation: 2
68350806d53Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
68450806d53Smrg# time-stamp-start: "scriptversion="
68550806d53Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
686a73423d7Smrg# time-stamp-time-zone: "UTC"
687a73423d7Smrg# time-stamp-end: "; # UTC"
68850806d53Smrg# End:
689