depcomp revision fb23d3a8
164ce7165Smrg#! /bin/sh
264ce7165Smrg# depcomp - compile a program generating dependencies as side-effects
364ce7165Smrg
4fb23d3a8Smrgscriptversion=2009-04-28.21; # UTC
564ce7165Smrg
6fb23d3a8Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
7fb23d3a8Smrg# Software Foundation, Inc.
864ce7165Smrg
964ce7165Smrg# This program is free software; you can redistribute it and/or modify
1064ce7165Smrg# it under the terms of the GNU General Public License as published by
1164ce7165Smrg# the Free Software Foundation; either version 2, or (at your option)
1264ce7165Smrg# any later version.
1364ce7165Smrg
1464ce7165Smrg# This program is distributed in the hope that it will be useful,
1564ce7165Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
1664ce7165Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1764ce7165Smrg# GNU General Public License for more details.
1864ce7165Smrg
1964ce7165Smrg# You should have received a copy of the GNU General Public License
20fb23d3a8Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
2164ce7165Smrg
2264ce7165Smrg# As a special exception to the GNU General Public License, if you
2364ce7165Smrg# distribute this file as part of a program that contains a
2464ce7165Smrg# configuration script generated by Autoconf, you may include it under
2564ce7165Smrg# the same distribution terms that you use for the rest of that program.
2664ce7165Smrg
2764ce7165Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
2864ce7165Smrg
2964ce7165Smrgcase $1 in
3064ce7165Smrg  '')
3164ce7165Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
3264ce7165Smrg     exit 1;
3364ce7165Smrg     ;;
3464ce7165Smrg  -h | --h*)
3564ce7165Smrg    cat <<\EOF
3664ce7165SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
3764ce7165Smrg
3864ce7165SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
3964ce7165Smrgas side-effects.
4064ce7165Smrg
4164ce7165SmrgEnvironment variables:
4264ce7165Smrg  depmode     Dependency tracking mode.
4364ce7165Smrg  source      Source file read by `PROGRAMS ARGS'.
4464ce7165Smrg  object      Object file output by `PROGRAMS ARGS'.
4564ce7165Smrg  DEPDIR      directory where to store dependencies.
4664ce7165Smrg  depfile     Dependency file to output.
4764ce7165Smrg  tmpdepfile  Temporary file to use when outputing dependencies.
4864ce7165Smrg  libtool     Whether libtool is used (yes/no).
4964ce7165Smrg
5064ce7165SmrgReport bugs to <bug-automake@gnu.org>.
5164ce7165SmrgEOF
5264ce7165Smrg    exit $?
5364ce7165Smrg    ;;
5464ce7165Smrg  -v | --v*)
5564ce7165Smrg    echo "depcomp $scriptversion"
5664ce7165Smrg    exit $?
5764ce7165Smrg    ;;
5864ce7165Smrgesac
5964ce7165Smrg
6064ce7165Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
6164ce7165Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
6264ce7165Smrg  exit 1
6364ce7165Smrgfi
6464ce7165Smrg
6564ce7165Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
6664ce7165Smrgdepfile=${depfile-`echo "$object" |
6764ce7165Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
6864ce7165Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
6964ce7165Smrg
7064ce7165Smrgrm -f "$tmpdepfile"
7164ce7165Smrg
7264ce7165Smrg# Some modes work just like other modes, but use different flags.  We
7364ce7165Smrg# parameterize here, but still list the modes in the big case below,
7464ce7165Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
7564ce7165Smrg# here, because this file can only contain one case statement.
7664ce7165Smrgif test "$depmode" = hp; then
7764ce7165Smrg  # HP compiler uses -M and no extra arg.
7864ce7165Smrg  gccflag=-M
7964ce7165Smrg  depmode=gcc
8064ce7165Smrgfi
8164ce7165Smrg
8264ce7165Smrgif test "$depmode" = dashXmstdout; then
8364ce7165Smrg   # This is just like dashmstdout with a different argument.
8464ce7165Smrg   dashmflag=-xM
8564ce7165Smrg   depmode=dashmstdout
8664ce7165Smrgfi
8764ce7165Smrg
88fb23d3a8Smrgcygpath_u="cygpath -u -f -"
89fb23d3a8Smrgif test "$depmode" = msvcmsys; then
90fb23d3a8Smrg   # This is just like msvisualcpp but w/o cygpath translation.
91fb23d3a8Smrg   # Just convert the backslash-escaped backslashes to single forward
92fb23d3a8Smrg   # slashes to satisfy depend.m4
93fb23d3a8Smrg   cygpath_u="sed s,\\\\\\\\,/,g"
94fb23d3a8Smrg   depmode=msvisualcpp
95fb23d3a8Smrgfi
96fb23d3a8Smrg
9764ce7165Smrgcase "$depmode" in
9864ce7165Smrggcc3)
9964ce7165Smrg## gcc 3 implements dependency tracking that does exactly what
10064ce7165Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
10164ce7165Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
10264ce7165Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
10364ce7165Smrg## the command line argument order; so add the flags where they
10464ce7165Smrg## appear in depend2.am.  Note that the slowdown incurred here
10564ce7165Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
10664ce7165Smrg  for arg
10764ce7165Smrg  do
10864ce7165Smrg    case $arg in
10964ce7165Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
11064ce7165Smrg    *)  set fnord "$@" "$arg" ;;
11164ce7165Smrg    esac
11264ce7165Smrg    shift # fnord
11364ce7165Smrg    shift # $arg
11464ce7165Smrg  done
11564ce7165Smrg  "$@"
11664ce7165Smrg  stat=$?
11764ce7165Smrg  if test $stat -eq 0; then :
11864ce7165Smrg  else
11964ce7165Smrg    rm -f "$tmpdepfile"
12064ce7165Smrg    exit $stat
12164ce7165Smrg  fi
12264ce7165Smrg  mv "$tmpdepfile" "$depfile"
12364ce7165Smrg  ;;
12464ce7165Smrg
12564ce7165Smrggcc)
12664ce7165Smrg## There are various ways to get dependency output from gcc.  Here's
12764ce7165Smrg## why we pick this rather obscure method:
12864ce7165Smrg## - Don't want to use -MD because we'd like the dependencies to end
12964ce7165Smrg##   up in a subdir.  Having to rename by hand is ugly.
13064ce7165Smrg##   (We might end up doing this anyway to support other compilers.)
13164ce7165Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
13264ce7165Smrg##   -MM, not -M (despite what the docs say).
13364ce7165Smrg## - Using -M directly means running the compiler twice (even worse
13464ce7165Smrg##   than renaming).
13564ce7165Smrg  if test -z "$gccflag"; then
13664ce7165Smrg    gccflag=-MD,
13764ce7165Smrg  fi
13864ce7165Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
13964ce7165Smrg  stat=$?
14064ce7165Smrg  if test $stat -eq 0; then :
14164ce7165Smrg  else
14264ce7165Smrg    rm -f "$tmpdepfile"
14364ce7165Smrg    exit $stat
14464ce7165Smrg  fi
14564ce7165Smrg  rm -f "$depfile"
14664ce7165Smrg  echo "$object : \\" > "$depfile"
14764ce7165Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
14864ce7165Smrg## The second -e expression handles DOS-style file names with drive letters.
14964ce7165Smrg  sed -e 's/^[^:]*: / /' \
15064ce7165Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
15164ce7165Smrg## This next piece of magic avoids the `deleted header file' problem.
15264ce7165Smrg## The problem is that when a header file which appears in a .P file
15364ce7165Smrg## is deleted, the dependency causes make to die (because there is
15464ce7165Smrg## typically no way to rebuild the header).  We avoid this by adding
15564ce7165Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
15664ce7165Smrg## this for us directly.
15764ce7165Smrg  tr ' ' '
15864ce7165Smrg' < "$tmpdepfile" |
15964ce7165Smrg## Some versions of gcc put a space before the `:'.  On the theory
16064ce7165Smrg## that the space means something, we add a space to the output as
16164ce7165Smrg## well.
16264ce7165Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
16364ce7165Smrg## correctly.  Breaking it into two sed invocations is a workaround.
16464ce7165Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
16564ce7165Smrg  rm -f "$tmpdepfile"
16664ce7165Smrg  ;;
16764ce7165Smrg
16864ce7165Smrghp)
16964ce7165Smrg  # This case exists only to let depend.m4 do its work.  It works by
17064ce7165Smrg  # looking at the text of this script.  This case will never be run,
17164ce7165Smrg  # since it is checked for above.
17264ce7165Smrg  exit 1
17364ce7165Smrg  ;;
17464ce7165Smrg
17564ce7165Smrgsgi)
17664ce7165Smrg  if test "$libtool" = yes; then
17764ce7165Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
17864ce7165Smrg  else
17964ce7165Smrg    "$@" -MDupdate "$tmpdepfile"
18064ce7165Smrg  fi
18164ce7165Smrg  stat=$?
18264ce7165Smrg  if test $stat -eq 0; then :
18364ce7165Smrg  else
18464ce7165Smrg    rm -f "$tmpdepfile"
18564ce7165Smrg    exit $stat
18664ce7165Smrg  fi
18764ce7165Smrg  rm -f "$depfile"
18864ce7165Smrg
18964ce7165Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
19064ce7165Smrg    echo "$object : \\" > "$depfile"
19164ce7165Smrg
19264ce7165Smrg    # Clip off the initial element (the dependent).  Don't try to be
19364ce7165Smrg    # clever and replace this with sed code, as IRIX sed won't handle
19464ce7165Smrg    # lines with more than a fixed number of characters (4096 in
19564ce7165Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
19664ce7165Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
19764ce7165Smrg    # dependency line.
19864ce7165Smrg    tr ' ' '
19964ce7165Smrg' < "$tmpdepfile" \
20064ce7165Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
20164ce7165Smrg    tr '
202fb23d3a8Smrg' ' ' >> "$depfile"
203fb23d3a8Smrg    echo >> "$depfile"
20464ce7165Smrg
20564ce7165Smrg    # The second pass generates a dummy entry for each header file.
20664ce7165Smrg    tr ' ' '
20764ce7165Smrg' < "$tmpdepfile" \
20864ce7165Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
209fb23d3a8Smrg   >> "$depfile"
21064ce7165Smrg  else
21164ce7165Smrg    # The sourcefile does not contain any dependencies, so just
21264ce7165Smrg    # store a dummy comment line, to avoid errors with the Makefile
21364ce7165Smrg    # "include basename.Plo" scheme.
21464ce7165Smrg    echo "#dummy" > "$depfile"
21564ce7165Smrg  fi
21664ce7165Smrg  rm -f "$tmpdepfile"
21764ce7165Smrg  ;;
21864ce7165Smrg
21964ce7165Smrgaix)
22064ce7165Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
22164ce7165Smrg  # in a .u file.  In older versions, this file always lives in the
22264ce7165Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
22364ce7165Smrg  # start of each line; $object doesn't have directory information.
22464ce7165Smrg  # Version 6 uses the directory in both cases.
225fb23d3a8Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
226fb23d3a8Smrg  test "x$dir" = "x$object" && dir=
227fb23d3a8Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
22864ce7165Smrg  if test "$libtool" = yes; then
229fb23d3a8Smrg    tmpdepfile1=$dir$base.u
230fb23d3a8Smrg    tmpdepfile2=$base.u
231fb23d3a8Smrg    tmpdepfile3=$dir.libs/$base.u
23264ce7165Smrg    "$@" -Wc,-M
23364ce7165Smrg  else
234fb23d3a8Smrg    tmpdepfile1=$dir$base.u
235fb23d3a8Smrg    tmpdepfile2=$dir$base.u
236fb23d3a8Smrg    tmpdepfile3=$dir$base.u
23764ce7165Smrg    "$@" -M
23864ce7165Smrg  fi
23964ce7165Smrg  stat=$?
24064ce7165Smrg
24164ce7165Smrg  if test $stat -eq 0; then :
24264ce7165Smrg  else
243fb23d3a8Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
24464ce7165Smrg    exit $stat
24564ce7165Smrg  fi
24664ce7165Smrg
247fb23d3a8Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
248fb23d3a8Smrg  do
249fb23d3a8Smrg    test -f "$tmpdepfile" && break
250fb23d3a8Smrg  done
25164ce7165Smrg  if test -f "$tmpdepfile"; then
25264ce7165Smrg    # Each line is of the form `foo.o: dependent.h'.
25364ce7165Smrg    # Do two passes, one to just change these to
25464ce7165Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
255fb23d3a8Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
256fb23d3a8Smrg    # That's a tab and a space in the [].
257fb23d3a8Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
25864ce7165Smrg  else
25964ce7165Smrg    # The sourcefile does not contain any dependencies, so just
26064ce7165Smrg    # store a dummy comment line, to avoid errors with the Makefile
26164ce7165Smrg    # "include basename.Plo" scheme.
26264ce7165Smrg    echo "#dummy" > "$depfile"
26364ce7165Smrg  fi
26464ce7165Smrg  rm -f "$tmpdepfile"
26564ce7165Smrg  ;;
26664ce7165Smrg
26764ce7165Smrgicc)
26864ce7165Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
26964ce7165Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
27064ce7165Smrg  # ICC 7.0 will fill foo.d with something like
27164ce7165Smrg  #    foo.o: sub/foo.c
27264ce7165Smrg  #    foo.o: sub/foo.h
27364ce7165Smrg  # which is wrong.  We want:
27464ce7165Smrg  #    sub/foo.o: sub/foo.c
27564ce7165Smrg  #    sub/foo.o: sub/foo.h
27664ce7165Smrg  #    sub/foo.c:
27764ce7165Smrg  #    sub/foo.h:
27864ce7165Smrg  # ICC 7.1 will output
27964ce7165Smrg  #    foo.o: sub/foo.c sub/foo.h
28064ce7165Smrg  # and will wrap long lines using \ :
28164ce7165Smrg  #    foo.o: sub/foo.c ... \
28264ce7165Smrg  #     sub/foo.h ... \
28364ce7165Smrg  #     ...
28464ce7165Smrg
28564ce7165Smrg  "$@" -MD -MF "$tmpdepfile"
28664ce7165Smrg  stat=$?
28764ce7165Smrg  if test $stat -eq 0; then :
28864ce7165Smrg  else
28964ce7165Smrg    rm -f "$tmpdepfile"
29064ce7165Smrg    exit $stat
29164ce7165Smrg  fi
29264ce7165Smrg  rm -f "$depfile"
29364ce7165Smrg  # Each line is of the form `foo.o: dependent.h',
29464ce7165Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
29564ce7165Smrg  # Do two passes, one to just change these to
29664ce7165Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
29764ce7165Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
29864ce7165Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
29964ce7165Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
30064ce7165Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
30164ce7165Smrg    sed -e 's/$/ :/' >> "$depfile"
30264ce7165Smrg  rm -f "$tmpdepfile"
30364ce7165Smrg  ;;
30464ce7165Smrg
30564ce7165Smrghp2)
30664ce7165Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
30764ce7165Smrg  # compilers, which have integrated preprocessors.  The correct option
30864ce7165Smrg  # to use with these is +Maked; it writes dependencies to a file named
30964ce7165Smrg  # 'foo.d', which lands next to the object file, wherever that
31064ce7165Smrg  # happens to be.
31164ce7165Smrg  # Much of this is similar to the tru64 case; see comments there.
31264ce7165Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
31364ce7165Smrg  test "x$dir" = "x$object" && dir=
31464ce7165Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
31564ce7165Smrg  if test "$libtool" = yes; then
31664ce7165Smrg    tmpdepfile1=$dir$base.d
31764ce7165Smrg    tmpdepfile2=$dir.libs/$base.d
31864ce7165Smrg    "$@" -Wc,+Maked
31964ce7165Smrg  else
32064ce7165Smrg    tmpdepfile1=$dir$base.d
32164ce7165Smrg    tmpdepfile2=$dir$base.d
32264ce7165Smrg    "$@" +Maked
32364ce7165Smrg  fi
32464ce7165Smrg  stat=$?
32564ce7165Smrg  if test $stat -eq 0; then :
32664ce7165Smrg  else
32764ce7165Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
32864ce7165Smrg     exit $stat
32964ce7165Smrg  fi
33064ce7165Smrg
33164ce7165Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
33264ce7165Smrg  do
33364ce7165Smrg    test -f "$tmpdepfile" && break
33464ce7165Smrg  done
33564ce7165Smrg  if test -f "$tmpdepfile"; then
33664ce7165Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
33764ce7165Smrg    # Add `dependent.h:' lines.
338fb23d3a8Smrg    sed -ne '2,${
339fb23d3a8Smrg	       s/^ *//
340fb23d3a8Smrg	       s/ \\*$//
341fb23d3a8Smrg	       s/$/:/
342fb23d3a8Smrg	       p
343fb23d3a8Smrg	     }' "$tmpdepfile" >> "$depfile"
34464ce7165Smrg  else
34564ce7165Smrg    echo "#dummy" > "$depfile"
34664ce7165Smrg  fi
34764ce7165Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
34864ce7165Smrg  ;;
34964ce7165Smrg
35064ce7165Smrgtru64)
35164ce7165Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
35264ce7165Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
35364ce7165Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
35464ce7165Smrg   # dependencies in `foo.d' instead, so we check for that too.
35564ce7165Smrg   # Subdirectories are respected.
35664ce7165Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
35764ce7165Smrg   test "x$dir" = "x$object" && dir=
35864ce7165Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
35964ce7165Smrg
36064ce7165Smrg   if test "$libtool" = yes; then
36164ce7165Smrg      # With Tru64 cc, shared objects can also be used to make a
36264ce7165Smrg      # static library.  This mechanism is used in libtool 1.4 series to
36364ce7165Smrg      # handle both shared and static libraries in a single compilation.
36464ce7165Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
36564ce7165Smrg      #
36664ce7165Smrg      # With libtool 1.5 this exception was removed, and libtool now
36764ce7165Smrg      # generates 2 separate objects for the 2 libraries.  These two
36864ce7165Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
36964ce7165Smrg      # in $dir$base.o.d.  We have to check for both files, because
37064ce7165Smrg      # one of the two compilations can be disabled.  We should prefer
37164ce7165Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
37264ce7165Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
37364ce7165Smrg      # the former would cause a distcleancheck panic.
37464ce7165Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
37564ce7165Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
37664ce7165Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
37764ce7165Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
37864ce7165Smrg      "$@" -Wc,-MD
37964ce7165Smrg   else
38064ce7165Smrg      tmpdepfile1=$dir$base.o.d
38164ce7165Smrg      tmpdepfile2=$dir$base.d
38264ce7165Smrg      tmpdepfile3=$dir$base.d
38364ce7165Smrg      tmpdepfile4=$dir$base.d
38464ce7165Smrg      "$@" -MD
38564ce7165Smrg   fi
38664ce7165Smrg
38764ce7165Smrg   stat=$?
38864ce7165Smrg   if test $stat -eq 0; then :
38964ce7165Smrg   else
39064ce7165Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
39164ce7165Smrg      exit $stat
39264ce7165Smrg   fi
39364ce7165Smrg
39464ce7165Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
39564ce7165Smrg   do
39664ce7165Smrg     test -f "$tmpdepfile" && break
39764ce7165Smrg   done
39864ce7165Smrg   if test -f "$tmpdepfile"; then
39964ce7165Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
40064ce7165Smrg      # That's a tab and a space in the [].
40164ce7165Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
40264ce7165Smrg   else
40364ce7165Smrg      echo "#dummy" > "$depfile"
40464ce7165Smrg   fi
40564ce7165Smrg   rm -f "$tmpdepfile"
40664ce7165Smrg   ;;
40764ce7165Smrg
40864ce7165Smrg#nosideeffect)
40964ce7165Smrg  # This comment above is used by automake to tell side-effect
41064ce7165Smrg  # dependency tracking mechanisms from slower ones.
41164ce7165Smrg
41264ce7165Smrgdashmstdout)
41364ce7165Smrg  # Important note: in order to support this mode, a compiler *must*
41464ce7165Smrg  # always write the preprocessed file to stdout, regardless of -o.
41564ce7165Smrg  "$@" || exit $?
41664ce7165Smrg
41764ce7165Smrg  # Remove the call to Libtool.
41864ce7165Smrg  if test "$libtool" = yes; then
419fb23d3a8Smrg    while test "X$1" != 'X--mode=compile'; do
42064ce7165Smrg      shift
42164ce7165Smrg    done
42264ce7165Smrg    shift
42364ce7165Smrg  fi
42464ce7165Smrg
42564ce7165Smrg  # Remove `-o $object'.
42664ce7165Smrg  IFS=" "
42764ce7165Smrg  for arg
42864ce7165Smrg  do
42964ce7165Smrg    case $arg in
43064ce7165Smrg    -o)
43164ce7165Smrg      shift
43264ce7165Smrg      ;;
43364ce7165Smrg    $object)
43464ce7165Smrg      shift
43564ce7165Smrg      ;;
43664ce7165Smrg    *)
43764ce7165Smrg      set fnord "$@" "$arg"
43864ce7165Smrg      shift # fnord
43964ce7165Smrg      shift # $arg
44064ce7165Smrg      ;;
44164ce7165Smrg    esac
44264ce7165Smrg  done
44364ce7165Smrg
44464ce7165Smrg  test -z "$dashmflag" && dashmflag=-M
44564ce7165Smrg  # Require at least two characters before searching for `:'
44664ce7165Smrg  # in the target name.  This is to cope with DOS-style filenames:
44764ce7165Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
44864ce7165Smrg  "$@" $dashmflag |
44964ce7165Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
45064ce7165Smrg  rm -f "$depfile"
45164ce7165Smrg  cat < "$tmpdepfile" > "$depfile"
45264ce7165Smrg  tr ' ' '
45364ce7165Smrg' < "$tmpdepfile" | \
45464ce7165Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
45564ce7165Smrg## correctly.  Breaking it into two sed invocations is a workaround.
45664ce7165Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
45764ce7165Smrg  rm -f "$tmpdepfile"
45864ce7165Smrg  ;;
45964ce7165Smrg
46064ce7165SmrgdashXmstdout)
46164ce7165Smrg  # This case only exists to satisfy depend.m4.  It is never actually
46264ce7165Smrg  # run, as this mode is specially recognized in the preamble.
46364ce7165Smrg  exit 1
46464ce7165Smrg  ;;
46564ce7165Smrg
46664ce7165Smrgmakedepend)
46764ce7165Smrg  "$@" || exit $?
46864ce7165Smrg  # Remove any Libtool call
46964ce7165Smrg  if test "$libtool" = yes; then
470fb23d3a8Smrg    while test "X$1" != 'X--mode=compile'; do
47164ce7165Smrg      shift
47264ce7165Smrg    done
47364ce7165Smrg    shift
47464ce7165Smrg  fi
47564ce7165Smrg  # X makedepend
47664ce7165Smrg  shift
477fb23d3a8Smrg  cleared=no eat=no
478fb23d3a8Smrg  for arg
479fb23d3a8Smrg  do
48064ce7165Smrg    case $cleared in
48164ce7165Smrg    no)
48264ce7165Smrg      set ""; shift
48364ce7165Smrg      cleared=yes ;;
48464ce7165Smrg    esac
485fb23d3a8Smrg    if test $eat = yes; then
486fb23d3a8Smrg      eat=no
487fb23d3a8Smrg      continue
488fb23d3a8Smrg    fi
48964ce7165Smrg    case "$arg" in
49064ce7165Smrg    -D*|-I*)
49164ce7165Smrg      set fnord "$@" "$arg"; shift ;;
49264ce7165Smrg    # Strip any option that makedepend may not understand.  Remove
49364ce7165Smrg    # the object too, otherwise makedepend will parse it as a source file.
494fb23d3a8Smrg    -arch)
495fb23d3a8Smrg      eat=yes ;;
49664ce7165Smrg    -*|$object)
49764ce7165Smrg      ;;
49864ce7165Smrg    *)
49964ce7165Smrg      set fnord "$@" "$arg"; shift ;;
50064ce7165Smrg    esac
50164ce7165Smrg  done
502fb23d3a8Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
50364ce7165Smrg  touch "$tmpdepfile"
50464ce7165Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
50564ce7165Smrg  rm -f "$depfile"
50664ce7165Smrg  cat < "$tmpdepfile" > "$depfile"
50764ce7165Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
50864ce7165Smrg' | \
50964ce7165Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
51064ce7165Smrg## correctly.  Breaking it into two sed invocations is a workaround.
51164ce7165Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
51264ce7165Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
51364ce7165Smrg  ;;
51464ce7165Smrg
51564ce7165Smrgcpp)
51664ce7165Smrg  # Important note: in order to support this mode, a compiler *must*
51764ce7165Smrg  # always write the preprocessed file to stdout.
51864ce7165Smrg  "$@" || exit $?
51964ce7165Smrg
52064ce7165Smrg  # Remove the call to Libtool.
52164ce7165Smrg  if test "$libtool" = yes; then
522fb23d3a8Smrg    while test "X$1" != 'X--mode=compile'; do
52364ce7165Smrg      shift
52464ce7165Smrg    done
52564ce7165Smrg    shift
52664ce7165Smrg  fi
52764ce7165Smrg
52864ce7165Smrg  # Remove `-o $object'.
52964ce7165Smrg  IFS=" "
53064ce7165Smrg  for arg
53164ce7165Smrg  do
53264ce7165Smrg    case $arg in
53364ce7165Smrg    -o)
53464ce7165Smrg      shift
53564ce7165Smrg      ;;
53664ce7165Smrg    $object)
53764ce7165Smrg      shift
53864ce7165Smrg      ;;
53964ce7165Smrg    *)
54064ce7165Smrg      set fnord "$@" "$arg"
54164ce7165Smrg      shift # fnord
54264ce7165Smrg      shift # $arg
54364ce7165Smrg      ;;
54464ce7165Smrg    esac
54564ce7165Smrg  done
54664ce7165Smrg
54764ce7165Smrg  "$@" -E |
54864ce7165Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
54964ce7165Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
55064ce7165Smrg    sed '$ s: \\$::' > "$tmpdepfile"
55164ce7165Smrg  rm -f "$depfile"
55264ce7165Smrg  echo "$object : \\" > "$depfile"
55364ce7165Smrg  cat < "$tmpdepfile" >> "$depfile"
55464ce7165Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
55564ce7165Smrg  rm -f "$tmpdepfile"
55664ce7165Smrg  ;;
55764ce7165Smrg
55864ce7165Smrgmsvisualcpp)
55964ce7165Smrg  # Important note: in order to support this mode, a compiler *must*
560fb23d3a8Smrg  # always write the preprocessed file to stdout.
56164ce7165Smrg  "$@" || exit $?
562fb23d3a8Smrg
563fb23d3a8Smrg  # Remove the call to Libtool.
564fb23d3a8Smrg  if test "$libtool" = yes; then
565fb23d3a8Smrg    while test "X$1" != 'X--mode=compile'; do
566fb23d3a8Smrg      shift
567fb23d3a8Smrg    done
568fb23d3a8Smrg    shift
569fb23d3a8Smrg  fi
570fb23d3a8Smrg
57164ce7165Smrg  IFS=" "
57264ce7165Smrg  for arg
57364ce7165Smrg  do
57464ce7165Smrg    case "$arg" in
575fb23d3a8Smrg    -o)
576fb23d3a8Smrg      shift
577fb23d3a8Smrg      ;;
578fb23d3a8Smrg    $object)
579fb23d3a8Smrg      shift
580fb23d3a8Smrg      ;;
58164ce7165Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
58264ce7165Smrg	set fnord "$@"
58364ce7165Smrg	shift
58464ce7165Smrg	shift
58564ce7165Smrg	;;
58664ce7165Smrg    *)
58764ce7165Smrg	set fnord "$@" "$arg"
58864ce7165Smrg	shift
58964ce7165Smrg	shift
59064ce7165Smrg	;;
59164ce7165Smrg    esac
59264ce7165Smrg  done
593fb23d3a8Smrg  "$@" -E 2>/dev/null |
594fb23d3a8Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
59564ce7165Smrg  rm -f "$depfile"
59664ce7165Smrg  echo "$object : \\" > "$depfile"
597fb23d3a8Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
59864ce7165Smrg  echo "	" >> "$depfile"
599fb23d3a8Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
60064ce7165Smrg  rm -f "$tmpdepfile"
60164ce7165Smrg  ;;
60264ce7165Smrg
603fb23d3a8Smrgmsvcmsys)
604fb23d3a8Smrg  # This case exists only to let depend.m4 do its work.  It works by
605fb23d3a8Smrg  # looking at the text of this script.  This case will never be run,
606fb23d3a8Smrg  # since it is checked for above.
607fb23d3a8Smrg  exit 1
608fb23d3a8Smrg  ;;
609fb23d3a8Smrg
61064ce7165Smrgnone)
61164ce7165Smrg  exec "$@"
61264ce7165Smrg  ;;
61364ce7165Smrg
61464ce7165Smrg*)
61564ce7165Smrg  echo "Unknown depmode $depmode" 1>&2
61664ce7165Smrg  exit 1
61764ce7165Smrg  ;;
61864ce7165Smrgesac
61964ce7165Smrg
62064ce7165Smrgexit 0
62164ce7165Smrg
62264ce7165Smrg# Local Variables:
62364ce7165Smrg# mode: shell-script
62464ce7165Smrg# sh-indentation: 2
62564ce7165Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
62664ce7165Smrg# time-stamp-start: "scriptversion="
62764ce7165Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
628fb23d3a8Smrg# time-stamp-time-zone: "UTC"
629fb23d3a8Smrg# time-stamp-end: "; # UTC"
63064ce7165Smrg# End:
631