depcomp revision 909209ee
102be438aSmrg#! /bin/sh
202be438aSmrg# depcomp - compile a program generating dependencies as side-effects
302be438aSmrg
4909209eeSmrgscriptversion=2011-12-04.11; # UTC
502be438aSmrg
6909209eeSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
7909209eeSmrg# 2011 Free Software Foundation, Inc.
802be438aSmrg
902be438aSmrg# This program is free software; you can redistribute it and/or modify
1002be438aSmrg# it under the terms of the GNU General Public License as published by
1102be438aSmrg# the Free Software Foundation; either version 2, or (at your option)
1202be438aSmrg# any later version.
1302be438aSmrg
1402be438aSmrg# This program is distributed in the hope that it will be useful,
1502be438aSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
1602be438aSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1702be438aSmrg# GNU General Public License for more details.
1802be438aSmrg
1902be438aSmrg# You should have received a copy of the GNU General Public License
2061dc2d86Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
2102be438aSmrg
2202be438aSmrg# As a special exception to the GNU General Public License, if you
2302be438aSmrg# distribute this file as part of a program that contains a
2402be438aSmrg# configuration script generated by Autoconf, you may include it under
2502be438aSmrg# the same distribution terms that you use for the rest of that program.
2602be438aSmrg
2702be438aSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
2802be438aSmrg
2902be438aSmrgcase $1 in
3002be438aSmrg  '')
3102be438aSmrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
3202be438aSmrg     exit 1;
3302be438aSmrg     ;;
3402be438aSmrg  -h | --h*)
3502be438aSmrg    cat <<\EOF
3602be438aSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
3702be438aSmrg
3802be438aSmrgRun PROGRAMS ARGS to compile a file, generating dependencies
3902be438aSmrgas side-effects.
4002be438aSmrg
4102be438aSmrgEnvironment variables:
4202be438aSmrg  depmode     Dependency tracking mode.
4302be438aSmrg  source      Source file read by `PROGRAMS ARGS'.
4402be438aSmrg  object      Object file output by `PROGRAMS ARGS'.
4502be438aSmrg  DEPDIR      directory where to store dependencies.
4602be438aSmrg  depfile     Dependency file to output.
47909209eeSmrg  tmpdepfile  Temporary file to use when outputting dependencies.
4802be438aSmrg  libtool     Whether libtool is used (yes/no).
4902be438aSmrg
5002be438aSmrgReport bugs to <bug-automake@gnu.org>.
5102be438aSmrgEOF
5202be438aSmrg    exit $?
5302be438aSmrg    ;;
5402be438aSmrg  -v | --v*)
5502be438aSmrg    echo "depcomp $scriptversion"
5602be438aSmrg    exit $?
5702be438aSmrg    ;;
5802be438aSmrgesac
5902be438aSmrg
6002be438aSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
6102be438aSmrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
6202be438aSmrg  exit 1
6302be438aSmrgfi
6402be438aSmrg
6502be438aSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
6602be438aSmrgdepfile=${depfile-`echo "$object" |
6702be438aSmrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
6802be438aSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
6902be438aSmrg
7002be438aSmrgrm -f "$tmpdepfile"
7102be438aSmrg
7202be438aSmrg# Some modes work just like other modes, but use different flags.  We
7302be438aSmrg# parameterize here, but still list the modes in the big case below,
7402be438aSmrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
7502be438aSmrg# here, because this file can only contain one case statement.
7602be438aSmrgif test "$depmode" = hp; then
7702be438aSmrg  # HP compiler uses -M and no extra arg.
7802be438aSmrg  gccflag=-M
7902be438aSmrg  depmode=gcc
8002be438aSmrgfi
8102be438aSmrg
8202be438aSmrgif test "$depmode" = dashXmstdout; then
8302be438aSmrg   # This is just like dashmstdout with a different argument.
8402be438aSmrg   dashmflag=-xM
8502be438aSmrg   depmode=dashmstdout
8602be438aSmrgfi
8702be438aSmrg
8861dc2d86Smrgcygpath_u="cygpath -u -f -"
8961dc2d86Smrgif test "$depmode" = msvcmsys; then
9061dc2d86Smrg   # This is just like msvisualcpp but w/o cygpath translation.
9161dc2d86Smrg   # Just convert the backslash-escaped backslashes to single forward
9261dc2d86Smrg   # slashes to satisfy depend.m4
93909209eeSmrg   cygpath_u='sed s,\\\\,/,g'
9461dc2d86Smrg   depmode=msvisualcpp
9561dc2d86Smrgfi
9661dc2d86Smrg
97909209eeSmrgif test "$depmode" = msvc7msys; then
98909209eeSmrg   # This is just like msvc7 but w/o cygpath translation.
99909209eeSmrg   # Just convert the backslash-escaped backslashes to single forward
100909209eeSmrg   # slashes to satisfy depend.m4
101909209eeSmrg   cygpath_u='sed s,\\\\,/,g'
102909209eeSmrg   depmode=msvc7
103909209eeSmrgfi
104909209eeSmrg
10502be438aSmrgcase "$depmode" in
10602be438aSmrggcc3)
10702be438aSmrg## gcc 3 implements dependency tracking that does exactly what
10802be438aSmrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
10902be438aSmrg## it if -MD -MP comes after the -MF stuff.  Hmm.
110880ed95aSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
111880ed95aSmrg## the command line argument order; so add the flags where they
112880ed95aSmrg## appear in depend2.am.  Note that the slowdown incurred here
113880ed95aSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
114880ed95aSmrg  for arg
115880ed95aSmrg  do
116880ed95aSmrg    case $arg in
117880ed95aSmrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
118880ed95aSmrg    *)  set fnord "$@" "$arg" ;;
119880ed95aSmrg    esac
120880ed95aSmrg    shift # fnord
121880ed95aSmrg    shift # $arg
122880ed95aSmrg  done
123880ed95aSmrg  "$@"
12402be438aSmrg  stat=$?
12502be438aSmrg  if test $stat -eq 0; then :
12602be438aSmrg  else
12702be438aSmrg    rm -f "$tmpdepfile"
12802be438aSmrg    exit $stat
12902be438aSmrg  fi
13002be438aSmrg  mv "$tmpdepfile" "$depfile"
13102be438aSmrg  ;;
13202be438aSmrg
13302be438aSmrggcc)
13402be438aSmrg## There are various ways to get dependency output from gcc.  Here's
13502be438aSmrg## why we pick this rather obscure method:
13602be438aSmrg## - Don't want to use -MD because we'd like the dependencies to end
13702be438aSmrg##   up in a subdir.  Having to rename by hand is ugly.
13802be438aSmrg##   (We might end up doing this anyway to support other compilers.)
13902be438aSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
14002be438aSmrg##   -MM, not -M (despite what the docs say).
14102be438aSmrg## - Using -M directly means running the compiler twice (even worse
14202be438aSmrg##   than renaming).
14302be438aSmrg  if test -z "$gccflag"; then
14402be438aSmrg    gccflag=-MD,
14502be438aSmrg  fi
14602be438aSmrg  "$@" -Wp,"$gccflag$tmpdepfile"
14702be438aSmrg  stat=$?
14802be438aSmrg  if test $stat -eq 0; then :
14902be438aSmrg  else
15002be438aSmrg    rm -f "$tmpdepfile"
15102be438aSmrg    exit $stat
15202be438aSmrg  fi
15302be438aSmrg  rm -f "$depfile"
15402be438aSmrg  echo "$object : \\" > "$depfile"
15502be438aSmrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
15602be438aSmrg## The second -e expression handles DOS-style file names with drive letters.
15702be438aSmrg  sed -e 's/^[^:]*: / /' \
15802be438aSmrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
15902be438aSmrg## This next piece of magic avoids the `deleted header file' problem.
16002be438aSmrg## The problem is that when a header file which appears in a .P file
16102be438aSmrg## is deleted, the dependency causes make to die (because there is
16202be438aSmrg## typically no way to rebuild the header).  We avoid this by adding
16302be438aSmrg## dummy dependencies for each header file.  Too bad gcc doesn't do
16402be438aSmrg## this for us directly.
16502be438aSmrg  tr ' ' '
16602be438aSmrg' < "$tmpdepfile" |
16702be438aSmrg## Some versions of gcc put a space before the `:'.  On the theory
16802be438aSmrg## that the space means something, we add a space to the output as
169909209eeSmrg## well.  hp depmode also adds that space, but also prefixes the VPATH
170909209eeSmrg## to the object.  Take care to not repeat it in the output.
17102be438aSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
17202be438aSmrg## correctly.  Breaking it into two sed invocations is a workaround.
173909209eeSmrg    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
174909209eeSmrg      | sed -e 's/$/ :/' >> "$depfile"
17502be438aSmrg  rm -f "$tmpdepfile"
17602be438aSmrg  ;;
17702be438aSmrg
17802be438aSmrghp)
17902be438aSmrg  # This case exists only to let depend.m4 do its work.  It works by
18002be438aSmrg  # looking at the text of this script.  This case will never be run,
18102be438aSmrg  # since it is checked for above.
18202be438aSmrg  exit 1
18302be438aSmrg  ;;
18402be438aSmrg
18502be438aSmrgsgi)
18602be438aSmrg  if test "$libtool" = yes; then
18702be438aSmrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
18802be438aSmrg  else
18902be438aSmrg    "$@" -MDupdate "$tmpdepfile"
19002be438aSmrg  fi
19102be438aSmrg  stat=$?
19202be438aSmrg  if test $stat -eq 0; then :
19302be438aSmrg  else
19402be438aSmrg    rm -f "$tmpdepfile"
19502be438aSmrg    exit $stat
19602be438aSmrg  fi
19702be438aSmrg  rm -f "$depfile"
19802be438aSmrg
19902be438aSmrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
20002be438aSmrg    echo "$object : \\" > "$depfile"
20102be438aSmrg
20202be438aSmrg    # Clip off the initial element (the dependent).  Don't try to be
20302be438aSmrg    # clever and replace this with sed code, as IRIX sed won't handle
20402be438aSmrg    # lines with more than a fixed number of characters (4096 in
20502be438aSmrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
20602be438aSmrg    # the IRIX cc adds comments like `#:fec' to the end of the
20702be438aSmrg    # dependency line.
20802be438aSmrg    tr ' ' '
20902be438aSmrg' < "$tmpdepfile" \
21002be438aSmrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
21102be438aSmrg    tr '
21261dc2d86Smrg' ' ' >> "$depfile"
21361dc2d86Smrg    echo >> "$depfile"
21402be438aSmrg
21502be438aSmrg    # The second pass generates a dummy entry for each header file.
21602be438aSmrg    tr ' ' '
21702be438aSmrg' < "$tmpdepfile" \
21802be438aSmrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
21961dc2d86Smrg   >> "$depfile"
22002be438aSmrg  else
22102be438aSmrg    # The sourcefile does not contain any dependencies, so just
22202be438aSmrg    # store a dummy comment line, to avoid errors with the Makefile
22302be438aSmrg    # "include basename.Plo" scheme.
22402be438aSmrg    echo "#dummy" > "$depfile"
22502be438aSmrg  fi
22602be438aSmrg  rm -f "$tmpdepfile"
22702be438aSmrg  ;;
22802be438aSmrg
22902be438aSmrgaix)
23002be438aSmrg  # The C for AIX Compiler uses -M and outputs the dependencies
23102be438aSmrg  # in a .u file.  In older versions, this file always lives in the
23202be438aSmrg  # current directory.  Also, the AIX compiler puts `$object:' at the
23302be438aSmrg  # start of each line; $object doesn't have directory information.
23402be438aSmrg  # Version 6 uses the directory in both cases.
235880ed95aSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
236880ed95aSmrg  test "x$dir" = "x$object" && dir=
237880ed95aSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
23802be438aSmrg  if test "$libtool" = yes; then
239880ed95aSmrg    tmpdepfile1=$dir$base.u
240880ed95aSmrg    tmpdepfile2=$base.u
241880ed95aSmrg    tmpdepfile3=$dir.libs/$base.u
24202be438aSmrg    "$@" -Wc,-M
24302be438aSmrg  else
244880ed95aSmrg    tmpdepfile1=$dir$base.u
245880ed95aSmrg    tmpdepfile2=$dir$base.u
246880ed95aSmrg    tmpdepfile3=$dir$base.u
24702be438aSmrg    "$@" -M
24802be438aSmrg  fi
24902be438aSmrg  stat=$?
25002be438aSmrg
25102be438aSmrg  if test $stat -eq 0; then :
25202be438aSmrg  else
253880ed95aSmrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
25402be438aSmrg    exit $stat
25502be438aSmrg  fi
25602be438aSmrg
257880ed95aSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
258880ed95aSmrg  do
259880ed95aSmrg    test -f "$tmpdepfile" && break
260880ed95aSmrg  done
26102be438aSmrg  if test -f "$tmpdepfile"; then
26202be438aSmrg    # Each line is of the form `foo.o: dependent.h'.
26302be438aSmrg    # Do two passes, one to just change these to
26402be438aSmrg    # `$object: dependent.h' and one to simply `dependent.h:'.
265880ed95aSmrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
266880ed95aSmrg    # That's a tab and a space in the [].
267880ed95aSmrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
26802be438aSmrg  else
26902be438aSmrg    # The sourcefile does not contain any dependencies, so just
27002be438aSmrg    # store a dummy comment line, to avoid errors with the Makefile
27102be438aSmrg    # "include basename.Plo" scheme.
27202be438aSmrg    echo "#dummy" > "$depfile"
27302be438aSmrg  fi
27402be438aSmrg  rm -f "$tmpdepfile"
27502be438aSmrg  ;;
27602be438aSmrg
27702be438aSmrgicc)
27802be438aSmrg  # Intel's C compiler understands `-MD -MF file'.  However on
27902be438aSmrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
28002be438aSmrg  # ICC 7.0 will fill foo.d with something like
28102be438aSmrg  #    foo.o: sub/foo.c
28202be438aSmrg  #    foo.o: sub/foo.h
28302be438aSmrg  # which is wrong.  We want:
28402be438aSmrg  #    sub/foo.o: sub/foo.c
28502be438aSmrg  #    sub/foo.o: sub/foo.h
28602be438aSmrg  #    sub/foo.c:
28702be438aSmrg  #    sub/foo.h:
28802be438aSmrg  # ICC 7.1 will output
28902be438aSmrg  #    foo.o: sub/foo.c sub/foo.h
29002be438aSmrg  # and will wrap long lines using \ :
29102be438aSmrg  #    foo.o: sub/foo.c ... \
29202be438aSmrg  #     sub/foo.h ... \
29302be438aSmrg  #     ...
29402be438aSmrg
29502be438aSmrg  "$@" -MD -MF "$tmpdepfile"
29602be438aSmrg  stat=$?
29702be438aSmrg  if test $stat -eq 0; then :
29802be438aSmrg  else
29902be438aSmrg    rm -f "$tmpdepfile"
30002be438aSmrg    exit $stat
30102be438aSmrg  fi
30202be438aSmrg  rm -f "$depfile"
30302be438aSmrg  # Each line is of the form `foo.o: dependent.h',
30402be438aSmrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
30502be438aSmrg  # Do two passes, one to just change these to
30602be438aSmrg  # `$object: dependent.h' and one to simply `dependent.h:'.
30702be438aSmrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
30802be438aSmrg  # Some versions of the HPUX 10.20 sed can't process this invocation
30902be438aSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
31002be438aSmrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
31102be438aSmrg    sed -e 's/$/ :/' >> "$depfile"
31202be438aSmrg  rm -f "$tmpdepfile"
31302be438aSmrg  ;;
31402be438aSmrg
315880ed95aSmrghp2)
316880ed95aSmrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
317880ed95aSmrg  # compilers, which have integrated preprocessors.  The correct option
318880ed95aSmrg  # to use with these is +Maked; it writes dependencies to a file named
319880ed95aSmrg  # 'foo.d', which lands next to the object file, wherever that
320880ed95aSmrg  # happens to be.
321880ed95aSmrg  # Much of this is similar to the tru64 case; see comments there.
322880ed95aSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
323880ed95aSmrg  test "x$dir" = "x$object" && dir=
324880ed95aSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
325880ed95aSmrg  if test "$libtool" = yes; then
326880ed95aSmrg    tmpdepfile1=$dir$base.d
327880ed95aSmrg    tmpdepfile2=$dir.libs/$base.d
328880ed95aSmrg    "$@" -Wc,+Maked
329880ed95aSmrg  else
330880ed95aSmrg    tmpdepfile1=$dir$base.d
331880ed95aSmrg    tmpdepfile2=$dir$base.d
332880ed95aSmrg    "$@" +Maked
333880ed95aSmrg  fi
334880ed95aSmrg  stat=$?
335880ed95aSmrg  if test $stat -eq 0; then :
336880ed95aSmrg  else
337880ed95aSmrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
338880ed95aSmrg     exit $stat
339880ed95aSmrg  fi
340880ed95aSmrg
341880ed95aSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
342880ed95aSmrg  do
343880ed95aSmrg    test -f "$tmpdepfile" && break
344880ed95aSmrg  done
345880ed95aSmrg  if test -f "$tmpdepfile"; then
346880ed95aSmrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
347880ed95aSmrg    # Add `dependent.h:' lines.
34861dc2d86Smrg    sed -ne '2,${
34961dc2d86Smrg	       s/^ *//
35061dc2d86Smrg	       s/ \\*$//
35161dc2d86Smrg	       s/$/:/
35261dc2d86Smrg	       p
35361dc2d86Smrg	     }' "$tmpdepfile" >> "$depfile"
354880ed95aSmrg  else
355880ed95aSmrg    echo "#dummy" > "$depfile"
356880ed95aSmrg  fi
357880ed95aSmrg  rm -f "$tmpdepfile" "$tmpdepfile2"
358880ed95aSmrg  ;;
359880ed95aSmrg
36002be438aSmrgtru64)
36102be438aSmrg   # The Tru64 compiler uses -MD to generate dependencies as a side
36202be438aSmrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
36302be438aSmrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
36402be438aSmrg   # dependencies in `foo.d' instead, so we check for that too.
36502be438aSmrg   # Subdirectories are respected.
36602be438aSmrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
36702be438aSmrg   test "x$dir" = "x$object" && dir=
36802be438aSmrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
36902be438aSmrg
37002be438aSmrg   if test "$libtool" = yes; then
37102be438aSmrg      # With Tru64 cc, shared objects can also be used to make a
372880ed95aSmrg      # static library.  This mechanism is used in libtool 1.4 series to
37302be438aSmrg      # handle both shared and static libraries in a single compilation.
37402be438aSmrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
37502be438aSmrg      #
37602be438aSmrg      # With libtool 1.5 this exception was removed, and libtool now
37702be438aSmrg      # generates 2 separate objects for the 2 libraries.  These two
378880ed95aSmrg      # compilations output dependencies in $dir.libs/$base.o.d and
37902be438aSmrg      # in $dir$base.o.d.  We have to check for both files, because
38002be438aSmrg      # one of the two compilations can be disabled.  We should prefer
38102be438aSmrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
38202be438aSmrg      # automatically cleaned when .libs/ is deleted, while ignoring
38302be438aSmrg      # the former would cause a distcleancheck panic.
38402be438aSmrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
38502be438aSmrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
38602be438aSmrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
38702be438aSmrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
38802be438aSmrg      "$@" -Wc,-MD
38902be438aSmrg   else
39002be438aSmrg      tmpdepfile1=$dir$base.o.d
39102be438aSmrg      tmpdepfile2=$dir$base.d
39202be438aSmrg      tmpdepfile3=$dir$base.d
39302be438aSmrg      tmpdepfile4=$dir$base.d
39402be438aSmrg      "$@" -MD
39502be438aSmrg   fi
39602be438aSmrg
39702be438aSmrg   stat=$?
39802be438aSmrg   if test $stat -eq 0; then :
39902be438aSmrg   else
40002be438aSmrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
40102be438aSmrg      exit $stat
40202be438aSmrg   fi
40302be438aSmrg
40402be438aSmrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
40502be438aSmrg   do
40602be438aSmrg     test -f "$tmpdepfile" && break
40702be438aSmrg   done
40802be438aSmrg   if test -f "$tmpdepfile"; then
40902be438aSmrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
41002be438aSmrg      # That's a tab and a space in the [].
41102be438aSmrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
41202be438aSmrg   else
41302be438aSmrg      echo "#dummy" > "$depfile"
41402be438aSmrg   fi
41502be438aSmrg   rm -f "$tmpdepfile"
41602be438aSmrg   ;;
41702be438aSmrg
418909209eeSmrgmsvc7)
419909209eeSmrg  if test "$libtool" = yes; then
420909209eeSmrg    showIncludes=-Wc,-showIncludes
421909209eeSmrg  else
422909209eeSmrg    showIncludes=-showIncludes
423909209eeSmrg  fi
424909209eeSmrg  "$@" $showIncludes > "$tmpdepfile"
425909209eeSmrg  stat=$?
426909209eeSmrg  grep -v '^Note: including file: ' "$tmpdepfile"
427909209eeSmrg  if test "$stat" = 0; then :
428909209eeSmrg  else
429909209eeSmrg    rm -f "$tmpdepfile"
430909209eeSmrg    exit $stat
431909209eeSmrg  fi
432909209eeSmrg  rm -f "$depfile"
433909209eeSmrg  echo "$object : \\" > "$depfile"
434909209eeSmrg  # The first sed program below extracts the file names and escapes
435909209eeSmrg  # backslashes for cygpath.  The second sed program outputs the file
436909209eeSmrg  # name when reading, but also accumulates all include files in the
437909209eeSmrg  # hold buffer in order to output them again at the end.  This only
438909209eeSmrg  # works with sed implementations that can handle large buffers.
439909209eeSmrg  sed < "$tmpdepfile" -n '
440909209eeSmrg/^Note: including file:  *\(.*\)/ {
441909209eeSmrg  s//\1/
442909209eeSmrg  s/\\/\\\\/g
443909209eeSmrg  p
444909209eeSmrg}' | $cygpath_u | sort -u | sed -n '
445909209eeSmrgs/ /\\ /g
446909209eeSmrgs/\(.*\)/	\1 \\/p
447909209eeSmrgs/.\(.*\) \\/\1:/
448909209eeSmrgH
449909209eeSmrg$ {
450909209eeSmrg  s/.*/	/
451909209eeSmrg  G
452909209eeSmrg  p
453909209eeSmrg}' >> "$depfile"
454909209eeSmrg  rm -f "$tmpdepfile"
455909209eeSmrg  ;;
456909209eeSmrg
457909209eeSmrgmsvc7msys)
458909209eeSmrg  # This case exists only to let depend.m4 do its work.  It works by
459909209eeSmrg  # looking at the text of this script.  This case will never be run,
460909209eeSmrg  # since it is checked for above.
461909209eeSmrg  exit 1
462909209eeSmrg  ;;
463909209eeSmrg
46402be438aSmrg#nosideeffect)
46502be438aSmrg  # This comment above is used by automake to tell side-effect
46602be438aSmrg  # dependency tracking mechanisms from slower ones.
46702be438aSmrg
46802be438aSmrgdashmstdout)
46902be438aSmrg  # Important note: in order to support this mode, a compiler *must*
47002be438aSmrg  # always write the preprocessed file to stdout, regardless of -o.
47102be438aSmrg  "$@" || exit $?
47202be438aSmrg
47302be438aSmrg  # Remove the call to Libtool.
47402be438aSmrg  if test "$libtool" = yes; then
47561dc2d86Smrg    while test "X$1" != 'X--mode=compile'; do
47602be438aSmrg      shift
47702be438aSmrg    done
47802be438aSmrg    shift
47902be438aSmrg  fi
48002be438aSmrg
48102be438aSmrg  # Remove `-o $object'.
48202be438aSmrg  IFS=" "
48302be438aSmrg  for arg
48402be438aSmrg  do
48502be438aSmrg    case $arg in
48602be438aSmrg    -o)
48702be438aSmrg      shift
48802be438aSmrg      ;;
48902be438aSmrg    $object)
49002be438aSmrg      shift
49102be438aSmrg      ;;
49202be438aSmrg    *)
49302be438aSmrg      set fnord "$@" "$arg"
49402be438aSmrg      shift # fnord
49502be438aSmrg      shift # $arg
49602be438aSmrg      ;;
49702be438aSmrg    esac
49802be438aSmrg  done
49902be438aSmrg
50002be438aSmrg  test -z "$dashmflag" && dashmflag=-M
50102be438aSmrg  # Require at least two characters before searching for `:'
50202be438aSmrg  # in the target name.  This is to cope with DOS-style filenames:
50302be438aSmrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
50402be438aSmrg  "$@" $dashmflag |
50502be438aSmrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
50602be438aSmrg  rm -f "$depfile"
50702be438aSmrg  cat < "$tmpdepfile" > "$depfile"
50802be438aSmrg  tr ' ' '
50902be438aSmrg' < "$tmpdepfile" | \
51002be438aSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
51102be438aSmrg## correctly.  Breaking it into two sed invocations is a workaround.
51202be438aSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
51302be438aSmrg  rm -f "$tmpdepfile"
51402be438aSmrg  ;;
51502be438aSmrg
51602be438aSmrgdashXmstdout)
51702be438aSmrg  # This case only exists to satisfy depend.m4.  It is never actually
51802be438aSmrg  # run, as this mode is specially recognized in the preamble.
51902be438aSmrg  exit 1
52002be438aSmrg  ;;
52102be438aSmrg
52202be438aSmrgmakedepend)
52302be438aSmrg  "$@" || exit $?
52402be438aSmrg  # Remove any Libtool call
52502be438aSmrg  if test "$libtool" = yes; then
52661dc2d86Smrg    while test "X$1" != 'X--mode=compile'; do
52702be438aSmrg      shift
52802be438aSmrg    done
52902be438aSmrg    shift
53002be438aSmrg  fi
53102be438aSmrg  # X makedepend
53202be438aSmrg  shift
53361dc2d86Smrg  cleared=no eat=no
53461dc2d86Smrg  for arg
53561dc2d86Smrg  do
53602be438aSmrg    case $cleared in
53702be438aSmrg    no)
53802be438aSmrg      set ""; shift
53902be438aSmrg      cleared=yes ;;
54002be438aSmrg    esac
54161dc2d86Smrg    if test $eat = yes; then
54261dc2d86Smrg      eat=no
54361dc2d86Smrg      continue
54461dc2d86Smrg    fi
54502be438aSmrg    case "$arg" in
54602be438aSmrg    -D*|-I*)
54702be438aSmrg      set fnord "$@" "$arg"; shift ;;
54802be438aSmrg    # Strip any option that makedepend may not understand.  Remove
54902be438aSmrg    # the object too, otherwise makedepend will parse it as a source file.
55061dc2d86Smrg    -arch)
55161dc2d86Smrg      eat=yes ;;
55202be438aSmrg    -*|$object)
55302be438aSmrg      ;;
55402be438aSmrg    *)
55502be438aSmrg      set fnord "$@" "$arg"; shift ;;
55602be438aSmrg    esac
55702be438aSmrg  done
55861dc2d86Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
55902be438aSmrg  touch "$tmpdepfile"
56002be438aSmrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
56102be438aSmrg  rm -f "$depfile"
562909209eeSmrg  # makedepend may prepend the VPATH from the source file name to the object.
563909209eeSmrg  # No need to regex-escape $object, excess matching of '.' is harmless.
564909209eeSmrg  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
56502be438aSmrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
56602be438aSmrg' | \
56702be438aSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
56802be438aSmrg## correctly.  Breaking it into two sed invocations is a workaround.
56902be438aSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
57002be438aSmrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
57102be438aSmrg  ;;
57202be438aSmrg
57302be438aSmrgcpp)
57402be438aSmrg  # Important note: in order to support this mode, a compiler *must*
57502be438aSmrg  # always write the preprocessed file to stdout.
57602be438aSmrg  "$@" || exit $?
57702be438aSmrg
57802be438aSmrg  # Remove the call to Libtool.
57902be438aSmrg  if test "$libtool" = yes; then
58061dc2d86Smrg    while test "X$1" != 'X--mode=compile'; do
58102be438aSmrg      shift
58202be438aSmrg    done
58302be438aSmrg    shift
58402be438aSmrg  fi
58502be438aSmrg
58602be438aSmrg  # Remove `-o $object'.
58702be438aSmrg  IFS=" "
58802be438aSmrg  for arg
58902be438aSmrg  do
59002be438aSmrg    case $arg in
59102be438aSmrg    -o)
59202be438aSmrg      shift
59302be438aSmrg      ;;
59402be438aSmrg    $object)
59502be438aSmrg      shift
59602be438aSmrg      ;;
59702be438aSmrg    *)
59802be438aSmrg      set fnord "$@" "$arg"
59902be438aSmrg      shift # fnord
60002be438aSmrg      shift # $arg
60102be438aSmrg      ;;
60202be438aSmrg    esac
60302be438aSmrg  done
60402be438aSmrg
60502be438aSmrg  "$@" -E |
60602be438aSmrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
60702be438aSmrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
60802be438aSmrg    sed '$ s: \\$::' > "$tmpdepfile"
60902be438aSmrg  rm -f "$depfile"
61002be438aSmrg  echo "$object : \\" > "$depfile"
61102be438aSmrg  cat < "$tmpdepfile" >> "$depfile"
61202be438aSmrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
61302be438aSmrg  rm -f "$tmpdepfile"
61402be438aSmrg  ;;
61502be438aSmrg
61602be438aSmrgmsvisualcpp)
61702be438aSmrg  # Important note: in order to support this mode, a compiler *must*
61861dc2d86Smrg  # always write the preprocessed file to stdout.
61902be438aSmrg  "$@" || exit $?
62061dc2d86Smrg
62161dc2d86Smrg  # Remove the call to Libtool.
62261dc2d86Smrg  if test "$libtool" = yes; then
62361dc2d86Smrg    while test "X$1" != 'X--mode=compile'; do
62461dc2d86Smrg      shift
62561dc2d86Smrg    done
62661dc2d86Smrg    shift
62761dc2d86Smrg  fi
62861dc2d86Smrg
62902be438aSmrg  IFS=" "
63002be438aSmrg  for arg
63102be438aSmrg  do
63202be438aSmrg    case "$arg" in
63361dc2d86Smrg    -o)
63461dc2d86Smrg      shift
63561dc2d86Smrg      ;;
63661dc2d86Smrg    $object)
63761dc2d86Smrg      shift
63861dc2d86Smrg      ;;
63902be438aSmrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
64002be438aSmrg	set fnord "$@"
64102be438aSmrg	shift
64202be438aSmrg	shift
64302be438aSmrg	;;
64402be438aSmrg    *)
64502be438aSmrg	set fnord "$@" "$arg"
64602be438aSmrg	shift
64702be438aSmrg	shift
64802be438aSmrg	;;
64902be438aSmrg    esac
65002be438aSmrg  done
65161dc2d86Smrg  "$@" -E 2>/dev/null |
65261dc2d86Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
65302be438aSmrg  rm -f "$depfile"
65402be438aSmrg  echo "$object : \\" > "$depfile"
65561dc2d86Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
65602be438aSmrg  echo "	" >> "$depfile"
65761dc2d86Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
65802be438aSmrg  rm -f "$tmpdepfile"
65902be438aSmrg  ;;
66002be438aSmrg
66161dc2d86Smrgmsvcmsys)
66261dc2d86Smrg  # This case exists only to let depend.m4 do its work.  It works by
66361dc2d86Smrg  # looking at the text of this script.  This case will never be run,
66461dc2d86Smrg  # since it is checked for above.
66561dc2d86Smrg  exit 1
66661dc2d86Smrg  ;;
66761dc2d86Smrg
66802be438aSmrgnone)
66902be438aSmrg  exec "$@"
67002be438aSmrg  ;;
67102be438aSmrg
67202be438aSmrg*)
67302be438aSmrg  echo "Unknown depmode $depmode" 1>&2
67402be438aSmrg  exit 1
67502be438aSmrg  ;;
67602be438aSmrgesac
67702be438aSmrg
67802be438aSmrgexit 0
67902be438aSmrg
68002be438aSmrg# Local Variables:
68102be438aSmrg# mode: shell-script
68202be438aSmrg# sh-indentation: 2
68302be438aSmrg# eval: (add-hook 'write-file-hooks 'time-stamp)
68402be438aSmrg# time-stamp-start: "scriptversion="
68502be438aSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
68661dc2d86Smrg# time-stamp-time-zone: "UTC"
68761dc2d86Smrg# time-stamp-end: "; # UTC"
68802be438aSmrg# End:
689