depcomp revision ab902922
17a84e134Smrg#! /bin/sh
27a84e134Smrg# depcomp - compile a program generating dependencies as side-effects
37a84e134Smrg
4ab902922Smrgscriptversion=2007-03-29.01
57a84e134Smrg
6ab902922Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software
77a84e134Smrg# Foundation, Inc.
87a84e134Smrg
97a84e134Smrg# This program is free software; you can redistribute it and/or modify
107a84e134Smrg# it under the terms of the GNU General Public License as published by
117a84e134Smrg# the Free Software Foundation; either version 2, or (at your option)
127a84e134Smrg# any later version.
137a84e134Smrg
147a84e134Smrg# This program is distributed in the hope that it will be useful,
157a84e134Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
167a84e134Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
177a84e134Smrg# GNU General Public License for more details.
187a84e134Smrg
197a84e134Smrg# You should have received a copy of the GNU General Public License
207a84e134Smrg# along with this program; if not, write to the Free Software
217a84e134Smrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
227a84e134Smrg# 02110-1301, USA.
237a84e134Smrg
247a84e134Smrg# As a special exception to the GNU General Public License, if you
257a84e134Smrg# distribute this file as part of a program that contains a
267a84e134Smrg# configuration script generated by Autoconf, you may include it under
277a84e134Smrg# the same distribution terms that you use for the rest of that program.
287a84e134Smrg
297a84e134Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
307a84e134Smrg
317a84e134Smrgcase $1 in
327a84e134Smrg  '')
337a84e134Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
347a84e134Smrg     exit 1;
357a84e134Smrg     ;;
367a84e134Smrg  -h | --h*)
377a84e134Smrg    cat <<\EOF
387a84e134SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
397a84e134Smrg
407a84e134SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
417a84e134Smrgas side-effects.
427a84e134Smrg
437a84e134SmrgEnvironment variables:
447a84e134Smrg  depmode     Dependency tracking mode.
457a84e134Smrg  source      Source file read by `PROGRAMS ARGS'.
467a84e134Smrg  object      Object file output by `PROGRAMS ARGS'.
477a84e134Smrg  DEPDIR      directory where to store dependencies.
487a84e134Smrg  depfile     Dependency file to output.
497a84e134Smrg  tmpdepfile  Temporary file to use when outputing dependencies.
507a84e134Smrg  libtool     Whether libtool is used (yes/no).
517a84e134Smrg
527a84e134SmrgReport bugs to <bug-automake@gnu.org>.
537a84e134SmrgEOF
547a84e134Smrg    exit $?
557a84e134Smrg    ;;
567a84e134Smrg  -v | --v*)
577a84e134Smrg    echo "depcomp $scriptversion"
587a84e134Smrg    exit $?
597a84e134Smrg    ;;
607a84e134Smrgesac
617a84e134Smrg
627a84e134Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
637a84e134Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
647a84e134Smrg  exit 1
657a84e134Smrgfi
667a84e134Smrg
677a84e134Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
687a84e134Smrgdepfile=${depfile-`echo "$object" |
697a84e134Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
707a84e134Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
717a84e134Smrg
727a84e134Smrgrm -f "$tmpdepfile"
737a84e134Smrg
747a84e134Smrg# Some modes work just like other modes, but use different flags.  We
757a84e134Smrg# parameterize here, but still list the modes in the big case below,
767a84e134Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
777a84e134Smrg# here, because this file can only contain one case statement.
787a84e134Smrgif test "$depmode" = hp; then
797a84e134Smrg  # HP compiler uses -M and no extra arg.
807a84e134Smrg  gccflag=-M
817a84e134Smrg  depmode=gcc
827a84e134Smrgfi
837a84e134Smrg
847a84e134Smrgif test "$depmode" = dashXmstdout; then
857a84e134Smrg   # This is just like dashmstdout with a different argument.
867a84e134Smrg   dashmflag=-xM
877a84e134Smrg   depmode=dashmstdout
887a84e134Smrgfi
897a84e134Smrg
907a84e134Smrgcase "$depmode" in
917a84e134Smrggcc3)
927a84e134Smrg## gcc 3 implements dependency tracking that does exactly what
937a84e134Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
947a84e134Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
957a84e134Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
967a84e134Smrg## the command line argument order; so add the flags where they
977a84e134Smrg## appear in depend2.am.  Note that the slowdown incurred here
987a84e134Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
997a84e134Smrg  for arg
1007a84e134Smrg  do
1017a84e134Smrg    case $arg in
1027a84e134Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
1037a84e134Smrg    *)  set fnord "$@" "$arg" ;;
1047a84e134Smrg    esac
1057a84e134Smrg    shift # fnord
1067a84e134Smrg    shift # $arg
1077a84e134Smrg  done
1087a84e134Smrg  "$@"
1097a84e134Smrg  stat=$?
1107a84e134Smrg  if test $stat -eq 0; then :
1117a84e134Smrg  else
1127a84e134Smrg    rm -f "$tmpdepfile"
1137a84e134Smrg    exit $stat
1147a84e134Smrg  fi
1157a84e134Smrg  mv "$tmpdepfile" "$depfile"
1167a84e134Smrg  ;;
1177a84e134Smrg
1187a84e134Smrggcc)
1197a84e134Smrg## There are various ways to get dependency output from gcc.  Here's
1207a84e134Smrg## why we pick this rather obscure method:
1217a84e134Smrg## - Don't want to use -MD because we'd like the dependencies to end
1227a84e134Smrg##   up in a subdir.  Having to rename by hand is ugly.
1237a84e134Smrg##   (We might end up doing this anyway to support other compilers.)
1247a84e134Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
1257a84e134Smrg##   -MM, not -M (despite what the docs say).
1267a84e134Smrg## - Using -M directly means running the compiler twice (even worse
1277a84e134Smrg##   than renaming).
1287a84e134Smrg  if test -z "$gccflag"; then
1297a84e134Smrg    gccflag=-MD,
1307a84e134Smrg  fi
1317a84e134Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
1327a84e134Smrg  stat=$?
1337a84e134Smrg  if test $stat -eq 0; then :
1347a84e134Smrg  else
1357a84e134Smrg    rm -f "$tmpdepfile"
1367a84e134Smrg    exit $stat
1377a84e134Smrg  fi
1387a84e134Smrg  rm -f "$depfile"
1397a84e134Smrg  echo "$object : \\" > "$depfile"
1407a84e134Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
1417a84e134Smrg## The second -e expression handles DOS-style file names with drive letters.
1427a84e134Smrg  sed -e 's/^[^:]*: / /' \
1437a84e134Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
1447a84e134Smrg## This next piece of magic avoids the `deleted header file' problem.
1457a84e134Smrg## The problem is that when a header file which appears in a .P file
1467a84e134Smrg## is deleted, the dependency causes make to die (because there is
1477a84e134Smrg## typically no way to rebuild the header).  We avoid this by adding
1487a84e134Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
1497a84e134Smrg## this for us directly.
1507a84e134Smrg  tr ' ' '
1517a84e134Smrg' < "$tmpdepfile" |
1527a84e134Smrg## Some versions of gcc put a space before the `:'.  On the theory
1537a84e134Smrg## that the space means something, we add a space to the output as
1547a84e134Smrg## well.
1557a84e134Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
1567a84e134Smrg## correctly.  Breaking it into two sed invocations is a workaround.
1577a84e134Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
1587a84e134Smrg  rm -f "$tmpdepfile"
1597a84e134Smrg  ;;
1607a84e134Smrg
1617a84e134Smrghp)
1627a84e134Smrg  # This case exists only to let depend.m4 do its work.  It works by
1637a84e134Smrg  # looking at the text of this script.  This case will never be run,
1647a84e134Smrg  # since it is checked for above.
1657a84e134Smrg  exit 1
1667a84e134Smrg  ;;
1677a84e134Smrg
1687a84e134Smrgsgi)
1697a84e134Smrg  if test "$libtool" = yes; then
1707a84e134Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
1717a84e134Smrg  else
1727a84e134Smrg    "$@" -MDupdate "$tmpdepfile"
1737a84e134Smrg  fi
1747a84e134Smrg  stat=$?
1757a84e134Smrg  if test $stat -eq 0; then :
1767a84e134Smrg  else
1777a84e134Smrg    rm -f "$tmpdepfile"
1787a84e134Smrg    exit $stat
1797a84e134Smrg  fi
1807a84e134Smrg  rm -f "$depfile"
1817a84e134Smrg
1827a84e134Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
1837a84e134Smrg    echo "$object : \\" > "$depfile"
1847a84e134Smrg
1857a84e134Smrg    # Clip off the initial element (the dependent).  Don't try to be
1867a84e134Smrg    # clever and replace this with sed code, as IRIX sed won't handle
1877a84e134Smrg    # lines with more than a fixed number of characters (4096 in
1887a84e134Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
1897a84e134Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
1907a84e134Smrg    # dependency line.
1917a84e134Smrg    tr ' ' '
1927a84e134Smrg' < "$tmpdepfile" \
1937a84e134Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
1947a84e134Smrg    tr '
1957a84e134Smrg' ' ' >> $depfile
1967a84e134Smrg    echo >> $depfile
1977a84e134Smrg
1987a84e134Smrg    # The second pass generates a dummy entry for each header file.
1997a84e134Smrg    tr ' ' '
2007a84e134Smrg' < "$tmpdepfile" \
2017a84e134Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
2027a84e134Smrg   >> $depfile
2037a84e134Smrg  else
2047a84e134Smrg    # The sourcefile does not contain any dependencies, so just
2057a84e134Smrg    # store a dummy comment line, to avoid errors with the Makefile
2067a84e134Smrg    # "include basename.Plo" scheme.
2077a84e134Smrg    echo "#dummy" > "$depfile"
2087a84e134Smrg  fi
2097a84e134Smrg  rm -f "$tmpdepfile"
2107a84e134Smrg  ;;
2117a84e134Smrg
2127a84e134Smrgaix)
2137a84e134Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
2147a84e134Smrg  # in a .u file.  In older versions, this file always lives in the
2157a84e134Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
2167a84e134Smrg  # start of each line; $object doesn't have directory information.
2177a84e134Smrg  # Version 6 uses the directory in both cases.
218ab902922Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
219ab902922Smrg  test "x$dir" = "x$object" && dir=
220ab902922Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
2217a84e134Smrg  if test "$libtool" = yes; then
222ab902922Smrg    tmpdepfile1=$dir$base.u
223ab902922Smrg    tmpdepfile2=$base.u
224ab902922Smrg    tmpdepfile3=$dir.libs/$base.u
2257a84e134Smrg    "$@" -Wc,-M
2267a84e134Smrg  else
227ab902922Smrg    tmpdepfile1=$dir$base.u
228ab902922Smrg    tmpdepfile2=$dir$base.u
229ab902922Smrg    tmpdepfile3=$dir$base.u
2307a84e134Smrg    "$@" -M
2317a84e134Smrg  fi
2327a84e134Smrg  stat=$?
2337a84e134Smrg
2347a84e134Smrg  if test $stat -eq 0; then :
2357a84e134Smrg  else
236ab902922Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2377a84e134Smrg    exit $stat
2387a84e134Smrg  fi
2397a84e134Smrg
240ab902922Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
241ab902922Smrg  do
242ab902922Smrg    test -f "$tmpdepfile" && break
243ab902922Smrg  done
2447a84e134Smrg  if test -f "$tmpdepfile"; then
2457a84e134Smrg    # Each line is of the form `foo.o: dependent.h'.
2467a84e134Smrg    # Do two passes, one to just change these to
2477a84e134Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
248ab902922Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
249ab902922Smrg    # That's a tab and a space in the [].
250ab902922Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
2517a84e134Smrg  else
2527a84e134Smrg    # The sourcefile does not contain any dependencies, so just
2537a84e134Smrg    # store a dummy comment line, to avoid errors with the Makefile
2547a84e134Smrg    # "include basename.Plo" scheme.
2557a84e134Smrg    echo "#dummy" > "$depfile"
2567a84e134Smrg  fi
2577a84e134Smrg  rm -f "$tmpdepfile"
2587a84e134Smrg  ;;
2597a84e134Smrg
2607a84e134Smrgicc)
2617a84e134Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
2627a84e134Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
2637a84e134Smrg  # ICC 7.0 will fill foo.d with something like
2647a84e134Smrg  #    foo.o: sub/foo.c
2657a84e134Smrg  #    foo.o: sub/foo.h
2667a84e134Smrg  # which is wrong.  We want:
2677a84e134Smrg  #    sub/foo.o: sub/foo.c
2687a84e134Smrg  #    sub/foo.o: sub/foo.h
2697a84e134Smrg  #    sub/foo.c:
2707a84e134Smrg  #    sub/foo.h:
2717a84e134Smrg  # ICC 7.1 will output
2727a84e134Smrg  #    foo.o: sub/foo.c sub/foo.h
2737a84e134Smrg  # and will wrap long lines using \ :
2747a84e134Smrg  #    foo.o: sub/foo.c ... \
2757a84e134Smrg  #     sub/foo.h ... \
2767a84e134Smrg  #     ...
2777a84e134Smrg
2787a84e134Smrg  "$@" -MD -MF "$tmpdepfile"
2797a84e134Smrg  stat=$?
2807a84e134Smrg  if test $stat -eq 0; then :
2817a84e134Smrg  else
2827a84e134Smrg    rm -f "$tmpdepfile"
2837a84e134Smrg    exit $stat
2847a84e134Smrg  fi
2857a84e134Smrg  rm -f "$depfile"
2867a84e134Smrg  # Each line is of the form `foo.o: dependent.h',
2877a84e134Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
2887a84e134Smrg  # Do two passes, one to just change these to
2897a84e134Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
2907a84e134Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
2917a84e134Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
2927a84e134Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
2937a84e134Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
2947a84e134Smrg    sed -e 's/$/ :/' >> "$depfile"
2957a84e134Smrg  rm -f "$tmpdepfile"
2967a84e134Smrg  ;;
2977a84e134Smrg
2987a84e134Smrghp2)
2997a84e134Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
3007a84e134Smrg  # compilers, which have integrated preprocessors.  The correct option
3017a84e134Smrg  # to use with these is +Maked; it writes dependencies to a file named
3027a84e134Smrg  # 'foo.d', which lands next to the object file, wherever that
3037a84e134Smrg  # happens to be.
3047a84e134Smrg  # Much of this is similar to the tru64 case; see comments there.
3057a84e134Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3067a84e134Smrg  test "x$dir" = "x$object" && dir=
3077a84e134Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3087a84e134Smrg  if test "$libtool" = yes; then
3097a84e134Smrg    tmpdepfile1=$dir$base.d
3107a84e134Smrg    tmpdepfile2=$dir.libs/$base.d
3117a84e134Smrg    "$@" -Wc,+Maked
3127a84e134Smrg  else
3137a84e134Smrg    tmpdepfile1=$dir$base.d
3147a84e134Smrg    tmpdepfile2=$dir$base.d
3157a84e134Smrg    "$@" +Maked
3167a84e134Smrg  fi
3177a84e134Smrg  stat=$?
3187a84e134Smrg  if test $stat -eq 0; then :
3197a84e134Smrg  else
3207a84e134Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
3217a84e134Smrg     exit $stat
3227a84e134Smrg  fi
3237a84e134Smrg
3247a84e134Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
3257a84e134Smrg  do
3267a84e134Smrg    test -f "$tmpdepfile" && break
3277a84e134Smrg  done
3287a84e134Smrg  if test -f "$tmpdepfile"; then
3297a84e134Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
3307a84e134Smrg    # Add `dependent.h:' lines.
3317a84e134Smrg    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
3327a84e134Smrg  else
3337a84e134Smrg    echo "#dummy" > "$depfile"
3347a84e134Smrg  fi
3357a84e134Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
3367a84e134Smrg  ;;
3377a84e134Smrg
3387a84e134Smrgtru64)
3397a84e134Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
3407a84e134Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
3417a84e134Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
3427a84e134Smrg   # dependencies in `foo.d' instead, so we check for that too.
3437a84e134Smrg   # Subdirectories are respected.
3447a84e134Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3457a84e134Smrg   test "x$dir" = "x$object" && dir=
3467a84e134Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3477a84e134Smrg
3487a84e134Smrg   if test "$libtool" = yes; then
3497a84e134Smrg      # With Tru64 cc, shared objects can also be used to make a
3507a84e134Smrg      # static library.  This mechanism is used in libtool 1.4 series to
3517a84e134Smrg      # handle both shared and static libraries in a single compilation.
3527a84e134Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
3537a84e134Smrg      #
3547a84e134Smrg      # With libtool 1.5 this exception was removed, and libtool now
3557a84e134Smrg      # generates 2 separate objects for the 2 libraries.  These two
3567a84e134Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
3577a84e134Smrg      # in $dir$base.o.d.  We have to check for both files, because
3587a84e134Smrg      # one of the two compilations can be disabled.  We should prefer
3597a84e134Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
3607a84e134Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
3617a84e134Smrg      # the former would cause a distcleancheck panic.
3627a84e134Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
3637a84e134Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
3647a84e134Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
3657a84e134Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
3667a84e134Smrg      "$@" -Wc,-MD
3677a84e134Smrg   else
3687a84e134Smrg      tmpdepfile1=$dir$base.o.d
3697a84e134Smrg      tmpdepfile2=$dir$base.d
3707a84e134Smrg      tmpdepfile3=$dir$base.d
3717a84e134Smrg      tmpdepfile4=$dir$base.d
3727a84e134Smrg      "$@" -MD
3737a84e134Smrg   fi
3747a84e134Smrg
3757a84e134Smrg   stat=$?
3767a84e134Smrg   if test $stat -eq 0; then :
3777a84e134Smrg   else
3787a84e134Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3797a84e134Smrg      exit $stat
3807a84e134Smrg   fi
3817a84e134Smrg
3827a84e134Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3837a84e134Smrg   do
3847a84e134Smrg     test -f "$tmpdepfile" && break
3857a84e134Smrg   done
3867a84e134Smrg   if test -f "$tmpdepfile"; then
3877a84e134Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
3887a84e134Smrg      # That's a tab and a space in the [].
3897a84e134Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
3907a84e134Smrg   else
3917a84e134Smrg      echo "#dummy" > "$depfile"
3927a84e134Smrg   fi
3937a84e134Smrg   rm -f "$tmpdepfile"
3947a84e134Smrg   ;;
3957a84e134Smrg
3967a84e134Smrg#nosideeffect)
3977a84e134Smrg  # This comment above is used by automake to tell side-effect
3987a84e134Smrg  # dependency tracking mechanisms from slower ones.
3997a84e134Smrg
4007a84e134Smrgdashmstdout)
4017a84e134Smrg  # Important note: in order to support this mode, a compiler *must*
4027a84e134Smrg  # always write the preprocessed file to stdout, regardless of -o.
4037a84e134Smrg  "$@" || exit $?
4047a84e134Smrg
4057a84e134Smrg  # Remove the call to Libtool.
4067a84e134Smrg  if test "$libtool" = yes; then
4077a84e134Smrg    while test $1 != '--mode=compile'; do
4087a84e134Smrg      shift
4097a84e134Smrg    done
4107a84e134Smrg    shift
4117a84e134Smrg  fi
4127a84e134Smrg
4137a84e134Smrg  # Remove `-o $object'.
4147a84e134Smrg  IFS=" "
4157a84e134Smrg  for arg
4167a84e134Smrg  do
4177a84e134Smrg    case $arg in
4187a84e134Smrg    -o)
4197a84e134Smrg      shift
4207a84e134Smrg      ;;
4217a84e134Smrg    $object)
4227a84e134Smrg      shift
4237a84e134Smrg      ;;
4247a84e134Smrg    *)
4257a84e134Smrg      set fnord "$@" "$arg"
4267a84e134Smrg      shift # fnord
4277a84e134Smrg      shift # $arg
4287a84e134Smrg      ;;
4297a84e134Smrg    esac
4307a84e134Smrg  done
4317a84e134Smrg
4327a84e134Smrg  test -z "$dashmflag" && dashmflag=-M
4337a84e134Smrg  # Require at least two characters before searching for `:'
4347a84e134Smrg  # in the target name.  This is to cope with DOS-style filenames:
4357a84e134Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
4367a84e134Smrg  "$@" $dashmflag |
4377a84e134Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
4387a84e134Smrg  rm -f "$depfile"
4397a84e134Smrg  cat < "$tmpdepfile" > "$depfile"
4407a84e134Smrg  tr ' ' '
4417a84e134Smrg' < "$tmpdepfile" | \
4427a84e134Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
4437a84e134Smrg## correctly.  Breaking it into two sed invocations is a workaround.
4447a84e134Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
4457a84e134Smrg  rm -f "$tmpdepfile"
4467a84e134Smrg  ;;
4477a84e134Smrg
4487a84e134SmrgdashXmstdout)
4497a84e134Smrg  # This case only exists to satisfy depend.m4.  It is never actually
4507a84e134Smrg  # run, as this mode is specially recognized in the preamble.
4517a84e134Smrg  exit 1
4527a84e134Smrg  ;;
4537a84e134Smrg
4547a84e134Smrgmakedepend)
4557a84e134Smrg  "$@" || exit $?
4567a84e134Smrg  # Remove any Libtool call
4577a84e134Smrg  if test "$libtool" = yes; then
4587a84e134Smrg    while test $1 != '--mode=compile'; do
4597a84e134Smrg      shift
4607a84e134Smrg    done
4617a84e134Smrg    shift
4627a84e134Smrg  fi
4637a84e134Smrg  # X makedepend
4647a84e134Smrg  shift
4657a84e134Smrg  cleared=no
4667a84e134Smrg  for arg in "$@"; do
4677a84e134Smrg    case $cleared in
4687a84e134Smrg    no)
4697a84e134Smrg      set ""; shift
4707a84e134Smrg      cleared=yes ;;
4717a84e134Smrg    esac
4727a84e134Smrg    case "$arg" in
4737a84e134Smrg    -D*|-I*)
4747a84e134Smrg      set fnord "$@" "$arg"; shift ;;
4757a84e134Smrg    # Strip any option that makedepend may not understand.  Remove
4767a84e134Smrg    # the object too, otherwise makedepend will parse it as a source file.
4777a84e134Smrg    -*|$object)
4787a84e134Smrg      ;;
4797a84e134Smrg    *)
4807a84e134Smrg      set fnord "$@" "$arg"; shift ;;
4817a84e134Smrg    esac
4827a84e134Smrg  done
4837a84e134Smrg  obj_suffix="`echo $object | sed 's/^.*\././'`"
4847a84e134Smrg  touch "$tmpdepfile"
4857a84e134Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
4867a84e134Smrg  rm -f "$depfile"
4877a84e134Smrg  cat < "$tmpdepfile" > "$depfile"
4887a84e134Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
4897a84e134Smrg' | \
4907a84e134Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
4917a84e134Smrg## correctly.  Breaking it into two sed invocations is a workaround.
4927a84e134Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
4937a84e134Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
4947a84e134Smrg  ;;
4957a84e134Smrg
4967a84e134Smrgcpp)
4977a84e134Smrg  # Important note: in order to support this mode, a compiler *must*
4987a84e134Smrg  # always write the preprocessed file to stdout.
4997a84e134Smrg  "$@" || exit $?
5007a84e134Smrg
5017a84e134Smrg  # Remove the call to Libtool.
5027a84e134Smrg  if test "$libtool" = yes; then
5037a84e134Smrg    while test $1 != '--mode=compile'; do
5047a84e134Smrg      shift
5057a84e134Smrg    done
5067a84e134Smrg    shift
5077a84e134Smrg  fi
5087a84e134Smrg
5097a84e134Smrg  # Remove `-o $object'.
5107a84e134Smrg  IFS=" "
5117a84e134Smrg  for arg
5127a84e134Smrg  do
5137a84e134Smrg    case $arg in
5147a84e134Smrg    -o)
5157a84e134Smrg      shift
5167a84e134Smrg      ;;
5177a84e134Smrg    $object)
5187a84e134Smrg      shift
5197a84e134Smrg      ;;
5207a84e134Smrg    *)
5217a84e134Smrg      set fnord "$@" "$arg"
5227a84e134Smrg      shift # fnord
5237a84e134Smrg      shift # $arg
5247a84e134Smrg      ;;
5257a84e134Smrg    esac
5267a84e134Smrg  done
5277a84e134Smrg
5287a84e134Smrg  "$@" -E |
5297a84e134Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
5307a84e134Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
5317a84e134Smrg    sed '$ s: \\$::' > "$tmpdepfile"
5327a84e134Smrg  rm -f "$depfile"
5337a84e134Smrg  echo "$object : \\" > "$depfile"
5347a84e134Smrg  cat < "$tmpdepfile" >> "$depfile"
5357a84e134Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
5367a84e134Smrg  rm -f "$tmpdepfile"
5377a84e134Smrg  ;;
5387a84e134Smrg
5397a84e134Smrgmsvisualcpp)
5407a84e134Smrg  # Important note: in order to support this mode, a compiler *must*
5417a84e134Smrg  # always write the preprocessed file to stdout, regardless of -o,
5427a84e134Smrg  # because we must use -o when running libtool.
5437a84e134Smrg  "$@" || exit $?
5447a84e134Smrg  IFS=" "
5457a84e134Smrg  for arg
5467a84e134Smrg  do
5477a84e134Smrg    case "$arg" in
5487a84e134Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
5497a84e134Smrg	set fnord "$@"
5507a84e134Smrg	shift
5517a84e134Smrg	shift
5527a84e134Smrg	;;
5537a84e134Smrg    *)
5547a84e134Smrg	set fnord "$@" "$arg"
5557a84e134Smrg	shift
5567a84e134Smrg	shift
5577a84e134Smrg	;;
5587a84e134Smrg    esac
5597a84e134Smrg  done
5607a84e134Smrg  "$@" -E |
5617a84e134Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
5627a84e134Smrg  rm -f "$depfile"
5637a84e134Smrg  echo "$object : \\" > "$depfile"
5647a84e134Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
5657a84e134Smrg  echo "	" >> "$depfile"
5667a84e134Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
5677a84e134Smrg  rm -f "$tmpdepfile"
5687a84e134Smrg  ;;
5697a84e134Smrg
5707a84e134Smrgnone)
5717a84e134Smrg  exec "$@"
5727a84e134Smrg  ;;
5737a84e134Smrg
5747a84e134Smrg*)
5757a84e134Smrg  echo "Unknown depmode $depmode" 1>&2
5767a84e134Smrg  exit 1
5777a84e134Smrg  ;;
5787a84e134Smrgesac
5797a84e134Smrg
5807a84e134Smrgexit 0
5817a84e134Smrg
5827a84e134Smrg# Local Variables:
5837a84e134Smrg# mode: shell-script
5847a84e134Smrg# sh-indentation: 2
5857a84e134Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
5867a84e134Smrg# time-stamp-start: "scriptversion="
5877a84e134Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
5887a84e134Smrg# time-stamp-end: "$"
5897a84e134Smrg# End:
590