depcomp revision fffe5102
167f05d30Smrg#! /bin/sh
267f05d30Smrg# depcomp - compile a program generating dependencies as side-effects
3fffe5102Smrg
4fffe5102Smrgscriptversion=2009-04-28.21; # UTC
5fffe5102Smrg
6fffe5102Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
7fffe5102Smrg# Software Foundation, Inc.
867f05d30Smrg
967f05d30Smrg# This program is free software; you can redistribute it and/or modify
1067f05d30Smrg# it under the terms of the GNU General Public License as published by
1167f05d30Smrg# the Free Software Foundation; either version 2, or (at your option)
1267f05d30Smrg# any later version.
1367f05d30Smrg
1467f05d30Smrg# This program is distributed in the hope that it will be useful,
1567f05d30Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
1667f05d30Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1767f05d30Smrg# GNU General Public License for more details.
1867f05d30Smrg
1967f05d30Smrg# You should have received a copy of the GNU General Public License
20fffe5102Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
2167f05d30Smrg
2267f05d30Smrg# As a special exception to the GNU General Public License, if you
2367f05d30Smrg# distribute this file as part of a program that contains a
2467f05d30Smrg# configuration script generated by Autoconf, you may include it under
2567f05d30Smrg# the same distribution terms that you use for the rest of that program.
2667f05d30Smrg
2767f05d30Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
2867f05d30Smrg
29fffe5102Smrgcase $1 in
30fffe5102Smrg  '')
31fffe5102Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
32fffe5102Smrg     exit 1;
33fffe5102Smrg     ;;
34fffe5102Smrg  -h | --h*)
35fffe5102Smrg    cat <<\EOF
36fffe5102SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
37fffe5102Smrg
38fffe5102SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
39fffe5102Smrgas side-effects.
40fffe5102Smrg
41fffe5102SmrgEnvironment variables:
42fffe5102Smrg  depmode     Dependency tracking mode.
43fffe5102Smrg  source      Source file read by `PROGRAMS ARGS'.
44fffe5102Smrg  object      Object file output by `PROGRAMS ARGS'.
45fffe5102Smrg  DEPDIR      directory where to store dependencies.
46fffe5102Smrg  depfile     Dependency file to output.
47fffe5102Smrg  tmpdepfile  Temporary file to use when outputing dependencies.
48fffe5102Smrg  libtool     Whether libtool is used (yes/no).
49fffe5102Smrg
50fffe5102SmrgReport bugs to <bug-automake@gnu.org>.
51fffe5102SmrgEOF
52fffe5102Smrg    exit $?
53fffe5102Smrg    ;;
54fffe5102Smrg  -v | --v*)
55fffe5102Smrg    echo "depcomp $scriptversion"
56fffe5102Smrg    exit $?
57fffe5102Smrg    ;;
58fffe5102Smrgesac
59fffe5102Smrg
6067f05d30Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
6167f05d30Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
6267f05d30Smrg  exit 1
6367f05d30Smrgfi
6467f05d30Smrg
65fffe5102Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
66fffe5102Smrgdepfile=${depfile-`echo "$object" |
67fffe5102Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
6867f05d30Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
6967f05d30Smrg
7067f05d30Smrgrm -f "$tmpdepfile"
7167f05d30Smrg
7267f05d30Smrg# Some modes work just like other modes, but use different flags.  We
7367f05d30Smrg# parameterize here, but still list the modes in the big case below,
7467f05d30Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
7567f05d30Smrg# here, because this file can only contain one case statement.
7667f05d30Smrgif test "$depmode" = hp; then
7767f05d30Smrg  # HP compiler uses -M and no extra arg.
7867f05d30Smrg  gccflag=-M
7967f05d30Smrg  depmode=gcc
8067f05d30Smrgfi
8167f05d30Smrg
8267f05d30Smrgif test "$depmode" = dashXmstdout; then
8367f05d30Smrg   # This is just like dashmstdout with a different argument.
8467f05d30Smrg   dashmflag=-xM
8567f05d30Smrg   depmode=dashmstdout
8667f05d30Smrgfi
8767f05d30Smrg
88fffe5102Smrgcygpath_u="cygpath -u -f -"
89fffe5102Smrgif test "$depmode" = msvcmsys; then
90fffe5102Smrg   # This is just like msvisualcpp but w/o cygpath translation.
91fffe5102Smrg   # Just convert the backslash-escaped backslashes to single forward
92fffe5102Smrg   # slashes to satisfy depend.m4
93fffe5102Smrg   cygpath_u="sed s,\\\\\\\\,/,g"
94fffe5102Smrg   depmode=msvisualcpp
95fffe5102Smrgfi
96fffe5102Smrg
9767f05d30Smrgcase "$depmode" in
9867f05d30Smrggcc3)
9967f05d30Smrg## gcc 3 implements dependency tracking that does exactly what
10067f05d30Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
10167f05d30Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
102fffe5102Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
103fffe5102Smrg## the command line argument order; so add the flags where they
104fffe5102Smrg## appear in depend2.am.  Note that the slowdown incurred here
105fffe5102Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
106fffe5102Smrg  for arg
107fffe5102Smrg  do
108fffe5102Smrg    case $arg in
109fffe5102Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
110fffe5102Smrg    *)  set fnord "$@" "$arg" ;;
111fffe5102Smrg    esac
112fffe5102Smrg    shift # fnord
113fffe5102Smrg    shift # $arg
114fffe5102Smrg  done
115fffe5102Smrg  "$@"
11667f05d30Smrg  stat=$?
11767f05d30Smrg  if test $stat -eq 0; then :
11867f05d30Smrg  else
11967f05d30Smrg    rm -f "$tmpdepfile"
12067f05d30Smrg    exit $stat
12167f05d30Smrg  fi
12267f05d30Smrg  mv "$tmpdepfile" "$depfile"
12367f05d30Smrg  ;;
12467f05d30Smrg
12567f05d30Smrggcc)
12667f05d30Smrg## There are various ways to get dependency output from gcc.  Here's
12767f05d30Smrg## why we pick this rather obscure method:
12867f05d30Smrg## - Don't want to use -MD because we'd like the dependencies to end
12967f05d30Smrg##   up in a subdir.  Having to rename by hand is ugly.
13067f05d30Smrg##   (We might end up doing this anyway to support other compilers.)
13167f05d30Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
13267f05d30Smrg##   -MM, not -M (despite what the docs say).
13367f05d30Smrg## - Using -M directly means running the compiler twice (even worse
13467f05d30Smrg##   than renaming).
13567f05d30Smrg  if test -z "$gccflag"; then
13667f05d30Smrg    gccflag=-MD,
13767f05d30Smrg  fi
13867f05d30Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
13967f05d30Smrg  stat=$?
14067f05d30Smrg  if test $stat -eq 0; then :
14167f05d30Smrg  else
14267f05d30Smrg    rm -f "$tmpdepfile"
14367f05d30Smrg    exit $stat
14467f05d30Smrg  fi
14567f05d30Smrg  rm -f "$depfile"
14667f05d30Smrg  echo "$object : \\" > "$depfile"
14767f05d30Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
14867f05d30Smrg## The second -e expression handles DOS-style file names with drive letters.
14967f05d30Smrg  sed -e 's/^[^:]*: / /' \
15067f05d30Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
15167f05d30Smrg## This next piece of magic avoids the `deleted header file' problem.
15267f05d30Smrg## The problem is that when a header file which appears in a .P file
15367f05d30Smrg## is deleted, the dependency causes make to die (because there is
15467f05d30Smrg## typically no way to rebuild the header).  We avoid this by adding
15567f05d30Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
15667f05d30Smrg## this for us directly.
15767f05d30Smrg  tr ' ' '
15867f05d30Smrg' < "$tmpdepfile" |
15967f05d30Smrg## Some versions of gcc put a space before the `:'.  On the theory
16067f05d30Smrg## that the space means something, we add a space to the output as
16167f05d30Smrg## well.
16267f05d30Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
16367f05d30Smrg## correctly.  Breaking it into two sed invocations is a workaround.
16467f05d30Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
16567f05d30Smrg  rm -f "$tmpdepfile"
16667f05d30Smrg  ;;
16767f05d30Smrg
16867f05d30Smrghp)
16967f05d30Smrg  # This case exists only to let depend.m4 do its work.  It works by
17067f05d30Smrg  # looking at the text of this script.  This case will never be run,
17167f05d30Smrg  # since it is checked for above.
17267f05d30Smrg  exit 1
17367f05d30Smrg  ;;
17467f05d30Smrg
17567f05d30Smrgsgi)
17667f05d30Smrg  if test "$libtool" = yes; then
17767f05d30Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
17867f05d30Smrg  else
17967f05d30Smrg    "$@" -MDupdate "$tmpdepfile"
18067f05d30Smrg  fi
18167f05d30Smrg  stat=$?
18267f05d30Smrg  if test $stat -eq 0; then :
18367f05d30Smrg  else
18467f05d30Smrg    rm -f "$tmpdepfile"
18567f05d30Smrg    exit $stat
18667f05d30Smrg  fi
18767f05d30Smrg  rm -f "$depfile"
18867f05d30Smrg
18967f05d30Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
19067f05d30Smrg    echo "$object : \\" > "$depfile"
19167f05d30Smrg
19267f05d30Smrg    # Clip off the initial element (the dependent).  Don't try to be
19367f05d30Smrg    # clever and replace this with sed code, as IRIX sed won't handle
19467f05d30Smrg    # lines with more than a fixed number of characters (4096 in
19567f05d30Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
19667f05d30Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
19767f05d30Smrg    # dependency line.
19867f05d30Smrg    tr ' ' '
19967f05d30Smrg' < "$tmpdepfile" \
20067f05d30Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
20167f05d30Smrg    tr '
202fffe5102Smrg' ' ' >> "$depfile"
203fffe5102Smrg    echo >> "$depfile"
20467f05d30Smrg
20567f05d30Smrg    # The second pass generates a dummy entry for each header file.
20667f05d30Smrg    tr ' ' '
20767f05d30Smrg' < "$tmpdepfile" \
20867f05d30Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
209fffe5102Smrg   >> "$depfile"
21067f05d30Smrg  else
21167f05d30Smrg    # The sourcefile does not contain any dependencies, so just
21267f05d30Smrg    # store a dummy comment line, to avoid errors with the Makefile
21367f05d30Smrg    # "include basename.Plo" scheme.
21467f05d30Smrg    echo "#dummy" > "$depfile"
21567f05d30Smrg  fi
21667f05d30Smrg  rm -f "$tmpdepfile"
21767f05d30Smrg  ;;
21867f05d30Smrg
21967f05d30Smrgaix)
22067f05d30Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
22167f05d30Smrg  # in a .u file.  In older versions, this file always lives in the
22267f05d30Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
22367f05d30Smrg  # start of each line; $object doesn't have directory information.
22467f05d30Smrg  # Version 6 uses the directory in both cases.
225fffe5102Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
226fffe5102Smrg  test "x$dir" = "x$object" && dir=
227fffe5102Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
22867f05d30Smrg  if test "$libtool" = yes; then
229fffe5102Smrg    tmpdepfile1=$dir$base.u
230fffe5102Smrg    tmpdepfile2=$base.u
231fffe5102Smrg    tmpdepfile3=$dir.libs/$base.u
23267f05d30Smrg    "$@" -Wc,-M
23367f05d30Smrg  else
234fffe5102Smrg    tmpdepfile1=$dir$base.u
235fffe5102Smrg    tmpdepfile2=$dir$base.u
236fffe5102Smrg    tmpdepfile3=$dir$base.u
23767f05d30Smrg    "$@" -M
23867f05d30Smrg  fi
23967f05d30Smrg  stat=$?
24067f05d30Smrg
24167f05d30Smrg  if test $stat -eq 0; then :
24267f05d30Smrg  else
243fffe5102Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
24467f05d30Smrg    exit $stat
24567f05d30Smrg  fi
24667f05d30Smrg
247fffe5102Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
248fffe5102Smrg  do
249fffe5102Smrg    test -f "$tmpdepfile" && break
250fffe5102Smrg  done
25167f05d30Smrg  if test -f "$tmpdepfile"; then
25267f05d30Smrg    # Each line is of the form `foo.o: dependent.h'.
25367f05d30Smrg    # Do two passes, one to just change these to
25467f05d30Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
255fffe5102Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
256fffe5102Smrg    # That's a tab and a space in the [].
257fffe5102Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
25867f05d30Smrg  else
25967f05d30Smrg    # The sourcefile does not contain any dependencies, so just
26067f05d30Smrg    # store a dummy comment line, to avoid errors with the Makefile
26167f05d30Smrg    # "include basename.Plo" scheme.
26267f05d30Smrg    echo "#dummy" > "$depfile"
26367f05d30Smrg  fi
26467f05d30Smrg  rm -f "$tmpdepfile"
26567f05d30Smrg  ;;
26667f05d30Smrg
26767f05d30Smrgicc)
26867f05d30Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
26967f05d30Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
27067f05d30Smrg  # ICC 7.0 will fill foo.d with something like
27167f05d30Smrg  #    foo.o: sub/foo.c
27267f05d30Smrg  #    foo.o: sub/foo.h
27367f05d30Smrg  # which is wrong.  We want:
27467f05d30Smrg  #    sub/foo.o: sub/foo.c
27567f05d30Smrg  #    sub/foo.o: sub/foo.h
27667f05d30Smrg  #    sub/foo.c:
27767f05d30Smrg  #    sub/foo.h:
27867f05d30Smrg  # ICC 7.1 will output
27967f05d30Smrg  #    foo.o: sub/foo.c sub/foo.h
28067f05d30Smrg  # and will wrap long lines using \ :
28167f05d30Smrg  #    foo.o: sub/foo.c ... \
28267f05d30Smrg  #     sub/foo.h ... \
28367f05d30Smrg  #     ...
28467f05d30Smrg
28567f05d30Smrg  "$@" -MD -MF "$tmpdepfile"
28667f05d30Smrg  stat=$?
28767f05d30Smrg  if test $stat -eq 0; then :
28867f05d30Smrg  else
28967f05d30Smrg    rm -f "$tmpdepfile"
29067f05d30Smrg    exit $stat
29167f05d30Smrg  fi
29267f05d30Smrg  rm -f "$depfile"
29367f05d30Smrg  # Each line is of the form `foo.o: dependent.h',
29467f05d30Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
29567f05d30Smrg  # Do two passes, one to just change these to
29667f05d30Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
29767f05d30Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
29867f05d30Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
29967f05d30Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
30067f05d30Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
30167f05d30Smrg    sed -e 's/$/ :/' >> "$depfile"
30267f05d30Smrg  rm -f "$tmpdepfile"
30367f05d30Smrg  ;;
30467f05d30Smrg
305fffe5102Smrghp2)
306fffe5102Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
307fffe5102Smrg  # compilers, which have integrated preprocessors.  The correct option
308fffe5102Smrg  # to use with these is +Maked; it writes dependencies to a file named
309fffe5102Smrg  # 'foo.d', which lands next to the object file, wherever that
310fffe5102Smrg  # happens to be.
311fffe5102Smrg  # Much of this is similar to the tru64 case; see comments there.
312fffe5102Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
313fffe5102Smrg  test "x$dir" = "x$object" && dir=
314fffe5102Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
315fffe5102Smrg  if test "$libtool" = yes; then
316fffe5102Smrg    tmpdepfile1=$dir$base.d
317fffe5102Smrg    tmpdepfile2=$dir.libs/$base.d
318fffe5102Smrg    "$@" -Wc,+Maked
319fffe5102Smrg  else
320fffe5102Smrg    tmpdepfile1=$dir$base.d
321fffe5102Smrg    tmpdepfile2=$dir$base.d
322fffe5102Smrg    "$@" +Maked
323fffe5102Smrg  fi
324fffe5102Smrg  stat=$?
325fffe5102Smrg  if test $stat -eq 0; then :
326fffe5102Smrg  else
327fffe5102Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
328fffe5102Smrg     exit $stat
329fffe5102Smrg  fi
330fffe5102Smrg
331fffe5102Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
332fffe5102Smrg  do
333fffe5102Smrg    test -f "$tmpdepfile" && break
334fffe5102Smrg  done
335fffe5102Smrg  if test -f "$tmpdepfile"; then
336fffe5102Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
337fffe5102Smrg    # Add `dependent.h:' lines.
338fffe5102Smrg    sed -ne '2,${
339fffe5102Smrg	       s/^ *//
340fffe5102Smrg	       s/ \\*$//
341fffe5102Smrg	       s/$/:/
342fffe5102Smrg	       p
343fffe5102Smrg	     }' "$tmpdepfile" >> "$depfile"
344fffe5102Smrg  else
345fffe5102Smrg    echo "#dummy" > "$depfile"
346fffe5102Smrg  fi
347fffe5102Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
348fffe5102Smrg  ;;
349fffe5102Smrg
35067f05d30Smrgtru64)
35167f05d30Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
35267f05d30Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
35367f05d30Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
35467f05d30Smrg   # dependencies in `foo.d' instead, so we check for that too.
35567f05d30Smrg   # Subdirectories are respected.
35667f05d30Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
35767f05d30Smrg   test "x$dir" = "x$object" && dir=
35867f05d30Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
35967f05d30Smrg
36067f05d30Smrg   if test "$libtool" = yes; then
361fffe5102Smrg      # With Tru64 cc, shared objects can also be used to make a
362fffe5102Smrg      # static library.  This mechanism is used in libtool 1.4 series to
363fffe5102Smrg      # handle both shared and static libraries in a single compilation.
364fffe5102Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
365fffe5102Smrg      #
366fffe5102Smrg      # With libtool 1.5 this exception was removed, and libtool now
367fffe5102Smrg      # generates 2 separate objects for the 2 libraries.  These two
368fffe5102Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
369fffe5102Smrg      # in $dir$base.o.d.  We have to check for both files, because
370fffe5102Smrg      # one of the two compilations can be disabled.  We should prefer
371fffe5102Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
372fffe5102Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
373fffe5102Smrg      # the former would cause a distcleancheck panic.
374fffe5102Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
375fffe5102Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
376fffe5102Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
377fffe5102Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
37867f05d30Smrg      "$@" -Wc,-MD
37967f05d30Smrg   else
380fffe5102Smrg      tmpdepfile1=$dir$base.o.d
381fffe5102Smrg      tmpdepfile2=$dir$base.d
382fffe5102Smrg      tmpdepfile3=$dir$base.d
383fffe5102Smrg      tmpdepfile4=$dir$base.d
38467f05d30Smrg      "$@" -MD
38567f05d30Smrg   fi
38667f05d30Smrg
38767f05d30Smrg   stat=$?
38867f05d30Smrg   if test $stat -eq 0; then :
38967f05d30Smrg   else
390fffe5102Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
39167f05d30Smrg      exit $stat
39267f05d30Smrg   fi
39367f05d30Smrg
394fffe5102Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
395fffe5102Smrg   do
396fffe5102Smrg     test -f "$tmpdepfile" && break
397fffe5102Smrg   done
39867f05d30Smrg   if test -f "$tmpdepfile"; then
39967f05d30Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
40067f05d30Smrg      # That's a tab and a space in the [].
40167f05d30Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
40267f05d30Smrg   else
40367f05d30Smrg      echo "#dummy" > "$depfile"
40467f05d30Smrg   fi
40567f05d30Smrg   rm -f "$tmpdepfile"
40667f05d30Smrg   ;;
40767f05d30Smrg
40867f05d30Smrg#nosideeffect)
40967f05d30Smrg  # This comment above is used by automake to tell side-effect
41067f05d30Smrg  # dependency tracking mechanisms from slower ones.
41167f05d30Smrg
41267f05d30Smrgdashmstdout)
41367f05d30Smrg  # Important note: in order to support this mode, a compiler *must*
41467f05d30Smrg  # always write the preprocessed file to stdout, regardless of -o.
41567f05d30Smrg  "$@" || exit $?
41667f05d30Smrg
41767f05d30Smrg  # Remove the call to Libtool.
41867f05d30Smrg  if test "$libtool" = yes; then
419fffe5102Smrg    while test "X$1" != 'X--mode=compile'; do
42067f05d30Smrg      shift
42167f05d30Smrg    done
42267f05d30Smrg    shift
42367f05d30Smrg  fi
42467f05d30Smrg
42567f05d30Smrg  # Remove `-o $object'.
42667f05d30Smrg  IFS=" "
42767f05d30Smrg  for arg
42867f05d30Smrg  do
42967f05d30Smrg    case $arg in
43067f05d30Smrg    -o)
43167f05d30Smrg      shift
43267f05d30Smrg      ;;
43367f05d30Smrg    $object)
43467f05d30Smrg      shift
43567f05d30Smrg      ;;
43667f05d30Smrg    *)
43767f05d30Smrg      set fnord "$@" "$arg"
43867f05d30Smrg      shift # fnord
43967f05d30Smrg      shift # $arg
44067f05d30Smrg      ;;
44167f05d30Smrg    esac
44267f05d30Smrg  done
44367f05d30Smrg
44467f05d30Smrg  test -z "$dashmflag" && dashmflag=-M
44567f05d30Smrg  # Require at least two characters before searching for `:'
44667f05d30Smrg  # in the target name.  This is to cope with DOS-style filenames:
44767f05d30Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
44867f05d30Smrg  "$@" $dashmflag |
44967f05d30Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
45067f05d30Smrg  rm -f "$depfile"
45167f05d30Smrg  cat < "$tmpdepfile" > "$depfile"
45267f05d30Smrg  tr ' ' '
45367f05d30Smrg' < "$tmpdepfile" | \
45467f05d30Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
45567f05d30Smrg## correctly.  Breaking it into two sed invocations is a workaround.
45667f05d30Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
45767f05d30Smrg  rm -f "$tmpdepfile"
45867f05d30Smrg  ;;
45967f05d30Smrg
46067f05d30SmrgdashXmstdout)
46167f05d30Smrg  # This case only exists to satisfy depend.m4.  It is never actually
46267f05d30Smrg  # run, as this mode is specially recognized in the preamble.
46367f05d30Smrg  exit 1
46467f05d30Smrg  ;;
46567f05d30Smrg
46667f05d30Smrgmakedepend)
46767f05d30Smrg  "$@" || exit $?
46867f05d30Smrg  # Remove any Libtool call
46967f05d30Smrg  if test "$libtool" = yes; then
470fffe5102Smrg    while test "X$1" != 'X--mode=compile'; do
47167f05d30Smrg      shift
47267f05d30Smrg    done
47367f05d30Smrg    shift
47467f05d30Smrg  fi
47567f05d30Smrg  # X makedepend
47667f05d30Smrg  shift
477fffe5102Smrg  cleared=no eat=no
478fffe5102Smrg  for arg
479fffe5102Smrg  do
48067f05d30Smrg    case $cleared in
48167f05d30Smrg    no)
48267f05d30Smrg      set ""; shift
48367f05d30Smrg      cleared=yes ;;
48467f05d30Smrg    esac
485fffe5102Smrg    if test $eat = yes; then
486fffe5102Smrg      eat=no
487fffe5102Smrg      continue
488fffe5102Smrg    fi
48967f05d30Smrg    case "$arg" in
49067f05d30Smrg    -D*|-I*)
49167f05d30Smrg      set fnord "$@" "$arg"; shift ;;
49267f05d30Smrg    # Strip any option that makedepend may not understand.  Remove
49367f05d30Smrg    # the object too, otherwise makedepend will parse it as a source file.
494fffe5102Smrg    -arch)
495fffe5102Smrg      eat=yes ;;
49667f05d30Smrg    -*|$object)
49767f05d30Smrg      ;;
49867f05d30Smrg    *)
49967f05d30Smrg      set fnord "$@" "$arg"; shift ;;
50067f05d30Smrg    esac
50167f05d30Smrg  done
502fffe5102Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
50367f05d30Smrg  touch "$tmpdepfile"
50467f05d30Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
50567f05d30Smrg  rm -f "$depfile"
50667f05d30Smrg  cat < "$tmpdepfile" > "$depfile"
50767f05d30Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
50867f05d30Smrg' | \
50967f05d30Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
51067f05d30Smrg## correctly.  Breaking it into two sed invocations is a workaround.
51167f05d30Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
51267f05d30Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
51367f05d30Smrg  ;;
51467f05d30Smrg
51567f05d30Smrgcpp)
51667f05d30Smrg  # Important note: in order to support this mode, a compiler *must*
51767f05d30Smrg  # always write the preprocessed file to stdout.
51867f05d30Smrg  "$@" || exit $?
51967f05d30Smrg
52067f05d30Smrg  # Remove the call to Libtool.
52167f05d30Smrg  if test "$libtool" = yes; then
522fffe5102Smrg    while test "X$1" != 'X--mode=compile'; do
52367f05d30Smrg      shift
52467f05d30Smrg    done
52567f05d30Smrg    shift
52667f05d30Smrg  fi
52767f05d30Smrg
52867f05d30Smrg  # Remove `-o $object'.
52967f05d30Smrg  IFS=" "
53067f05d30Smrg  for arg
53167f05d30Smrg  do
53267f05d30Smrg    case $arg in
53367f05d30Smrg    -o)
53467f05d30Smrg      shift
53567f05d30Smrg      ;;
53667f05d30Smrg    $object)
53767f05d30Smrg      shift
53867f05d30Smrg      ;;
53967f05d30Smrg    *)
54067f05d30Smrg      set fnord "$@" "$arg"
54167f05d30Smrg      shift # fnord
54267f05d30Smrg      shift # $arg
54367f05d30Smrg      ;;
54467f05d30Smrg    esac
54567f05d30Smrg  done
54667f05d30Smrg
54767f05d30Smrg  "$@" -E |
548fffe5102Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
549fffe5102Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
55067f05d30Smrg    sed '$ s: \\$::' > "$tmpdepfile"
55167f05d30Smrg  rm -f "$depfile"
55267f05d30Smrg  echo "$object : \\" > "$depfile"
55367f05d30Smrg  cat < "$tmpdepfile" >> "$depfile"
55467f05d30Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
55567f05d30Smrg  rm -f "$tmpdepfile"
55667f05d30Smrg  ;;
55767f05d30Smrg
55867f05d30Smrgmsvisualcpp)
55967f05d30Smrg  # Important note: in order to support this mode, a compiler *must*
560fffe5102Smrg  # always write the preprocessed file to stdout.
56167f05d30Smrg  "$@" || exit $?
562fffe5102Smrg
563fffe5102Smrg  # Remove the call to Libtool.
564fffe5102Smrg  if test "$libtool" = yes; then
565fffe5102Smrg    while test "X$1" != 'X--mode=compile'; do
566fffe5102Smrg      shift
567fffe5102Smrg    done
568fffe5102Smrg    shift
569fffe5102Smrg  fi
570fffe5102Smrg
57167f05d30Smrg  IFS=" "
57267f05d30Smrg  for arg
57367f05d30Smrg  do
57467f05d30Smrg    case "$arg" in
575fffe5102Smrg    -o)
576fffe5102Smrg      shift
577fffe5102Smrg      ;;
578fffe5102Smrg    $object)
579fffe5102Smrg      shift
580fffe5102Smrg      ;;
58167f05d30Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
58267f05d30Smrg	set fnord "$@"
58367f05d30Smrg	shift
58467f05d30Smrg	shift
58567f05d30Smrg	;;
58667f05d30Smrg    *)
58767f05d30Smrg	set fnord "$@" "$arg"
58867f05d30Smrg	shift
58967f05d30Smrg	shift
59067f05d30Smrg	;;
59167f05d30Smrg    esac
59267f05d30Smrg  done
593fffe5102Smrg  "$@" -E 2>/dev/null |
594fffe5102Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
59567f05d30Smrg  rm -f "$depfile"
59667f05d30Smrg  echo "$object : \\" > "$depfile"
597fffe5102Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
59867f05d30Smrg  echo "	" >> "$depfile"
599fffe5102Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
60067f05d30Smrg  rm -f "$tmpdepfile"
60167f05d30Smrg  ;;
60267f05d30Smrg
603fffe5102Smrgmsvcmsys)
604fffe5102Smrg  # This case exists only to let depend.m4 do its work.  It works by
605fffe5102Smrg  # looking at the text of this script.  This case will never be run,
606fffe5102Smrg  # since it is checked for above.
607fffe5102Smrg  exit 1
608fffe5102Smrg  ;;
609fffe5102Smrg
61067f05d30Smrgnone)
61167f05d30Smrg  exec "$@"
61267f05d30Smrg  ;;
61367f05d30Smrg
61467f05d30Smrg*)
61567f05d30Smrg  echo "Unknown depmode $depmode" 1>&2
61667f05d30Smrg  exit 1
61767f05d30Smrg  ;;
61867f05d30Smrgesac
61967f05d30Smrg
62067f05d30Smrgexit 0
621fffe5102Smrg
622fffe5102Smrg# Local Variables:
623fffe5102Smrg# mode: shell-script
624fffe5102Smrg# sh-indentation: 2
625fffe5102Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
626fffe5102Smrg# time-stamp-start: "scriptversion="
627fffe5102Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
628fffe5102Smrg# time-stamp-time-zone: "UTC"
629fffe5102Smrg# time-stamp-end: "; # UTC"
630fffe5102Smrg# End:
631