depcomp revision 880ed95a
102be438aSmrg#! /bin/sh
202be438aSmrg# depcomp - compile a program generating dependencies as side-effects
302be438aSmrg
4880ed95aSmrgscriptversion=2007-03-29.01
502be438aSmrg
6880ed95aSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software
7880ed95aSmrg# 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
2002be438aSmrg# along with this program; if not, write to the Free Software
2102be438aSmrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
2202be438aSmrg# 02110-1301, USA.
2302be438aSmrg
2402be438aSmrg# As a special exception to the GNU General Public License, if you
2502be438aSmrg# distribute this file as part of a program that contains a
2602be438aSmrg# configuration script generated by Autoconf, you may include it under
2702be438aSmrg# the same distribution terms that you use for the rest of that program.
2802be438aSmrg
2902be438aSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
3002be438aSmrg
3102be438aSmrgcase $1 in
3202be438aSmrg  '')
3302be438aSmrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
3402be438aSmrg     exit 1;
3502be438aSmrg     ;;
3602be438aSmrg  -h | --h*)
3702be438aSmrg    cat <<\EOF
3802be438aSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
3902be438aSmrg
4002be438aSmrgRun PROGRAMS ARGS to compile a file, generating dependencies
4102be438aSmrgas side-effects.
4202be438aSmrg
4302be438aSmrgEnvironment variables:
4402be438aSmrg  depmode     Dependency tracking mode.
4502be438aSmrg  source      Source file read by `PROGRAMS ARGS'.
4602be438aSmrg  object      Object file output by `PROGRAMS ARGS'.
4702be438aSmrg  DEPDIR      directory where to store dependencies.
4802be438aSmrg  depfile     Dependency file to output.
4902be438aSmrg  tmpdepfile  Temporary file to use when outputing dependencies.
5002be438aSmrg  libtool     Whether libtool is used (yes/no).
5102be438aSmrg
5202be438aSmrgReport bugs to <bug-automake@gnu.org>.
5302be438aSmrgEOF
5402be438aSmrg    exit $?
5502be438aSmrg    ;;
5602be438aSmrg  -v | --v*)
5702be438aSmrg    echo "depcomp $scriptversion"
5802be438aSmrg    exit $?
5902be438aSmrg    ;;
6002be438aSmrgesac
6102be438aSmrg
6202be438aSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
6302be438aSmrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
6402be438aSmrg  exit 1
6502be438aSmrgfi
6602be438aSmrg
6702be438aSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
6802be438aSmrgdepfile=${depfile-`echo "$object" |
6902be438aSmrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
7002be438aSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
7102be438aSmrg
7202be438aSmrgrm -f "$tmpdepfile"
7302be438aSmrg
7402be438aSmrg# Some modes work just like other modes, but use different flags.  We
7502be438aSmrg# parameterize here, but still list the modes in the big case below,
7602be438aSmrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
7702be438aSmrg# here, because this file can only contain one case statement.
7802be438aSmrgif test "$depmode" = hp; then
7902be438aSmrg  # HP compiler uses -M and no extra arg.
8002be438aSmrg  gccflag=-M
8102be438aSmrg  depmode=gcc
8202be438aSmrgfi
8302be438aSmrg
8402be438aSmrgif test "$depmode" = dashXmstdout; then
8502be438aSmrg   # This is just like dashmstdout with a different argument.
8602be438aSmrg   dashmflag=-xM
8702be438aSmrg   depmode=dashmstdout
8802be438aSmrgfi
8902be438aSmrg
9002be438aSmrgcase "$depmode" in
9102be438aSmrggcc3)
9202be438aSmrg## gcc 3 implements dependency tracking that does exactly what
9302be438aSmrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
9402be438aSmrg## it if -MD -MP comes after the -MF stuff.  Hmm.
95880ed95aSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
96880ed95aSmrg## the command line argument order; so add the flags where they
97880ed95aSmrg## appear in depend2.am.  Note that the slowdown incurred here
98880ed95aSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
99880ed95aSmrg  for arg
100880ed95aSmrg  do
101880ed95aSmrg    case $arg in
102880ed95aSmrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
103880ed95aSmrg    *)  set fnord "$@" "$arg" ;;
104880ed95aSmrg    esac
105880ed95aSmrg    shift # fnord
106880ed95aSmrg    shift # $arg
107880ed95aSmrg  done
108880ed95aSmrg  "$@"
10902be438aSmrg  stat=$?
11002be438aSmrg  if test $stat -eq 0; then :
11102be438aSmrg  else
11202be438aSmrg    rm -f "$tmpdepfile"
11302be438aSmrg    exit $stat
11402be438aSmrg  fi
11502be438aSmrg  mv "$tmpdepfile" "$depfile"
11602be438aSmrg  ;;
11702be438aSmrg
11802be438aSmrggcc)
11902be438aSmrg## There are various ways to get dependency output from gcc.  Here's
12002be438aSmrg## why we pick this rather obscure method:
12102be438aSmrg## - Don't want to use -MD because we'd like the dependencies to end
12202be438aSmrg##   up in a subdir.  Having to rename by hand is ugly.
12302be438aSmrg##   (We might end up doing this anyway to support other compilers.)
12402be438aSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
12502be438aSmrg##   -MM, not -M (despite what the docs say).
12602be438aSmrg## - Using -M directly means running the compiler twice (even worse
12702be438aSmrg##   than renaming).
12802be438aSmrg  if test -z "$gccflag"; then
12902be438aSmrg    gccflag=-MD,
13002be438aSmrg  fi
13102be438aSmrg  "$@" -Wp,"$gccflag$tmpdepfile"
13202be438aSmrg  stat=$?
13302be438aSmrg  if test $stat -eq 0; then :
13402be438aSmrg  else
13502be438aSmrg    rm -f "$tmpdepfile"
13602be438aSmrg    exit $stat
13702be438aSmrg  fi
13802be438aSmrg  rm -f "$depfile"
13902be438aSmrg  echo "$object : \\" > "$depfile"
14002be438aSmrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
14102be438aSmrg## The second -e expression handles DOS-style file names with drive letters.
14202be438aSmrg  sed -e 's/^[^:]*: / /' \
14302be438aSmrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
14402be438aSmrg## This next piece of magic avoids the `deleted header file' problem.
14502be438aSmrg## The problem is that when a header file which appears in a .P file
14602be438aSmrg## is deleted, the dependency causes make to die (because there is
14702be438aSmrg## typically no way to rebuild the header).  We avoid this by adding
14802be438aSmrg## dummy dependencies for each header file.  Too bad gcc doesn't do
14902be438aSmrg## this for us directly.
15002be438aSmrg  tr ' ' '
15102be438aSmrg' < "$tmpdepfile" |
15202be438aSmrg## Some versions of gcc put a space before the `:'.  On the theory
15302be438aSmrg## that the space means something, we add a space to the output as
15402be438aSmrg## well.
15502be438aSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
15602be438aSmrg## correctly.  Breaking it into two sed invocations is a workaround.
15702be438aSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
15802be438aSmrg  rm -f "$tmpdepfile"
15902be438aSmrg  ;;
16002be438aSmrg
16102be438aSmrghp)
16202be438aSmrg  # This case exists only to let depend.m4 do its work.  It works by
16302be438aSmrg  # looking at the text of this script.  This case will never be run,
16402be438aSmrg  # since it is checked for above.
16502be438aSmrg  exit 1
16602be438aSmrg  ;;
16702be438aSmrg
16802be438aSmrgsgi)
16902be438aSmrg  if test "$libtool" = yes; then
17002be438aSmrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
17102be438aSmrg  else
17202be438aSmrg    "$@" -MDupdate "$tmpdepfile"
17302be438aSmrg  fi
17402be438aSmrg  stat=$?
17502be438aSmrg  if test $stat -eq 0; then :
17602be438aSmrg  else
17702be438aSmrg    rm -f "$tmpdepfile"
17802be438aSmrg    exit $stat
17902be438aSmrg  fi
18002be438aSmrg  rm -f "$depfile"
18102be438aSmrg
18202be438aSmrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
18302be438aSmrg    echo "$object : \\" > "$depfile"
18402be438aSmrg
18502be438aSmrg    # Clip off the initial element (the dependent).  Don't try to be
18602be438aSmrg    # clever and replace this with sed code, as IRIX sed won't handle
18702be438aSmrg    # lines with more than a fixed number of characters (4096 in
18802be438aSmrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
18902be438aSmrg    # the IRIX cc adds comments like `#:fec' to the end of the
19002be438aSmrg    # dependency line.
19102be438aSmrg    tr ' ' '
19202be438aSmrg' < "$tmpdepfile" \
19302be438aSmrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
19402be438aSmrg    tr '
19502be438aSmrg' ' ' >> $depfile
19602be438aSmrg    echo >> $depfile
19702be438aSmrg
19802be438aSmrg    # The second pass generates a dummy entry for each header file.
19902be438aSmrg    tr ' ' '
20002be438aSmrg' < "$tmpdepfile" \
20102be438aSmrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
20202be438aSmrg   >> $depfile
20302be438aSmrg  else
20402be438aSmrg    # The sourcefile does not contain any dependencies, so just
20502be438aSmrg    # store a dummy comment line, to avoid errors with the Makefile
20602be438aSmrg    # "include basename.Plo" scheme.
20702be438aSmrg    echo "#dummy" > "$depfile"
20802be438aSmrg  fi
20902be438aSmrg  rm -f "$tmpdepfile"
21002be438aSmrg  ;;
21102be438aSmrg
21202be438aSmrgaix)
21302be438aSmrg  # The C for AIX Compiler uses -M and outputs the dependencies
21402be438aSmrg  # in a .u file.  In older versions, this file always lives in the
21502be438aSmrg  # current directory.  Also, the AIX compiler puts `$object:' at the
21602be438aSmrg  # start of each line; $object doesn't have directory information.
21702be438aSmrg  # Version 6 uses the directory in both cases.
218880ed95aSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
219880ed95aSmrg  test "x$dir" = "x$object" && dir=
220880ed95aSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
22102be438aSmrg  if test "$libtool" = yes; then
222880ed95aSmrg    tmpdepfile1=$dir$base.u
223880ed95aSmrg    tmpdepfile2=$base.u
224880ed95aSmrg    tmpdepfile3=$dir.libs/$base.u
22502be438aSmrg    "$@" -Wc,-M
22602be438aSmrg  else
227880ed95aSmrg    tmpdepfile1=$dir$base.u
228880ed95aSmrg    tmpdepfile2=$dir$base.u
229880ed95aSmrg    tmpdepfile3=$dir$base.u
23002be438aSmrg    "$@" -M
23102be438aSmrg  fi
23202be438aSmrg  stat=$?
23302be438aSmrg
23402be438aSmrg  if test $stat -eq 0; then :
23502be438aSmrg  else
236880ed95aSmrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
23702be438aSmrg    exit $stat
23802be438aSmrg  fi
23902be438aSmrg
240880ed95aSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
241880ed95aSmrg  do
242880ed95aSmrg    test -f "$tmpdepfile" && break
243880ed95aSmrg  done
24402be438aSmrg  if test -f "$tmpdepfile"; then
24502be438aSmrg    # Each line is of the form `foo.o: dependent.h'.
24602be438aSmrg    # Do two passes, one to just change these to
24702be438aSmrg    # `$object: dependent.h' and one to simply `dependent.h:'.
248880ed95aSmrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
249880ed95aSmrg    # That's a tab and a space in the [].
250880ed95aSmrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
25102be438aSmrg  else
25202be438aSmrg    # The sourcefile does not contain any dependencies, so just
25302be438aSmrg    # store a dummy comment line, to avoid errors with the Makefile
25402be438aSmrg    # "include basename.Plo" scheme.
25502be438aSmrg    echo "#dummy" > "$depfile"
25602be438aSmrg  fi
25702be438aSmrg  rm -f "$tmpdepfile"
25802be438aSmrg  ;;
25902be438aSmrg
26002be438aSmrgicc)
26102be438aSmrg  # Intel's C compiler understands `-MD -MF file'.  However on
26202be438aSmrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
26302be438aSmrg  # ICC 7.0 will fill foo.d with something like
26402be438aSmrg  #    foo.o: sub/foo.c
26502be438aSmrg  #    foo.o: sub/foo.h
26602be438aSmrg  # which is wrong.  We want:
26702be438aSmrg  #    sub/foo.o: sub/foo.c
26802be438aSmrg  #    sub/foo.o: sub/foo.h
26902be438aSmrg  #    sub/foo.c:
27002be438aSmrg  #    sub/foo.h:
27102be438aSmrg  # ICC 7.1 will output
27202be438aSmrg  #    foo.o: sub/foo.c sub/foo.h
27302be438aSmrg  # and will wrap long lines using \ :
27402be438aSmrg  #    foo.o: sub/foo.c ... \
27502be438aSmrg  #     sub/foo.h ... \
27602be438aSmrg  #     ...
27702be438aSmrg
27802be438aSmrg  "$@" -MD -MF "$tmpdepfile"
27902be438aSmrg  stat=$?
28002be438aSmrg  if test $stat -eq 0; then :
28102be438aSmrg  else
28202be438aSmrg    rm -f "$tmpdepfile"
28302be438aSmrg    exit $stat
28402be438aSmrg  fi
28502be438aSmrg  rm -f "$depfile"
28602be438aSmrg  # Each line is of the form `foo.o: dependent.h',
28702be438aSmrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
28802be438aSmrg  # Do two passes, one to just change these to
28902be438aSmrg  # `$object: dependent.h' and one to simply `dependent.h:'.
29002be438aSmrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
29102be438aSmrg  # Some versions of the HPUX 10.20 sed can't process this invocation
29202be438aSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
29302be438aSmrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
29402be438aSmrg    sed -e 's/$/ :/' >> "$depfile"
29502be438aSmrg  rm -f "$tmpdepfile"
29602be438aSmrg  ;;
29702be438aSmrg
298880ed95aSmrghp2)
299880ed95aSmrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
300880ed95aSmrg  # compilers, which have integrated preprocessors.  The correct option
301880ed95aSmrg  # to use with these is +Maked; it writes dependencies to a file named
302880ed95aSmrg  # 'foo.d', which lands next to the object file, wherever that
303880ed95aSmrg  # happens to be.
304880ed95aSmrg  # Much of this is similar to the tru64 case; see comments there.
305880ed95aSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
306880ed95aSmrg  test "x$dir" = "x$object" && dir=
307880ed95aSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
308880ed95aSmrg  if test "$libtool" = yes; then
309880ed95aSmrg    tmpdepfile1=$dir$base.d
310880ed95aSmrg    tmpdepfile2=$dir.libs/$base.d
311880ed95aSmrg    "$@" -Wc,+Maked
312880ed95aSmrg  else
313880ed95aSmrg    tmpdepfile1=$dir$base.d
314880ed95aSmrg    tmpdepfile2=$dir$base.d
315880ed95aSmrg    "$@" +Maked
316880ed95aSmrg  fi
317880ed95aSmrg  stat=$?
318880ed95aSmrg  if test $stat -eq 0; then :
319880ed95aSmrg  else
320880ed95aSmrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
321880ed95aSmrg     exit $stat
322880ed95aSmrg  fi
323880ed95aSmrg
324880ed95aSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
325880ed95aSmrg  do
326880ed95aSmrg    test -f "$tmpdepfile" && break
327880ed95aSmrg  done
328880ed95aSmrg  if test -f "$tmpdepfile"; then
329880ed95aSmrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
330880ed95aSmrg    # Add `dependent.h:' lines.
331880ed95aSmrg    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
332880ed95aSmrg  else
333880ed95aSmrg    echo "#dummy" > "$depfile"
334880ed95aSmrg  fi
335880ed95aSmrg  rm -f "$tmpdepfile" "$tmpdepfile2"
336880ed95aSmrg  ;;
337880ed95aSmrg
33802be438aSmrgtru64)
33902be438aSmrg   # The Tru64 compiler uses -MD to generate dependencies as a side
34002be438aSmrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
34102be438aSmrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
34202be438aSmrg   # dependencies in `foo.d' instead, so we check for that too.
34302be438aSmrg   # Subdirectories are respected.
34402be438aSmrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
34502be438aSmrg   test "x$dir" = "x$object" && dir=
34602be438aSmrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
34702be438aSmrg
34802be438aSmrg   if test "$libtool" = yes; then
34902be438aSmrg      # With Tru64 cc, shared objects can also be used to make a
350880ed95aSmrg      # static library.  This mechanism is used in libtool 1.4 series to
35102be438aSmrg      # handle both shared and static libraries in a single compilation.
35202be438aSmrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
35302be438aSmrg      #
35402be438aSmrg      # With libtool 1.5 this exception was removed, and libtool now
35502be438aSmrg      # generates 2 separate objects for the 2 libraries.  These two
356880ed95aSmrg      # compilations output dependencies in $dir.libs/$base.o.d and
35702be438aSmrg      # in $dir$base.o.d.  We have to check for both files, because
35802be438aSmrg      # one of the two compilations can be disabled.  We should prefer
35902be438aSmrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
36002be438aSmrg      # automatically cleaned when .libs/ is deleted, while ignoring
36102be438aSmrg      # the former would cause a distcleancheck panic.
36202be438aSmrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
36302be438aSmrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
36402be438aSmrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
36502be438aSmrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
36602be438aSmrg      "$@" -Wc,-MD
36702be438aSmrg   else
36802be438aSmrg      tmpdepfile1=$dir$base.o.d
36902be438aSmrg      tmpdepfile2=$dir$base.d
37002be438aSmrg      tmpdepfile3=$dir$base.d
37102be438aSmrg      tmpdepfile4=$dir$base.d
37202be438aSmrg      "$@" -MD
37302be438aSmrg   fi
37402be438aSmrg
37502be438aSmrg   stat=$?
37602be438aSmrg   if test $stat -eq 0; then :
37702be438aSmrg   else
37802be438aSmrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
37902be438aSmrg      exit $stat
38002be438aSmrg   fi
38102be438aSmrg
38202be438aSmrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
38302be438aSmrg   do
38402be438aSmrg     test -f "$tmpdepfile" && break
38502be438aSmrg   done
38602be438aSmrg   if test -f "$tmpdepfile"; then
38702be438aSmrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
38802be438aSmrg      # That's a tab and a space in the [].
38902be438aSmrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
39002be438aSmrg   else
39102be438aSmrg      echo "#dummy" > "$depfile"
39202be438aSmrg   fi
39302be438aSmrg   rm -f "$tmpdepfile"
39402be438aSmrg   ;;
39502be438aSmrg
39602be438aSmrg#nosideeffect)
39702be438aSmrg  # This comment above is used by automake to tell side-effect
39802be438aSmrg  # dependency tracking mechanisms from slower ones.
39902be438aSmrg
40002be438aSmrgdashmstdout)
40102be438aSmrg  # Important note: in order to support this mode, a compiler *must*
40202be438aSmrg  # always write the preprocessed file to stdout, regardless of -o.
40302be438aSmrg  "$@" || exit $?
40402be438aSmrg
40502be438aSmrg  # Remove the call to Libtool.
40602be438aSmrg  if test "$libtool" = yes; then
40702be438aSmrg    while test $1 != '--mode=compile'; do
40802be438aSmrg      shift
40902be438aSmrg    done
41002be438aSmrg    shift
41102be438aSmrg  fi
41202be438aSmrg
41302be438aSmrg  # Remove `-o $object'.
41402be438aSmrg  IFS=" "
41502be438aSmrg  for arg
41602be438aSmrg  do
41702be438aSmrg    case $arg in
41802be438aSmrg    -o)
41902be438aSmrg      shift
42002be438aSmrg      ;;
42102be438aSmrg    $object)
42202be438aSmrg      shift
42302be438aSmrg      ;;
42402be438aSmrg    *)
42502be438aSmrg      set fnord "$@" "$arg"
42602be438aSmrg      shift # fnord
42702be438aSmrg      shift # $arg
42802be438aSmrg      ;;
42902be438aSmrg    esac
43002be438aSmrg  done
43102be438aSmrg
43202be438aSmrg  test -z "$dashmflag" && dashmflag=-M
43302be438aSmrg  # Require at least two characters before searching for `:'
43402be438aSmrg  # in the target name.  This is to cope with DOS-style filenames:
43502be438aSmrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
43602be438aSmrg  "$@" $dashmflag |
43702be438aSmrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
43802be438aSmrg  rm -f "$depfile"
43902be438aSmrg  cat < "$tmpdepfile" > "$depfile"
44002be438aSmrg  tr ' ' '
44102be438aSmrg' < "$tmpdepfile" | \
44202be438aSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
44302be438aSmrg## correctly.  Breaking it into two sed invocations is a workaround.
44402be438aSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
44502be438aSmrg  rm -f "$tmpdepfile"
44602be438aSmrg  ;;
44702be438aSmrg
44802be438aSmrgdashXmstdout)
44902be438aSmrg  # This case only exists to satisfy depend.m4.  It is never actually
45002be438aSmrg  # run, as this mode is specially recognized in the preamble.
45102be438aSmrg  exit 1
45202be438aSmrg  ;;
45302be438aSmrg
45402be438aSmrgmakedepend)
45502be438aSmrg  "$@" || exit $?
45602be438aSmrg  # Remove any Libtool call
45702be438aSmrg  if test "$libtool" = yes; then
45802be438aSmrg    while test $1 != '--mode=compile'; do
45902be438aSmrg      shift
46002be438aSmrg    done
46102be438aSmrg    shift
46202be438aSmrg  fi
46302be438aSmrg  # X makedepend
46402be438aSmrg  shift
46502be438aSmrg  cleared=no
46602be438aSmrg  for arg in "$@"; do
46702be438aSmrg    case $cleared in
46802be438aSmrg    no)
46902be438aSmrg      set ""; shift
47002be438aSmrg      cleared=yes ;;
47102be438aSmrg    esac
47202be438aSmrg    case "$arg" in
47302be438aSmrg    -D*|-I*)
47402be438aSmrg      set fnord "$@" "$arg"; shift ;;
47502be438aSmrg    # Strip any option that makedepend may not understand.  Remove
47602be438aSmrg    # the object too, otherwise makedepend will parse it as a source file.
47702be438aSmrg    -*|$object)
47802be438aSmrg      ;;
47902be438aSmrg    *)
48002be438aSmrg      set fnord "$@" "$arg"; shift ;;
48102be438aSmrg    esac
48202be438aSmrg  done
48302be438aSmrg  obj_suffix="`echo $object | sed 's/^.*\././'`"
48402be438aSmrg  touch "$tmpdepfile"
48502be438aSmrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
48602be438aSmrg  rm -f "$depfile"
48702be438aSmrg  cat < "$tmpdepfile" > "$depfile"
48802be438aSmrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
48902be438aSmrg' | \
49002be438aSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
49102be438aSmrg## correctly.  Breaking it into two sed invocations is a workaround.
49202be438aSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
49302be438aSmrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
49402be438aSmrg  ;;
49502be438aSmrg
49602be438aSmrgcpp)
49702be438aSmrg  # Important note: in order to support this mode, a compiler *must*
49802be438aSmrg  # always write the preprocessed file to stdout.
49902be438aSmrg  "$@" || exit $?
50002be438aSmrg
50102be438aSmrg  # Remove the call to Libtool.
50202be438aSmrg  if test "$libtool" = yes; then
50302be438aSmrg    while test $1 != '--mode=compile'; do
50402be438aSmrg      shift
50502be438aSmrg    done
50602be438aSmrg    shift
50702be438aSmrg  fi
50802be438aSmrg
50902be438aSmrg  # Remove `-o $object'.
51002be438aSmrg  IFS=" "
51102be438aSmrg  for arg
51202be438aSmrg  do
51302be438aSmrg    case $arg in
51402be438aSmrg    -o)
51502be438aSmrg      shift
51602be438aSmrg      ;;
51702be438aSmrg    $object)
51802be438aSmrg      shift
51902be438aSmrg      ;;
52002be438aSmrg    *)
52102be438aSmrg      set fnord "$@" "$arg"
52202be438aSmrg      shift # fnord
52302be438aSmrg      shift # $arg
52402be438aSmrg      ;;
52502be438aSmrg    esac
52602be438aSmrg  done
52702be438aSmrg
52802be438aSmrg  "$@" -E |
52902be438aSmrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
53002be438aSmrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
53102be438aSmrg    sed '$ s: \\$::' > "$tmpdepfile"
53202be438aSmrg  rm -f "$depfile"
53302be438aSmrg  echo "$object : \\" > "$depfile"
53402be438aSmrg  cat < "$tmpdepfile" >> "$depfile"
53502be438aSmrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
53602be438aSmrg  rm -f "$tmpdepfile"
53702be438aSmrg  ;;
53802be438aSmrg
53902be438aSmrgmsvisualcpp)
54002be438aSmrg  # Important note: in order to support this mode, a compiler *must*
54102be438aSmrg  # always write the preprocessed file to stdout, regardless of -o,
54202be438aSmrg  # because we must use -o when running libtool.
54302be438aSmrg  "$@" || exit $?
54402be438aSmrg  IFS=" "
54502be438aSmrg  for arg
54602be438aSmrg  do
54702be438aSmrg    case "$arg" in
54802be438aSmrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
54902be438aSmrg	set fnord "$@"
55002be438aSmrg	shift
55102be438aSmrg	shift
55202be438aSmrg	;;
55302be438aSmrg    *)
55402be438aSmrg	set fnord "$@" "$arg"
55502be438aSmrg	shift
55602be438aSmrg	shift
55702be438aSmrg	;;
55802be438aSmrg    esac
55902be438aSmrg  done
56002be438aSmrg  "$@" -E |
56102be438aSmrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
56202be438aSmrg  rm -f "$depfile"
56302be438aSmrg  echo "$object : \\" > "$depfile"
56402be438aSmrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
56502be438aSmrg  echo "	" >> "$depfile"
56602be438aSmrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
56702be438aSmrg  rm -f "$tmpdepfile"
56802be438aSmrg  ;;
56902be438aSmrg
57002be438aSmrgnone)
57102be438aSmrg  exec "$@"
57202be438aSmrg  ;;
57302be438aSmrg
57402be438aSmrg*)
57502be438aSmrg  echo "Unknown depmode $depmode" 1>&2
57602be438aSmrg  exit 1
57702be438aSmrg  ;;
57802be438aSmrgesac
57902be438aSmrg
58002be438aSmrgexit 0
58102be438aSmrg
58202be438aSmrg# Local Variables:
58302be438aSmrg# mode: shell-script
58402be438aSmrg# sh-indentation: 2
58502be438aSmrg# eval: (add-hook 'write-file-hooks 'time-stamp)
58602be438aSmrg# time-stamp-start: "scriptversion="
58702be438aSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
58802be438aSmrg# time-stamp-end: "$"
58902be438aSmrg# End:
590