depcomp revision a9274bcd
166fe65f6Smrg#! /bin/sh
266fe65f6Smrg# depcomp - compile a program generating dependencies as side-effects
366fe65f6Smrg
4a9274bcdSmrgscriptversion=2009-04-28.21; # UTC
566fe65f6Smrg
6a9274bcdSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
7a9274bcdSmrg# Software Foundation, Inc.
866fe65f6Smrg
966fe65f6Smrg# This program is free software; you can redistribute it and/or modify
1066fe65f6Smrg# it under the terms of the GNU General Public License as published by
1166fe65f6Smrg# the Free Software Foundation; either version 2, or (at your option)
1266fe65f6Smrg# any later version.
1366fe65f6Smrg
1466fe65f6Smrg# This program is distributed in the hope that it will be useful,
1566fe65f6Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
1666fe65f6Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1766fe65f6Smrg# GNU General Public License for more details.
1866fe65f6Smrg
1966fe65f6Smrg# You should have received a copy of the GNU General Public License
20a9274bcdSmrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
2166fe65f6Smrg
2266fe65f6Smrg# As a special exception to the GNU General Public License, if you
2366fe65f6Smrg# distribute this file as part of a program that contains a
2466fe65f6Smrg# configuration script generated by Autoconf, you may include it under
2566fe65f6Smrg# the same distribution terms that you use for the rest of that program.
2666fe65f6Smrg
2766fe65f6Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
2866fe65f6Smrg
2966fe65f6Smrgcase $1 in
3066fe65f6Smrg  '')
3166fe65f6Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
3266fe65f6Smrg     exit 1;
3366fe65f6Smrg     ;;
3466fe65f6Smrg  -h | --h*)
3566fe65f6Smrg    cat <<\EOF
3666fe65f6SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
3766fe65f6Smrg
3866fe65f6SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
3966fe65f6Smrgas side-effects.
4066fe65f6Smrg
4166fe65f6SmrgEnvironment variables:
4266fe65f6Smrg  depmode     Dependency tracking mode.
4366fe65f6Smrg  source      Source file read by `PROGRAMS ARGS'.
4466fe65f6Smrg  object      Object file output by `PROGRAMS ARGS'.
4566fe65f6Smrg  DEPDIR      directory where to store dependencies.
4666fe65f6Smrg  depfile     Dependency file to output.
4766fe65f6Smrg  tmpdepfile  Temporary file to use when outputing dependencies.
4866fe65f6Smrg  libtool     Whether libtool is used (yes/no).
4966fe65f6Smrg
5066fe65f6SmrgReport bugs to <bug-automake@gnu.org>.
5166fe65f6SmrgEOF
5266fe65f6Smrg    exit $?
5366fe65f6Smrg    ;;
5466fe65f6Smrg  -v | --v*)
5566fe65f6Smrg    echo "depcomp $scriptversion"
5666fe65f6Smrg    exit $?
5766fe65f6Smrg    ;;
5866fe65f6Smrgesac
5966fe65f6Smrg
6066fe65f6Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
6166fe65f6Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
6266fe65f6Smrg  exit 1
6366fe65f6Smrgfi
6466fe65f6Smrg
6566fe65f6Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
6666fe65f6Smrgdepfile=${depfile-`echo "$object" |
6766fe65f6Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
6866fe65f6Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
6966fe65f6Smrg
7066fe65f6Smrgrm -f "$tmpdepfile"
7166fe65f6Smrg
7266fe65f6Smrg# Some modes work just like other modes, but use different flags.  We
7366fe65f6Smrg# parameterize here, but still list the modes in the big case below,
7466fe65f6Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
7566fe65f6Smrg# here, because this file can only contain one case statement.
7666fe65f6Smrgif test "$depmode" = hp; then
7766fe65f6Smrg  # HP compiler uses -M and no extra arg.
7866fe65f6Smrg  gccflag=-M
7966fe65f6Smrg  depmode=gcc
8066fe65f6Smrgfi
8166fe65f6Smrg
8266fe65f6Smrgif test "$depmode" = dashXmstdout; then
8366fe65f6Smrg   # This is just like dashmstdout with a different argument.
8466fe65f6Smrg   dashmflag=-xM
8566fe65f6Smrg   depmode=dashmstdout
8666fe65f6Smrgfi
8766fe65f6Smrg
88a9274bcdSmrgcygpath_u="cygpath -u -f -"
89a9274bcdSmrgif test "$depmode" = msvcmsys; then
90a9274bcdSmrg   # This is just like msvisualcpp but w/o cygpath translation.
91a9274bcdSmrg   # Just convert the backslash-escaped backslashes to single forward
92a9274bcdSmrg   # slashes to satisfy depend.m4
93a9274bcdSmrg   cygpath_u="sed s,\\\\\\\\,/,g"
94a9274bcdSmrg   depmode=msvisualcpp
95a9274bcdSmrgfi
96a9274bcdSmrg
9766fe65f6Smrgcase "$depmode" in
9866fe65f6Smrggcc3)
9966fe65f6Smrg## gcc 3 implements dependency tracking that does exactly what
10066fe65f6Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
10166fe65f6Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
10289d09728Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
10389d09728Smrg## the command line argument order; so add the flags where they
10489d09728Smrg## appear in depend2.am.  Note that the slowdown incurred here
10589d09728Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
10689d09728Smrg  for arg
10789d09728Smrg  do
10889d09728Smrg    case $arg in
10989d09728Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
11089d09728Smrg    *)  set fnord "$@" "$arg" ;;
11189d09728Smrg    esac
11289d09728Smrg    shift # fnord
11389d09728Smrg    shift # $arg
11489d09728Smrg  done
11589d09728Smrg  "$@"
11666fe65f6Smrg  stat=$?
11766fe65f6Smrg  if test $stat -eq 0; then :
11866fe65f6Smrg  else
11966fe65f6Smrg    rm -f "$tmpdepfile"
12066fe65f6Smrg    exit $stat
12166fe65f6Smrg  fi
12266fe65f6Smrg  mv "$tmpdepfile" "$depfile"
12366fe65f6Smrg  ;;
12466fe65f6Smrg
12566fe65f6Smrggcc)
12666fe65f6Smrg## There are various ways to get dependency output from gcc.  Here's
12766fe65f6Smrg## why we pick this rather obscure method:
12866fe65f6Smrg## - Don't want to use -MD because we'd like the dependencies to end
12966fe65f6Smrg##   up in a subdir.  Having to rename by hand is ugly.
13066fe65f6Smrg##   (We might end up doing this anyway to support other compilers.)
13166fe65f6Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
13266fe65f6Smrg##   -MM, not -M (despite what the docs say).
13366fe65f6Smrg## - Using -M directly means running the compiler twice (even worse
13466fe65f6Smrg##   than renaming).
13566fe65f6Smrg  if test -z "$gccflag"; then
13666fe65f6Smrg    gccflag=-MD,
13766fe65f6Smrg  fi
13866fe65f6Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
13966fe65f6Smrg  stat=$?
14066fe65f6Smrg  if test $stat -eq 0; then :
14166fe65f6Smrg  else
14266fe65f6Smrg    rm -f "$tmpdepfile"
14366fe65f6Smrg    exit $stat
14466fe65f6Smrg  fi
14566fe65f6Smrg  rm -f "$depfile"
14666fe65f6Smrg  echo "$object : \\" > "$depfile"
14766fe65f6Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
14866fe65f6Smrg## The second -e expression handles DOS-style file names with drive letters.
14966fe65f6Smrg  sed -e 's/^[^:]*: / /' \
15066fe65f6Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
15166fe65f6Smrg## This next piece of magic avoids the `deleted header file' problem.
15266fe65f6Smrg## The problem is that when a header file which appears in a .P file
15366fe65f6Smrg## is deleted, the dependency causes make to die (because there is
15466fe65f6Smrg## typically no way to rebuild the header).  We avoid this by adding
15566fe65f6Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
15666fe65f6Smrg## this for us directly.
15766fe65f6Smrg  tr ' ' '
15866fe65f6Smrg' < "$tmpdepfile" |
15966fe65f6Smrg## Some versions of gcc put a space before the `:'.  On the theory
16066fe65f6Smrg## that the space means something, we add a space to the output as
16166fe65f6Smrg## well.
16266fe65f6Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
16366fe65f6Smrg## correctly.  Breaking it into two sed invocations is a workaround.
16466fe65f6Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
16566fe65f6Smrg  rm -f "$tmpdepfile"
16666fe65f6Smrg  ;;
16766fe65f6Smrg
16866fe65f6Smrghp)
16966fe65f6Smrg  # This case exists only to let depend.m4 do its work.  It works by
17066fe65f6Smrg  # looking at the text of this script.  This case will never be run,
17166fe65f6Smrg  # since it is checked for above.
17266fe65f6Smrg  exit 1
17366fe65f6Smrg  ;;
17466fe65f6Smrg
17566fe65f6Smrgsgi)
17666fe65f6Smrg  if test "$libtool" = yes; then
17766fe65f6Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
17866fe65f6Smrg  else
17966fe65f6Smrg    "$@" -MDupdate "$tmpdepfile"
18066fe65f6Smrg  fi
18166fe65f6Smrg  stat=$?
18266fe65f6Smrg  if test $stat -eq 0; then :
18366fe65f6Smrg  else
18466fe65f6Smrg    rm -f "$tmpdepfile"
18566fe65f6Smrg    exit $stat
18666fe65f6Smrg  fi
18766fe65f6Smrg  rm -f "$depfile"
18866fe65f6Smrg
18966fe65f6Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
19066fe65f6Smrg    echo "$object : \\" > "$depfile"
19166fe65f6Smrg
19266fe65f6Smrg    # Clip off the initial element (the dependent).  Don't try to be
19366fe65f6Smrg    # clever and replace this with sed code, as IRIX sed won't handle
19466fe65f6Smrg    # lines with more than a fixed number of characters (4096 in
19566fe65f6Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
19666fe65f6Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
19766fe65f6Smrg    # dependency line.
19866fe65f6Smrg    tr ' ' '
19966fe65f6Smrg' < "$tmpdepfile" \
20066fe65f6Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
20166fe65f6Smrg    tr '
202a9274bcdSmrg' ' ' >> "$depfile"
203a9274bcdSmrg    echo >> "$depfile"
20466fe65f6Smrg
20566fe65f6Smrg    # The second pass generates a dummy entry for each header file.
20666fe65f6Smrg    tr ' ' '
20766fe65f6Smrg' < "$tmpdepfile" \
20866fe65f6Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
209a9274bcdSmrg   >> "$depfile"
21066fe65f6Smrg  else
21166fe65f6Smrg    # The sourcefile does not contain any dependencies, so just
21266fe65f6Smrg    # store a dummy comment line, to avoid errors with the Makefile
21366fe65f6Smrg    # "include basename.Plo" scheme.
21466fe65f6Smrg    echo "#dummy" > "$depfile"
21566fe65f6Smrg  fi
21666fe65f6Smrg  rm -f "$tmpdepfile"
21766fe65f6Smrg  ;;
21866fe65f6Smrg
21966fe65f6Smrgaix)
22066fe65f6Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
22166fe65f6Smrg  # in a .u file.  In older versions, this file always lives in the
22266fe65f6Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
22366fe65f6Smrg  # start of each line; $object doesn't have directory information.
22466fe65f6Smrg  # Version 6 uses the directory in both cases.
22589d09728Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
22689d09728Smrg  test "x$dir" = "x$object" && dir=
22789d09728Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
22866fe65f6Smrg  if test "$libtool" = yes; then
22989d09728Smrg    tmpdepfile1=$dir$base.u
23089d09728Smrg    tmpdepfile2=$base.u
23189d09728Smrg    tmpdepfile3=$dir.libs/$base.u
23266fe65f6Smrg    "$@" -Wc,-M
23366fe65f6Smrg  else
23489d09728Smrg    tmpdepfile1=$dir$base.u
23589d09728Smrg    tmpdepfile2=$dir$base.u
23689d09728Smrg    tmpdepfile3=$dir$base.u
23766fe65f6Smrg    "$@" -M
23866fe65f6Smrg  fi
23966fe65f6Smrg  stat=$?
24066fe65f6Smrg
24166fe65f6Smrg  if test $stat -eq 0; then :
24266fe65f6Smrg  else
24389d09728Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
24466fe65f6Smrg    exit $stat
24566fe65f6Smrg  fi
24666fe65f6Smrg
24789d09728Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
24889d09728Smrg  do
24989d09728Smrg    test -f "$tmpdepfile" && break
25089d09728Smrg  done
25166fe65f6Smrg  if test -f "$tmpdepfile"; then
25266fe65f6Smrg    # Each line is of the form `foo.o: dependent.h'.
25366fe65f6Smrg    # Do two passes, one to just change these to
25466fe65f6Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
25589d09728Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
25689d09728Smrg    # That's a tab and a space in the [].
25789d09728Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
25866fe65f6Smrg  else
25966fe65f6Smrg    # The sourcefile does not contain any dependencies, so just
26066fe65f6Smrg    # store a dummy comment line, to avoid errors with the Makefile
26166fe65f6Smrg    # "include basename.Plo" scheme.
26266fe65f6Smrg    echo "#dummy" > "$depfile"
26366fe65f6Smrg  fi
26466fe65f6Smrg  rm -f "$tmpdepfile"
26566fe65f6Smrg  ;;
26666fe65f6Smrg
26766fe65f6Smrgicc)
26866fe65f6Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
26966fe65f6Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
27066fe65f6Smrg  # ICC 7.0 will fill foo.d with something like
27166fe65f6Smrg  #    foo.o: sub/foo.c
27266fe65f6Smrg  #    foo.o: sub/foo.h
27366fe65f6Smrg  # which is wrong.  We want:
27466fe65f6Smrg  #    sub/foo.o: sub/foo.c
27566fe65f6Smrg  #    sub/foo.o: sub/foo.h
27666fe65f6Smrg  #    sub/foo.c:
27766fe65f6Smrg  #    sub/foo.h:
27866fe65f6Smrg  # ICC 7.1 will output
27966fe65f6Smrg  #    foo.o: sub/foo.c sub/foo.h
28066fe65f6Smrg  # and will wrap long lines using \ :
28166fe65f6Smrg  #    foo.o: sub/foo.c ... \
28266fe65f6Smrg  #     sub/foo.h ... \
28366fe65f6Smrg  #     ...
28466fe65f6Smrg
28566fe65f6Smrg  "$@" -MD -MF "$tmpdepfile"
28666fe65f6Smrg  stat=$?
28766fe65f6Smrg  if test $stat -eq 0; then :
28866fe65f6Smrg  else
28966fe65f6Smrg    rm -f "$tmpdepfile"
29066fe65f6Smrg    exit $stat
29166fe65f6Smrg  fi
29266fe65f6Smrg  rm -f "$depfile"
29366fe65f6Smrg  # Each line is of the form `foo.o: dependent.h',
29466fe65f6Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
29566fe65f6Smrg  # Do two passes, one to just change these to
29666fe65f6Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
29766fe65f6Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
29866fe65f6Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
29966fe65f6Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
30066fe65f6Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
30166fe65f6Smrg    sed -e 's/$/ :/' >> "$depfile"
30266fe65f6Smrg  rm -f "$tmpdepfile"
30366fe65f6Smrg  ;;
30466fe65f6Smrg
30589d09728Smrghp2)
30689d09728Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
30789d09728Smrg  # compilers, which have integrated preprocessors.  The correct option
30889d09728Smrg  # to use with these is +Maked; it writes dependencies to a file named
30989d09728Smrg  # 'foo.d', which lands next to the object file, wherever that
31089d09728Smrg  # happens to be.
31189d09728Smrg  # Much of this is similar to the tru64 case; see comments there.
31289d09728Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
31389d09728Smrg  test "x$dir" = "x$object" && dir=
31489d09728Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
31589d09728Smrg  if test "$libtool" = yes; then
31689d09728Smrg    tmpdepfile1=$dir$base.d
31789d09728Smrg    tmpdepfile2=$dir.libs/$base.d
31889d09728Smrg    "$@" -Wc,+Maked
31989d09728Smrg  else
32089d09728Smrg    tmpdepfile1=$dir$base.d
32189d09728Smrg    tmpdepfile2=$dir$base.d
32289d09728Smrg    "$@" +Maked
32389d09728Smrg  fi
32489d09728Smrg  stat=$?
32589d09728Smrg  if test $stat -eq 0; then :
32689d09728Smrg  else
32789d09728Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
32889d09728Smrg     exit $stat
32989d09728Smrg  fi
33089d09728Smrg
33189d09728Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
33289d09728Smrg  do
33389d09728Smrg    test -f "$tmpdepfile" && break
33489d09728Smrg  done
33589d09728Smrg  if test -f "$tmpdepfile"; then
33689d09728Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
33789d09728Smrg    # Add `dependent.h:' lines.
338a9274bcdSmrg    sed -ne '2,${
339a9274bcdSmrg	       s/^ *//
340a9274bcdSmrg	       s/ \\*$//
341a9274bcdSmrg	       s/$/:/
342a9274bcdSmrg	       p
343a9274bcdSmrg	     }' "$tmpdepfile" >> "$depfile"
34489d09728Smrg  else
34589d09728Smrg    echo "#dummy" > "$depfile"
34689d09728Smrg  fi
34789d09728Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
34889d09728Smrg  ;;
34989d09728Smrg
35066fe65f6Smrgtru64)
35166fe65f6Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
35266fe65f6Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
35366fe65f6Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
35466fe65f6Smrg   # dependencies in `foo.d' instead, so we check for that too.
35566fe65f6Smrg   # Subdirectories are respected.
35666fe65f6Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
35766fe65f6Smrg   test "x$dir" = "x$object" && dir=
35866fe65f6Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
35966fe65f6Smrg
36066fe65f6Smrg   if test "$libtool" = yes; then
36166fe65f6Smrg      # With Tru64 cc, shared objects can also be used to make a
36289d09728Smrg      # static library.  This mechanism is used in libtool 1.4 series to
36366fe65f6Smrg      # handle both shared and static libraries in a single compilation.
36466fe65f6Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
36566fe65f6Smrg      #
36666fe65f6Smrg      # With libtool 1.5 this exception was removed, and libtool now
36766fe65f6Smrg      # generates 2 separate objects for the 2 libraries.  These two
36889d09728Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
36966fe65f6Smrg      # in $dir$base.o.d.  We have to check for both files, because
37066fe65f6Smrg      # one of the two compilations can be disabled.  We should prefer
37166fe65f6Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
37266fe65f6Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
37366fe65f6Smrg      # the former would cause a distcleancheck panic.
37466fe65f6Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
37566fe65f6Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
37666fe65f6Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
37766fe65f6Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
37866fe65f6Smrg      "$@" -Wc,-MD
37966fe65f6Smrg   else
38066fe65f6Smrg      tmpdepfile1=$dir$base.o.d
38166fe65f6Smrg      tmpdepfile2=$dir$base.d
38266fe65f6Smrg      tmpdepfile3=$dir$base.d
38366fe65f6Smrg      tmpdepfile4=$dir$base.d
38466fe65f6Smrg      "$@" -MD
38566fe65f6Smrg   fi
38666fe65f6Smrg
38766fe65f6Smrg   stat=$?
38866fe65f6Smrg   if test $stat -eq 0; then :
38966fe65f6Smrg   else
39066fe65f6Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
39166fe65f6Smrg      exit $stat
39266fe65f6Smrg   fi
39366fe65f6Smrg
39466fe65f6Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
39566fe65f6Smrg   do
39666fe65f6Smrg     test -f "$tmpdepfile" && break
39766fe65f6Smrg   done
39866fe65f6Smrg   if test -f "$tmpdepfile"; then
39966fe65f6Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
40066fe65f6Smrg      # That's a tab and a space in the [].
40166fe65f6Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
40266fe65f6Smrg   else
40366fe65f6Smrg      echo "#dummy" > "$depfile"
40466fe65f6Smrg   fi
40566fe65f6Smrg   rm -f "$tmpdepfile"
40666fe65f6Smrg   ;;
40766fe65f6Smrg
40866fe65f6Smrg#nosideeffect)
40966fe65f6Smrg  # This comment above is used by automake to tell side-effect
41066fe65f6Smrg  # dependency tracking mechanisms from slower ones.
41166fe65f6Smrg
41266fe65f6Smrgdashmstdout)
41366fe65f6Smrg  # Important note: in order to support this mode, a compiler *must*
41466fe65f6Smrg  # always write the preprocessed file to stdout, regardless of -o.
41566fe65f6Smrg  "$@" || exit $?
41666fe65f6Smrg
41766fe65f6Smrg  # Remove the call to Libtool.
41866fe65f6Smrg  if test "$libtool" = yes; then
419a9274bcdSmrg    while test "X$1" != 'X--mode=compile'; do
42066fe65f6Smrg      shift
42166fe65f6Smrg    done
42266fe65f6Smrg    shift
42366fe65f6Smrg  fi
42466fe65f6Smrg
42566fe65f6Smrg  # Remove `-o $object'.
42666fe65f6Smrg  IFS=" "
42766fe65f6Smrg  for arg
42866fe65f6Smrg  do
42966fe65f6Smrg    case $arg in
43066fe65f6Smrg    -o)
43166fe65f6Smrg      shift
43266fe65f6Smrg      ;;
43366fe65f6Smrg    $object)
43466fe65f6Smrg      shift
43566fe65f6Smrg      ;;
43666fe65f6Smrg    *)
43766fe65f6Smrg      set fnord "$@" "$arg"
43866fe65f6Smrg      shift # fnord
43966fe65f6Smrg      shift # $arg
44066fe65f6Smrg      ;;
44166fe65f6Smrg    esac
44266fe65f6Smrg  done
44366fe65f6Smrg
44466fe65f6Smrg  test -z "$dashmflag" && dashmflag=-M
44566fe65f6Smrg  # Require at least two characters before searching for `:'
44666fe65f6Smrg  # in the target name.  This is to cope with DOS-style filenames:
44766fe65f6Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
44866fe65f6Smrg  "$@" $dashmflag |
44966fe65f6Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
45066fe65f6Smrg  rm -f "$depfile"
45166fe65f6Smrg  cat < "$tmpdepfile" > "$depfile"
45266fe65f6Smrg  tr ' ' '
45366fe65f6Smrg' < "$tmpdepfile" | \
45466fe65f6Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
45566fe65f6Smrg## correctly.  Breaking it into two sed invocations is a workaround.
45666fe65f6Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
45766fe65f6Smrg  rm -f "$tmpdepfile"
45866fe65f6Smrg  ;;
45966fe65f6Smrg
46066fe65f6SmrgdashXmstdout)
46166fe65f6Smrg  # This case only exists to satisfy depend.m4.  It is never actually
46266fe65f6Smrg  # run, as this mode is specially recognized in the preamble.
46366fe65f6Smrg  exit 1
46466fe65f6Smrg  ;;
46566fe65f6Smrg
46666fe65f6Smrgmakedepend)
46766fe65f6Smrg  "$@" || exit $?
46866fe65f6Smrg  # Remove any Libtool call
46966fe65f6Smrg  if test "$libtool" = yes; then
470a9274bcdSmrg    while test "X$1" != 'X--mode=compile'; do
47166fe65f6Smrg      shift
47266fe65f6Smrg    done
47366fe65f6Smrg    shift
47466fe65f6Smrg  fi
47566fe65f6Smrg  # X makedepend
47666fe65f6Smrg  shift
477a9274bcdSmrg  cleared=no eat=no
478a9274bcdSmrg  for arg
479a9274bcdSmrg  do
48066fe65f6Smrg    case $cleared in
48166fe65f6Smrg    no)
48266fe65f6Smrg      set ""; shift
48366fe65f6Smrg      cleared=yes ;;
48466fe65f6Smrg    esac
485a9274bcdSmrg    if test $eat = yes; then
486a9274bcdSmrg      eat=no
487a9274bcdSmrg      continue
488a9274bcdSmrg    fi
48966fe65f6Smrg    case "$arg" in
49066fe65f6Smrg    -D*|-I*)
49166fe65f6Smrg      set fnord "$@" "$arg"; shift ;;
49266fe65f6Smrg    # Strip any option that makedepend may not understand.  Remove
49366fe65f6Smrg    # the object too, otherwise makedepend will parse it as a source file.
494a9274bcdSmrg    -arch)
495a9274bcdSmrg      eat=yes ;;
49666fe65f6Smrg    -*|$object)
49766fe65f6Smrg      ;;
49866fe65f6Smrg    *)
49966fe65f6Smrg      set fnord "$@" "$arg"; shift ;;
50066fe65f6Smrg    esac
50166fe65f6Smrg  done
502a9274bcdSmrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
50366fe65f6Smrg  touch "$tmpdepfile"
50466fe65f6Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
50566fe65f6Smrg  rm -f "$depfile"
50666fe65f6Smrg  cat < "$tmpdepfile" > "$depfile"
50766fe65f6Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
50866fe65f6Smrg' | \
50966fe65f6Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
51066fe65f6Smrg## correctly.  Breaking it into two sed invocations is a workaround.
51166fe65f6Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
51266fe65f6Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
51366fe65f6Smrg  ;;
51466fe65f6Smrg
51566fe65f6Smrgcpp)
51666fe65f6Smrg  # Important note: in order to support this mode, a compiler *must*
51766fe65f6Smrg  # always write the preprocessed file to stdout.
51866fe65f6Smrg  "$@" || exit $?
51966fe65f6Smrg
52066fe65f6Smrg  # Remove the call to Libtool.
52166fe65f6Smrg  if test "$libtool" = yes; then
522a9274bcdSmrg    while test "X$1" != 'X--mode=compile'; do
52366fe65f6Smrg      shift
52466fe65f6Smrg    done
52566fe65f6Smrg    shift
52666fe65f6Smrg  fi
52766fe65f6Smrg
52866fe65f6Smrg  # Remove `-o $object'.
52966fe65f6Smrg  IFS=" "
53066fe65f6Smrg  for arg
53166fe65f6Smrg  do
53266fe65f6Smrg    case $arg in
53366fe65f6Smrg    -o)
53466fe65f6Smrg      shift
53566fe65f6Smrg      ;;
53666fe65f6Smrg    $object)
53766fe65f6Smrg      shift
53866fe65f6Smrg      ;;
53966fe65f6Smrg    *)
54066fe65f6Smrg      set fnord "$@" "$arg"
54166fe65f6Smrg      shift # fnord
54266fe65f6Smrg      shift # $arg
54366fe65f6Smrg      ;;
54466fe65f6Smrg    esac
54566fe65f6Smrg  done
54666fe65f6Smrg
54766fe65f6Smrg  "$@" -E |
54866fe65f6Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
54966fe65f6Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
55066fe65f6Smrg    sed '$ s: \\$::' > "$tmpdepfile"
55166fe65f6Smrg  rm -f "$depfile"
55266fe65f6Smrg  echo "$object : \\" > "$depfile"
55366fe65f6Smrg  cat < "$tmpdepfile" >> "$depfile"
55466fe65f6Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
55566fe65f6Smrg  rm -f "$tmpdepfile"
55666fe65f6Smrg  ;;
55766fe65f6Smrg
55866fe65f6Smrgmsvisualcpp)
55966fe65f6Smrg  # Important note: in order to support this mode, a compiler *must*
560a9274bcdSmrg  # always write the preprocessed file to stdout.
56166fe65f6Smrg  "$@" || exit $?
562a9274bcdSmrg
563a9274bcdSmrg  # Remove the call to Libtool.
564a9274bcdSmrg  if test "$libtool" = yes; then
565a9274bcdSmrg    while test "X$1" != 'X--mode=compile'; do
566a9274bcdSmrg      shift
567a9274bcdSmrg    done
568a9274bcdSmrg    shift
569a9274bcdSmrg  fi
570a9274bcdSmrg
57166fe65f6Smrg  IFS=" "
57266fe65f6Smrg  for arg
57366fe65f6Smrg  do
57466fe65f6Smrg    case "$arg" in
575a9274bcdSmrg    -o)
576a9274bcdSmrg      shift
577a9274bcdSmrg      ;;
578a9274bcdSmrg    $object)
579a9274bcdSmrg      shift
580a9274bcdSmrg      ;;
58166fe65f6Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
58266fe65f6Smrg	set fnord "$@"
58366fe65f6Smrg	shift
58466fe65f6Smrg	shift
58566fe65f6Smrg	;;
58666fe65f6Smrg    *)
58766fe65f6Smrg	set fnord "$@" "$arg"
58866fe65f6Smrg	shift
58966fe65f6Smrg	shift
59066fe65f6Smrg	;;
59166fe65f6Smrg    esac
59266fe65f6Smrg  done
593a9274bcdSmrg  "$@" -E 2>/dev/null |
594a9274bcdSmrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
59566fe65f6Smrg  rm -f "$depfile"
59666fe65f6Smrg  echo "$object : \\" > "$depfile"
597a9274bcdSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
59866fe65f6Smrg  echo "	" >> "$depfile"
599a9274bcdSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
60066fe65f6Smrg  rm -f "$tmpdepfile"
60166fe65f6Smrg  ;;
60266fe65f6Smrg
603a9274bcdSmrgmsvcmsys)
604a9274bcdSmrg  # This case exists only to let depend.m4 do its work.  It works by
605a9274bcdSmrg  # looking at the text of this script.  This case will never be run,
606a9274bcdSmrg  # since it is checked for above.
607a9274bcdSmrg  exit 1
608a9274bcdSmrg  ;;
609a9274bcdSmrg
61066fe65f6Smrgnone)
61166fe65f6Smrg  exec "$@"
61266fe65f6Smrg  ;;
61366fe65f6Smrg
61466fe65f6Smrg*)
61566fe65f6Smrg  echo "Unknown depmode $depmode" 1>&2
61666fe65f6Smrg  exit 1
61766fe65f6Smrg  ;;
61866fe65f6Smrgesac
61966fe65f6Smrg
62066fe65f6Smrgexit 0
62166fe65f6Smrg
62266fe65f6Smrg# Local Variables:
62366fe65f6Smrg# mode: shell-script
62466fe65f6Smrg# sh-indentation: 2
62566fe65f6Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
62666fe65f6Smrg# time-stamp-start: "scriptversion="
62766fe65f6Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
628a9274bcdSmrg# time-stamp-time-zone: "UTC"
629a9274bcdSmrg# time-stamp-end: "; # UTC"
63066fe65f6Smrg# End:
631