depcomp revision b40a6198
145bc899bSmrg#! /bin/sh
245bc899bSmrg# depcomp - compile a program generating dependencies as side-effects
345bc899bSmrg
4b40a6198Smrgscriptversion=2011-12-04.11; # UTC
545bc899bSmrg
6b40a6198Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
7b40a6198Smrg# 2011 Free Software Foundation, Inc.
845bc899bSmrg
945bc899bSmrg# This program is free software; you can redistribute it and/or modify
1045bc899bSmrg# it under the terms of the GNU General Public License as published by
1145bc899bSmrg# the Free Software Foundation; either version 2, or (at your option)
1245bc899bSmrg# any later version.
1345bc899bSmrg
1445bc899bSmrg# This program is distributed in the hope that it will be useful,
1545bc899bSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
1645bc899bSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1745bc899bSmrg# GNU General Public License for more details.
1845bc899bSmrg
1945bc899bSmrg# You should have received a copy of the GNU General Public License
20b40a6198Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
2145bc899bSmrg
2245bc899bSmrg# As a special exception to the GNU General Public License, if you
2345bc899bSmrg# distribute this file as part of a program that contains a
2445bc899bSmrg# configuration script generated by Autoconf, you may include it under
2545bc899bSmrg# the same distribution terms that you use for the rest of that program.
2645bc899bSmrg
2745bc899bSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
2845bc899bSmrg
2945bc899bSmrgcase $1 in
3045bc899bSmrg  '')
3145bc899bSmrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
3245bc899bSmrg     exit 1;
3345bc899bSmrg     ;;
3445bc899bSmrg  -h | --h*)
3545bc899bSmrg    cat <<\EOF
3645bc899bSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
3745bc899bSmrg
3845bc899bSmrgRun PROGRAMS ARGS to compile a file, generating dependencies
3945bc899bSmrgas side-effects.
4045bc899bSmrg
4145bc899bSmrgEnvironment variables:
4245bc899bSmrg  depmode     Dependency tracking mode.
4345bc899bSmrg  source      Source file read by `PROGRAMS ARGS'.
4445bc899bSmrg  object      Object file output by `PROGRAMS ARGS'.
4545bc899bSmrg  DEPDIR      directory where to store dependencies.
4645bc899bSmrg  depfile     Dependency file to output.
47b40a6198Smrg  tmpdepfile  Temporary file to use when outputting dependencies.
4845bc899bSmrg  libtool     Whether libtool is used (yes/no).
4945bc899bSmrg
5045bc899bSmrgReport bugs to <bug-automake@gnu.org>.
5145bc899bSmrgEOF
5245bc899bSmrg    exit $?
5345bc899bSmrg    ;;
5445bc899bSmrg  -v | --v*)
5545bc899bSmrg    echo "depcomp $scriptversion"
5645bc899bSmrg    exit $?
5745bc899bSmrg    ;;
5845bc899bSmrgesac
5945bc899bSmrg
6045bc899bSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
6145bc899bSmrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
6245bc899bSmrg  exit 1
6345bc899bSmrgfi
6445bc899bSmrg
6545bc899bSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
6645bc899bSmrgdepfile=${depfile-`echo "$object" |
6745bc899bSmrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
6845bc899bSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
6945bc899bSmrg
7045bc899bSmrgrm -f "$tmpdepfile"
7145bc899bSmrg
7245bc899bSmrg# Some modes work just like other modes, but use different flags.  We
7345bc899bSmrg# parameterize here, but still list the modes in the big case below,
7445bc899bSmrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
7545bc899bSmrg# here, because this file can only contain one case statement.
7645bc899bSmrgif test "$depmode" = hp; then
7745bc899bSmrg  # HP compiler uses -M and no extra arg.
7845bc899bSmrg  gccflag=-M
7945bc899bSmrg  depmode=gcc
8045bc899bSmrgfi
8145bc899bSmrg
8245bc899bSmrgif test "$depmode" = dashXmstdout; then
8345bc899bSmrg   # This is just like dashmstdout with a different argument.
8445bc899bSmrg   dashmflag=-xM
8545bc899bSmrg   depmode=dashmstdout
8645bc899bSmrgfi
8745bc899bSmrg
88b40a6198Smrgcygpath_u="cygpath -u -f -"
89b40a6198Smrgif test "$depmode" = msvcmsys; then
90b40a6198Smrg   # This is just like msvisualcpp but w/o cygpath translation.
91b40a6198Smrg   # Just convert the backslash-escaped backslashes to single forward
92b40a6198Smrg   # slashes to satisfy depend.m4
93b40a6198Smrg   cygpath_u='sed s,\\\\,/,g'
94b40a6198Smrg   depmode=msvisualcpp
95b40a6198Smrgfi
96b40a6198Smrg
97b40a6198Smrgif test "$depmode" = msvc7msys; then
98b40a6198Smrg   # This is just like msvc7 but w/o cygpath translation.
99b40a6198Smrg   # Just convert the backslash-escaped backslashes to single forward
100b40a6198Smrg   # slashes to satisfy depend.m4
101b40a6198Smrg   cygpath_u='sed s,\\\\,/,g'
102b40a6198Smrg   depmode=msvc7
103b40a6198Smrgfi
104b40a6198Smrg
10545bc899bSmrgcase "$depmode" in
10645bc899bSmrggcc3)
10745bc899bSmrg## gcc 3 implements dependency tracking that does exactly what
10845bc899bSmrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
10945bc899bSmrg## it if -MD -MP comes after the -MF stuff.  Hmm.
11050f2e948Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
11150f2e948Smrg## the command line argument order; so add the flags where they
11250f2e948Smrg## appear in depend2.am.  Note that the slowdown incurred here
11350f2e948Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
11450f2e948Smrg  for arg
11550f2e948Smrg  do
11650f2e948Smrg    case $arg in
11750f2e948Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
11850f2e948Smrg    *)  set fnord "$@" "$arg" ;;
11950f2e948Smrg    esac
12050f2e948Smrg    shift # fnord
12150f2e948Smrg    shift # $arg
12250f2e948Smrg  done
12350f2e948Smrg  "$@"
12445bc899bSmrg  stat=$?
12545bc899bSmrg  if test $stat -eq 0; then :
12645bc899bSmrg  else
12745bc899bSmrg    rm -f "$tmpdepfile"
12845bc899bSmrg    exit $stat
12945bc899bSmrg  fi
13045bc899bSmrg  mv "$tmpdepfile" "$depfile"
13145bc899bSmrg  ;;
13245bc899bSmrg
13345bc899bSmrggcc)
13445bc899bSmrg## There are various ways to get dependency output from gcc.  Here's
13545bc899bSmrg## why we pick this rather obscure method:
13645bc899bSmrg## - Don't want to use -MD because we'd like the dependencies to end
13745bc899bSmrg##   up in a subdir.  Having to rename by hand is ugly.
13845bc899bSmrg##   (We might end up doing this anyway to support other compilers.)
13945bc899bSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
14045bc899bSmrg##   -MM, not -M (despite what the docs say).
14145bc899bSmrg## - Using -M directly means running the compiler twice (even worse
14245bc899bSmrg##   than renaming).
14345bc899bSmrg  if test -z "$gccflag"; then
14445bc899bSmrg    gccflag=-MD,
14545bc899bSmrg  fi
14645bc899bSmrg  "$@" -Wp,"$gccflag$tmpdepfile"
14745bc899bSmrg  stat=$?
14845bc899bSmrg  if test $stat -eq 0; then :
14945bc899bSmrg  else
15045bc899bSmrg    rm -f "$tmpdepfile"
15145bc899bSmrg    exit $stat
15245bc899bSmrg  fi
15345bc899bSmrg  rm -f "$depfile"
15445bc899bSmrg  echo "$object : \\" > "$depfile"
15545bc899bSmrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
15645bc899bSmrg## The second -e expression handles DOS-style file names with drive letters.
15745bc899bSmrg  sed -e 's/^[^:]*: / /' \
15845bc899bSmrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
15945bc899bSmrg## This next piece of magic avoids the `deleted header file' problem.
16045bc899bSmrg## The problem is that when a header file which appears in a .P file
16145bc899bSmrg## is deleted, the dependency causes make to die (because there is
16245bc899bSmrg## typically no way to rebuild the header).  We avoid this by adding
16345bc899bSmrg## dummy dependencies for each header file.  Too bad gcc doesn't do
16445bc899bSmrg## this for us directly.
16545bc899bSmrg  tr ' ' '
16645bc899bSmrg' < "$tmpdepfile" |
16745bc899bSmrg## Some versions of gcc put a space before the `:'.  On the theory
16845bc899bSmrg## that the space means something, we add a space to the output as
169b40a6198Smrg## well.  hp depmode also adds that space, but also prefixes the VPATH
170b40a6198Smrg## to the object.  Take care to not repeat it in the output.
17145bc899bSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
17245bc899bSmrg## correctly.  Breaking it into two sed invocations is a workaround.
173b40a6198Smrg    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
174b40a6198Smrg      | sed -e 's/$/ :/' >> "$depfile"
17545bc899bSmrg  rm -f "$tmpdepfile"
17645bc899bSmrg  ;;
17745bc899bSmrg
17845bc899bSmrghp)
17945bc899bSmrg  # This case exists only to let depend.m4 do its work.  It works by
18045bc899bSmrg  # looking at the text of this script.  This case will never be run,
18145bc899bSmrg  # since it is checked for above.
18245bc899bSmrg  exit 1
18345bc899bSmrg  ;;
18445bc899bSmrg
18545bc899bSmrgsgi)
18645bc899bSmrg  if test "$libtool" = yes; then
18745bc899bSmrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
18845bc899bSmrg  else
18945bc899bSmrg    "$@" -MDupdate "$tmpdepfile"
19045bc899bSmrg  fi
19145bc899bSmrg  stat=$?
19245bc899bSmrg  if test $stat -eq 0; then :
19345bc899bSmrg  else
19445bc899bSmrg    rm -f "$tmpdepfile"
19545bc899bSmrg    exit $stat
19645bc899bSmrg  fi
19745bc899bSmrg  rm -f "$depfile"
19845bc899bSmrg
19945bc899bSmrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
20045bc899bSmrg    echo "$object : \\" > "$depfile"
20145bc899bSmrg
20245bc899bSmrg    # Clip off the initial element (the dependent).  Don't try to be
20345bc899bSmrg    # clever and replace this with sed code, as IRIX sed won't handle
20445bc899bSmrg    # lines with more than a fixed number of characters (4096 in
20545bc899bSmrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
20645bc899bSmrg    # the IRIX cc adds comments like `#:fec' to the end of the
20745bc899bSmrg    # dependency line.
20845bc899bSmrg    tr ' ' '
20945bc899bSmrg' < "$tmpdepfile" \
21045bc899bSmrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
21145bc899bSmrg    tr '
212b40a6198Smrg' ' ' >> "$depfile"
213b40a6198Smrg    echo >> "$depfile"
21445bc899bSmrg
21545bc899bSmrg    # The second pass generates a dummy entry for each header file.
21645bc899bSmrg    tr ' ' '
21745bc899bSmrg' < "$tmpdepfile" \
21845bc899bSmrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
219b40a6198Smrg   >> "$depfile"
22045bc899bSmrg  else
22145bc899bSmrg    # The sourcefile does not contain any dependencies, so just
22245bc899bSmrg    # store a dummy comment line, to avoid errors with the Makefile
22345bc899bSmrg    # "include basename.Plo" scheme.
22445bc899bSmrg    echo "#dummy" > "$depfile"
22545bc899bSmrg  fi
22645bc899bSmrg  rm -f "$tmpdepfile"
22745bc899bSmrg  ;;
22845bc899bSmrg
22945bc899bSmrgaix)
23045bc899bSmrg  # The C for AIX Compiler uses -M and outputs the dependencies
23145bc899bSmrg  # in a .u file.  In older versions, this file always lives in the
23245bc899bSmrg  # current directory.  Also, the AIX compiler puts `$object:' at the
23345bc899bSmrg  # start of each line; $object doesn't have directory information.
23445bc899bSmrg  # Version 6 uses the directory in both cases.
23550f2e948Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
23650f2e948Smrg  test "x$dir" = "x$object" && dir=
23750f2e948Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
23845bc899bSmrg  if test "$libtool" = yes; then
23950f2e948Smrg    tmpdepfile1=$dir$base.u
24050f2e948Smrg    tmpdepfile2=$base.u
24150f2e948Smrg    tmpdepfile3=$dir.libs/$base.u
24245bc899bSmrg    "$@" -Wc,-M
24345bc899bSmrg  else
24450f2e948Smrg    tmpdepfile1=$dir$base.u
24550f2e948Smrg    tmpdepfile2=$dir$base.u
24650f2e948Smrg    tmpdepfile3=$dir$base.u
24745bc899bSmrg    "$@" -M
24845bc899bSmrg  fi
24945bc899bSmrg  stat=$?
25045bc899bSmrg
25145bc899bSmrg  if test $stat -eq 0; then :
25245bc899bSmrg  else
25350f2e948Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
25445bc899bSmrg    exit $stat
25545bc899bSmrg  fi
25645bc899bSmrg
25750f2e948Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
25850f2e948Smrg  do
25950f2e948Smrg    test -f "$tmpdepfile" && break
26050f2e948Smrg  done
26145bc899bSmrg  if test -f "$tmpdepfile"; then
26245bc899bSmrg    # Each line is of the form `foo.o: dependent.h'.
26345bc899bSmrg    # Do two passes, one to just change these to
26445bc899bSmrg    # `$object: dependent.h' and one to simply `dependent.h:'.
26550f2e948Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
26650f2e948Smrg    # That's a tab and a space in the [].
26750f2e948Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
26845bc899bSmrg  else
26945bc899bSmrg    # The sourcefile does not contain any dependencies, so just
27045bc899bSmrg    # store a dummy comment line, to avoid errors with the Makefile
27145bc899bSmrg    # "include basename.Plo" scheme.
27245bc899bSmrg    echo "#dummy" > "$depfile"
27345bc899bSmrg  fi
27445bc899bSmrg  rm -f "$tmpdepfile"
27545bc899bSmrg  ;;
27645bc899bSmrg
27745bc899bSmrgicc)
27845bc899bSmrg  # Intel's C compiler understands `-MD -MF file'.  However on
27945bc899bSmrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
28045bc899bSmrg  # ICC 7.0 will fill foo.d with something like
28145bc899bSmrg  #    foo.o: sub/foo.c
28245bc899bSmrg  #    foo.o: sub/foo.h
28345bc899bSmrg  # which is wrong.  We want:
28445bc899bSmrg  #    sub/foo.o: sub/foo.c
28545bc899bSmrg  #    sub/foo.o: sub/foo.h
28645bc899bSmrg  #    sub/foo.c:
28745bc899bSmrg  #    sub/foo.h:
28845bc899bSmrg  # ICC 7.1 will output
28945bc899bSmrg  #    foo.o: sub/foo.c sub/foo.h
29045bc899bSmrg  # and will wrap long lines using \ :
29145bc899bSmrg  #    foo.o: sub/foo.c ... \
29245bc899bSmrg  #     sub/foo.h ... \
29345bc899bSmrg  #     ...
29445bc899bSmrg
29545bc899bSmrg  "$@" -MD -MF "$tmpdepfile"
29645bc899bSmrg  stat=$?
29745bc899bSmrg  if test $stat -eq 0; then :
29845bc899bSmrg  else
29945bc899bSmrg    rm -f "$tmpdepfile"
30045bc899bSmrg    exit $stat
30145bc899bSmrg  fi
30245bc899bSmrg  rm -f "$depfile"
30345bc899bSmrg  # Each line is of the form `foo.o: dependent.h',
30445bc899bSmrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
30545bc899bSmrg  # Do two passes, one to just change these to
30645bc899bSmrg  # `$object: dependent.h' and one to simply `dependent.h:'.
30745bc899bSmrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
30845bc899bSmrg  # Some versions of the HPUX 10.20 sed can't process this invocation
30945bc899bSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
31045bc899bSmrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
31145bc899bSmrg    sed -e 's/$/ :/' >> "$depfile"
31245bc899bSmrg  rm -f "$tmpdepfile"
31345bc899bSmrg  ;;
31445bc899bSmrg
31550f2e948Smrghp2)
31650f2e948Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
31750f2e948Smrg  # compilers, which have integrated preprocessors.  The correct option
31850f2e948Smrg  # to use with these is +Maked; it writes dependencies to a file named
31950f2e948Smrg  # 'foo.d', which lands next to the object file, wherever that
32050f2e948Smrg  # happens to be.
32150f2e948Smrg  # Much of this is similar to the tru64 case; see comments there.
32250f2e948Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
32350f2e948Smrg  test "x$dir" = "x$object" && dir=
32450f2e948Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
32550f2e948Smrg  if test "$libtool" = yes; then
32650f2e948Smrg    tmpdepfile1=$dir$base.d
32750f2e948Smrg    tmpdepfile2=$dir.libs/$base.d
32850f2e948Smrg    "$@" -Wc,+Maked
32950f2e948Smrg  else
33050f2e948Smrg    tmpdepfile1=$dir$base.d
33150f2e948Smrg    tmpdepfile2=$dir$base.d
33250f2e948Smrg    "$@" +Maked
33350f2e948Smrg  fi
33450f2e948Smrg  stat=$?
33550f2e948Smrg  if test $stat -eq 0; then :
33650f2e948Smrg  else
33750f2e948Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
33850f2e948Smrg     exit $stat
33950f2e948Smrg  fi
34050f2e948Smrg
34150f2e948Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
34250f2e948Smrg  do
34350f2e948Smrg    test -f "$tmpdepfile" && break
34450f2e948Smrg  done
34550f2e948Smrg  if test -f "$tmpdepfile"; then
34650f2e948Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
34750f2e948Smrg    # Add `dependent.h:' lines.
348b40a6198Smrg    sed -ne '2,${
349b40a6198Smrg	       s/^ *//
350b40a6198Smrg	       s/ \\*$//
351b40a6198Smrg	       s/$/:/
352b40a6198Smrg	       p
353b40a6198Smrg	     }' "$tmpdepfile" >> "$depfile"
35450f2e948Smrg  else
35550f2e948Smrg    echo "#dummy" > "$depfile"
35650f2e948Smrg  fi
35750f2e948Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
35850f2e948Smrg  ;;
35950f2e948Smrg
36045bc899bSmrgtru64)
36145bc899bSmrg   # The Tru64 compiler uses -MD to generate dependencies as a side
36245bc899bSmrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
36345bc899bSmrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
36445bc899bSmrg   # dependencies in `foo.d' instead, so we check for that too.
36545bc899bSmrg   # Subdirectories are respected.
36645bc899bSmrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
36745bc899bSmrg   test "x$dir" = "x$object" && dir=
36845bc899bSmrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
36945bc899bSmrg
37045bc899bSmrg   if test "$libtool" = yes; then
37145bc899bSmrg      # With Tru64 cc, shared objects can also be used to make a
37250f2e948Smrg      # static library.  This mechanism is used in libtool 1.4 series to
37345bc899bSmrg      # handle both shared and static libraries in a single compilation.
37445bc899bSmrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
37545bc899bSmrg      #
37645bc899bSmrg      # With libtool 1.5 this exception was removed, and libtool now
37745bc899bSmrg      # generates 2 separate objects for the 2 libraries.  These two
37850f2e948Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
37945bc899bSmrg      # in $dir$base.o.d.  We have to check for both files, because
38045bc899bSmrg      # one of the two compilations can be disabled.  We should prefer
38145bc899bSmrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
38245bc899bSmrg      # automatically cleaned when .libs/ is deleted, while ignoring
38345bc899bSmrg      # the former would cause a distcleancheck panic.
38445bc899bSmrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
38545bc899bSmrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
38645bc899bSmrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
38745bc899bSmrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
38845bc899bSmrg      "$@" -Wc,-MD
38945bc899bSmrg   else
39045bc899bSmrg      tmpdepfile1=$dir$base.o.d
39145bc899bSmrg      tmpdepfile2=$dir$base.d
39245bc899bSmrg      tmpdepfile3=$dir$base.d
39345bc899bSmrg      tmpdepfile4=$dir$base.d
39445bc899bSmrg      "$@" -MD
39545bc899bSmrg   fi
39645bc899bSmrg
39745bc899bSmrg   stat=$?
39845bc899bSmrg   if test $stat -eq 0; then :
39945bc899bSmrg   else
40045bc899bSmrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
40145bc899bSmrg      exit $stat
40245bc899bSmrg   fi
40345bc899bSmrg
40445bc899bSmrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
40545bc899bSmrg   do
40645bc899bSmrg     test -f "$tmpdepfile" && break
40745bc899bSmrg   done
40845bc899bSmrg   if test -f "$tmpdepfile"; then
40945bc899bSmrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
41045bc899bSmrg      # That's a tab and a space in the [].
41145bc899bSmrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
41245bc899bSmrg   else
41345bc899bSmrg      echo "#dummy" > "$depfile"
41445bc899bSmrg   fi
41545bc899bSmrg   rm -f "$tmpdepfile"
41645bc899bSmrg   ;;
41745bc899bSmrg
418b40a6198Smrgmsvc7)
419b40a6198Smrg  if test "$libtool" = yes; then
420b40a6198Smrg    showIncludes=-Wc,-showIncludes
421b40a6198Smrg  else
422b40a6198Smrg    showIncludes=-showIncludes
423b40a6198Smrg  fi
424b40a6198Smrg  "$@" $showIncludes > "$tmpdepfile"
425b40a6198Smrg  stat=$?
426b40a6198Smrg  grep -v '^Note: including file: ' "$tmpdepfile"
427b40a6198Smrg  if test "$stat" = 0; then :
428b40a6198Smrg  else
429b40a6198Smrg    rm -f "$tmpdepfile"
430b40a6198Smrg    exit $stat
431b40a6198Smrg  fi
432b40a6198Smrg  rm -f "$depfile"
433b40a6198Smrg  echo "$object : \\" > "$depfile"
434b40a6198Smrg  # The first sed program below extracts the file names and escapes
435b40a6198Smrg  # backslashes for cygpath.  The second sed program outputs the file
436b40a6198Smrg  # name when reading, but also accumulates all include files in the
437b40a6198Smrg  # hold buffer in order to output them again at the end.  This only
438b40a6198Smrg  # works with sed implementations that can handle large buffers.
439b40a6198Smrg  sed < "$tmpdepfile" -n '
440b40a6198Smrg/^Note: including file:  *\(.*\)/ {
441b40a6198Smrg  s//\1/
442b40a6198Smrg  s/\\/\\\\/g
443b40a6198Smrg  p
444b40a6198Smrg}' | $cygpath_u | sort -u | sed -n '
445b40a6198Smrgs/ /\\ /g
446b40a6198Smrgs/\(.*\)/	\1 \\/p
447b40a6198Smrgs/.\(.*\) \\/\1:/
448b40a6198SmrgH
449b40a6198Smrg$ {
450b40a6198Smrg  s/.*/	/
451b40a6198Smrg  G
452b40a6198Smrg  p
453b40a6198Smrg}' >> "$depfile"
454b40a6198Smrg  rm -f "$tmpdepfile"
455b40a6198Smrg  ;;
456b40a6198Smrg
457b40a6198Smrgmsvc7msys)
458b40a6198Smrg  # This case exists only to let depend.m4 do its work.  It works by
459b40a6198Smrg  # looking at the text of this script.  This case will never be run,
460b40a6198Smrg  # since it is checked for above.
461b40a6198Smrg  exit 1
462b40a6198Smrg  ;;
463b40a6198Smrg
46445bc899bSmrg#nosideeffect)
46545bc899bSmrg  # This comment above is used by automake to tell side-effect
46645bc899bSmrg  # dependency tracking mechanisms from slower ones.
46745bc899bSmrg
46845bc899bSmrgdashmstdout)
46945bc899bSmrg  # Important note: in order to support this mode, a compiler *must*
47045bc899bSmrg  # always write the preprocessed file to stdout, regardless of -o.
47145bc899bSmrg  "$@" || exit $?
47245bc899bSmrg
47345bc899bSmrg  # Remove the call to Libtool.
47445bc899bSmrg  if test "$libtool" = yes; then
475b40a6198Smrg    while test "X$1" != 'X--mode=compile'; do
47645bc899bSmrg      shift
47745bc899bSmrg    done
47845bc899bSmrg    shift
47945bc899bSmrg  fi
48045bc899bSmrg
48145bc899bSmrg  # Remove `-o $object'.
48245bc899bSmrg  IFS=" "
48345bc899bSmrg  for arg
48445bc899bSmrg  do
48545bc899bSmrg    case $arg in
48645bc899bSmrg    -o)
48745bc899bSmrg      shift
48845bc899bSmrg      ;;
48945bc899bSmrg    $object)
49045bc899bSmrg      shift
49145bc899bSmrg      ;;
49245bc899bSmrg    *)
49345bc899bSmrg      set fnord "$@" "$arg"
49445bc899bSmrg      shift # fnord
49545bc899bSmrg      shift # $arg
49645bc899bSmrg      ;;
49745bc899bSmrg    esac
49845bc899bSmrg  done
49945bc899bSmrg
50045bc899bSmrg  test -z "$dashmflag" && dashmflag=-M
50145bc899bSmrg  # Require at least two characters before searching for `:'
50245bc899bSmrg  # in the target name.  This is to cope with DOS-style filenames:
50345bc899bSmrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
50445bc899bSmrg  "$@" $dashmflag |
50545bc899bSmrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
50645bc899bSmrg  rm -f "$depfile"
50745bc899bSmrg  cat < "$tmpdepfile" > "$depfile"
50845bc899bSmrg  tr ' ' '
50945bc899bSmrg' < "$tmpdepfile" | \
51045bc899bSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
51145bc899bSmrg## correctly.  Breaking it into two sed invocations is a workaround.
51245bc899bSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
51345bc899bSmrg  rm -f "$tmpdepfile"
51445bc899bSmrg  ;;
51545bc899bSmrg
51645bc899bSmrgdashXmstdout)
51745bc899bSmrg  # This case only exists to satisfy depend.m4.  It is never actually
51845bc899bSmrg  # run, as this mode is specially recognized in the preamble.
51945bc899bSmrg  exit 1
52045bc899bSmrg  ;;
52145bc899bSmrg
52245bc899bSmrgmakedepend)
52345bc899bSmrg  "$@" || exit $?
52445bc899bSmrg  # Remove any Libtool call
52545bc899bSmrg  if test "$libtool" = yes; then
526b40a6198Smrg    while test "X$1" != 'X--mode=compile'; do
52745bc899bSmrg      shift
52845bc899bSmrg    done
52945bc899bSmrg    shift
53045bc899bSmrg  fi
53145bc899bSmrg  # X makedepend
53245bc899bSmrg  shift
533b40a6198Smrg  cleared=no eat=no
534b40a6198Smrg  for arg
535b40a6198Smrg  do
53645bc899bSmrg    case $cleared in
53745bc899bSmrg    no)
53845bc899bSmrg      set ""; shift
53945bc899bSmrg      cleared=yes ;;
54045bc899bSmrg    esac
541b40a6198Smrg    if test $eat = yes; then
542b40a6198Smrg      eat=no
543b40a6198Smrg      continue
544b40a6198Smrg    fi
54545bc899bSmrg    case "$arg" in
54645bc899bSmrg    -D*|-I*)
54745bc899bSmrg      set fnord "$@" "$arg"; shift ;;
54845bc899bSmrg    # Strip any option that makedepend may not understand.  Remove
54945bc899bSmrg    # the object too, otherwise makedepend will parse it as a source file.
550b40a6198Smrg    -arch)
551b40a6198Smrg      eat=yes ;;
55245bc899bSmrg    -*|$object)
55345bc899bSmrg      ;;
55445bc899bSmrg    *)
55545bc899bSmrg      set fnord "$@" "$arg"; shift ;;
55645bc899bSmrg    esac
55745bc899bSmrg  done
558b40a6198Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
55945bc899bSmrg  touch "$tmpdepfile"
56045bc899bSmrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
56145bc899bSmrg  rm -f "$depfile"
562b40a6198Smrg  # makedepend may prepend the VPATH from the source file name to the object.
563b40a6198Smrg  # No need to regex-escape $object, excess matching of '.' is harmless.
564b40a6198Smrg  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
56545bc899bSmrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
56645bc899bSmrg' | \
56745bc899bSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
56845bc899bSmrg## correctly.  Breaking it into two sed invocations is a workaround.
56945bc899bSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
57045bc899bSmrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
57145bc899bSmrg  ;;
57245bc899bSmrg
57345bc899bSmrgcpp)
57445bc899bSmrg  # Important note: in order to support this mode, a compiler *must*
57545bc899bSmrg  # always write the preprocessed file to stdout.
57645bc899bSmrg  "$@" || exit $?
57745bc899bSmrg
57845bc899bSmrg  # Remove the call to Libtool.
57945bc899bSmrg  if test "$libtool" = yes; then
580b40a6198Smrg    while test "X$1" != 'X--mode=compile'; do
58145bc899bSmrg      shift
58245bc899bSmrg    done
58345bc899bSmrg    shift
58445bc899bSmrg  fi
58545bc899bSmrg
58645bc899bSmrg  # Remove `-o $object'.
58745bc899bSmrg  IFS=" "
58845bc899bSmrg  for arg
58945bc899bSmrg  do
59045bc899bSmrg    case $arg in
59145bc899bSmrg    -o)
59245bc899bSmrg      shift
59345bc899bSmrg      ;;
59445bc899bSmrg    $object)
59545bc899bSmrg      shift
59645bc899bSmrg      ;;
59745bc899bSmrg    *)
59845bc899bSmrg      set fnord "$@" "$arg"
59945bc899bSmrg      shift # fnord
60045bc899bSmrg      shift # $arg
60145bc899bSmrg      ;;
60245bc899bSmrg    esac
60345bc899bSmrg  done
60445bc899bSmrg
60545bc899bSmrg  "$@" -E |
60645bc899bSmrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
60745bc899bSmrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
60845bc899bSmrg    sed '$ s: \\$::' > "$tmpdepfile"
60945bc899bSmrg  rm -f "$depfile"
61045bc899bSmrg  echo "$object : \\" > "$depfile"
61145bc899bSmrg  cat < "$tmpdepfile" >> "$depfile"
61245bc899bSmrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
61345bc899bSmrg  rm -f "$tmpdepfile"
61445bc899bSmrg  ;;
61545bc899bSmrg
61645bc899bSmrgmsvisualcpp)
61745bc899bSmrg  # Important note: in order to support this mode, a compiler *must*
618b40a6198Smrg  # always write the preprocessed file to stdout.
61945bc899bSmrg  "$@" || exit $?
620b40a6198Smrg
621b40a6198Smrg  # Remove the call to Libtool.
622b40a6198Smrg  if test "$libtool" = yes; then
623b40a6198Smrg    while test "X$1" != 'X--mode=compile'; do
624b40a6198Smrg      shift
625b40a6198Smrg    done
626b40a6198Smrg    shift
627b40a6198Smrg  fi
628b40a6198Smrg
62945bc899bSmrg  IFS=" "
63045bc899bSmrg  for arg
63145bc899bSmrg  do
63245bc899bSmrg    case "$arg" in
633b40a6198Smrg    -o)
634b40a6198Smrg      shift
635b40a6198Smrg      ;;
636b40a6198Smrg    $object)
637b40a6198Smrg      shift
638b40a6198Smrg      ;;
63945bc899bSmrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
64045bc899bSmrg	set fnord "$@"
64145bc899bSmrg	shift
64245bc899bSmrg	shift
64345bc899bSmrg	;;
64445bc899bSmrg    *)
64545bc899bSmrg	set fnord "$@" "$arg"
64645bc899bSmrg	shift
64745bc899bSmrg	shift
64845bc899bSmrg	;;
64945bc899bSmrg    esac
65045bc899bSmrg  done
651b40a6198Smrg  "$@" -E 2>/dev/null |
652b40a6198Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
65345bc899bSmrg  rm -f "$depfile"
65445bc899bSmrg  echo "$object : \\" > "$depfile"
655b40a6198Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
65645bc899bSmrg  echo "	" >> "$depfile"
657b40a6198Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
65845bc899bSmrg  rm -f "$tmpdepfile"
65945bc899bSmrg  ;;
66045bc899bSmrg
661b40a6198Smrgmsvcmsys)
662b40a6198Smrg  # This case exists only to let depend.m4 do its work.  It works by
663b40a6198Smrg  # looking at the text of this script.  This case will never be run,
664b40a6198Smrg  # since it is checked for above.
665b40a6198Smrg  exit 1
666b40a6198Smrg  ;;
667b40a6198Smrg
66845bc899bSmrgnone)
66945bc899bSmrg  exec "$@"
67045bc899bSmrg  ;;
67145bc899bSmrg
67245bc899bSmrg*)
67345bc899bSmrg  echo "Unknown depmode $depmode" 1>&2
67445bc899bSmrg  exit 1
67545bc899bSmrg  ;;
67645bc899bSmrgesac
67745bc899bSmrg
67845bc899bSmrgexit 0
67945bc899bSmrg
68045bc899bSmrg# Local Variables:
68145bc899bSmrg# mode: shell-script
68245bc899bSmrg# sh-indentation: 2
68345bc899bSmrg# eval: (add-hook 'write-file-hooks 'time-stamp)
68445bc899bSmrg# time-stamp-start: "scriptversion="
68545bc899bSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
686b40a6198Smrg# time-stamp-time-zone: "UTC"
687b40a6198Smrg# time-stamp-end: "; # UTC"
68845bc899bSmrg# End:
689