depcomp revision 7914d74b
17914d74bSmrg#! /bin/sh
27914d74bSmrg# depcomp - compile a program generating dependencies as side-effects
37914d74bSmrg
47914d74bSmrgscriptversion=2006-10-15.18
57914d74bSmrg
67914d74bSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software
77914d74bSmrg# Foundation, Inc.
87914d74bSmrg
97914d74bSmrg# This program is free software; you can redistribute it and/or modify
107914d74bSmrg# it under the terms of the GNU General Public License as published by
117914d74bSmrg# the Free Software Foundation; either version 2, or (at your option)
127914d74bSmrg# any later version.
137914d74bSmrg
147914d74bSmrg# This program is distributed in the hope that it will be useful,
157914d74bSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
167914d74bSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
177914d74bSmrg# GNU General Public License for more details.
187914d74bSmrg
197914d74bSmrg# You should have received a copy of the GNU General Public License
207914d74bSmrg# along with this program; if not, write to the Free Software
217914d74bSmrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
227914d74bSmrg# 02110-1301, USA.
237914d74bSmrg
247914d74bSmrg# As a special exception to the GNU General Public License, if you
257914d74bSmrg# distribute this file as part of a program that contains a
267914d74bSmrg# configuration script generated by Autoconf, you may include it under
277914d74bSmrg# the same distribution terms that you use for the rest of that program.
287914d74bSmrg
297914d74bSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
307914d74bSmrg
317914d74bSmrgcase $1 in
327914d74bSmrg  '')
337914d74bSmrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
347914d74bSmrg     exit 1;
357914d74bSmrg     ;;
367914d74bSmrg  -h | --h*)
377914d74bSmrg    cat <<\EOF
387914d74bSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
397914d74bSmrg
407914d74bSmrgRun PROGRAMS ARGS to compile a file, generating dependencies
417914d74bSmrgas side-effects.
427914d74bSmrg
437914d74bSmrgEnvironment variables:
447914d74bSmrg  depmode     Dependency tracking mode.
457914d74bSmrg  source      Source file read by `PROGRAMS ARGS'.
467914d74bSmrg  object      Object file output by `PROGRAMS ARGS'.
477914d74bSmrg  DEPDIR      directory where to store dependencies.
487914d74bSmrg  depfile     Dependency file to output.
497914d74bSmrg  tmpdepfile  Temporary file to use when outputing dependencies.
507914d74bSmrg  libtool     Whether libtool is used (yes/no).
517914d74bSmrg
527914d74bSmrgReport bugs to <bug-automake@gnu.org>.
537914d74bSmrgEOF
547914d74bSmrg    exit $?
557914d74bSmrg    ;;
567914d74bSmrg  -v | --v*)
577914d74bSmrg    echo "depcomp $scriptversion"
587914d74bSmrg    exit $?
597914d74bSmrg    ;;
607914d74bSmrgesac
617914d74bSmrg
627914d74bSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
637914d74bSmrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
647914d74bSmrg  exit 1
657914d74bSmrgfi
667914d74bSmrg
677914d74bSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
687914d74bSmrgdepfile=${depfile-`echo "$object" |
697914d74bSmrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
707914d74bSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
717914d74bSmrg
727914d74bSmrgrm -f "$tmpdepfile"
737914d74bSmrg
747914d74bSmrg# Some modes work just like other modes, but use different flags.  We
757914d74bSmrg# parameterize here, but still list the modes in the big case below,
767914d74bSmrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
777914d74bSmrg# here, because this file can only contain one case statement.
787914d74bSmrgif test "$depmode" = hp; then
797914d74bSmrg  # HP compiler uses -M and no extra arg.
807914d74bSmrg  gccflag=-M
817914d74bSmrg  depmode=gcc
827914d74bSmrgfi
837914d74bSmrg
847914d74bSmrgif test "$depmode" = dashXmstdout; then
857914d74bSmrg   # This is just like dashmstdout with a different argument.
867914d74bSmrg   dashmflag=-xM
877914d74bSmrg   depmode=dashmstdout
887914d74bSmrgfi
897914d74bSmrg
907914d74bSmrgcase "$depmode" in
917914d74bSmrggcc3)
927914d74bSmrg## gcc 3 implements dependency tracking that does exactly what
937914d74bSmrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
947914d74bSmrg## it if -MD -MP comes after the -MF stuff.  Hmm.
957914d74bSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
967914d74bSmrg## the command line argument order; so add the flags where they
977914d74bSmrg## appear in depend2.am.  Note that the slowdown incurred here
987914d74bSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
997914d74bSmrg  for arg
1007914d74bSmrg  do
1017914d74bSmrg    case $arg in
1027914d74bSmrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
1037914d74bSmrg    *)  set fnord "$@" "$arg" ;;
1047914d74bSmrg    esac
1057914d74bSmrg    shift # fnord
1067914d74bSmrg    shift # $arg
1077914d74bSmrg  done
1087914d74bSmrg  "$@"
1097914d74bSmrg  stat=$?
1107914d74bSmrg  if test $stat -eq 0; then :
1117914d74bSmrg  else
1127914d74bSmrg    rm -f "$tmpdepfile"
1137914d74bSmrg    exit $stat
1147914d74bSmrg  fi
1157914d74bSmrg  mv "$tmpdepfile" "$depfile"
1167914d74bSmrg  ;;
1177914d74bSmrg
1187914d74bSmrggcc)
1197914d74bSmrg## There are various ways to get dependency output from gcc.  Here's
1207914d74bSmrg## why we pick this rather obscure method:
1217914d74bSmrg## - Don't want to use -MD because we'd like the dependencies to end
1227914d74bSmrg##   up in a subdir.  Having to rename by hand is ugly.
1237914d74bSmrg##   (We might end up doing this anyway to support other compilers.)
1247914d74bSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
1257914d74bSmrg##   -MM, not -M (despite what the docs say).
1267914d74bSmrg## - Using -M directly means running the compiler twice (even worse
1277914d74bSmrg##   than renaming).
1287914d74bSmrg  if test -z "$gccflag"; then
1297914d74bSmrg    gccflag=-MD,
1307914d74bSmrg  fi
1317914d74bSmrg  "$@" -Wp,"$gccflag$tmpdepfile"
1327914d74bSmrg  stat=$?
1337914d74bSmrg  if test $stat -eq 0; then :
1347914d74bSmrg  else
1357914d74bSmrg    rm -f "$tmpdepfile"
1367914d74bSmrg    exit $stat
1377914d74bSmrg  fi
1387914d74bSmrg  rm -f "$depfile"
1397914d74bSmrg  echo "$object : \\" > "$depfile"
1407914d74bSmrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
1417914d74bSmrg## The second -e expression handles DOS-style file names with drive letters.
1427914d74bSmrg  sed -e 's/^[^:]*: / /' \
1437914d74bSmrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
1447914d74bSmrg## This next piece of magic avoids the `deleted header file' problem.
1457914d74bSmrg## The problem is that when a header file which appears in a .P file
1467914d74bSmrg## is deleted, the dependency causes make to die (because there is
1477914d74bSmrg## typically no way to rebuild the header).  We avoid this by adding
1487914d74bSmrg## dummy dependencies for each header file.  Too bad gcc doesn't do
1497914d74bSmrg## this for us directly.
1507914d74bSmrg  tr ' ' '
1517914d74bSmrg' < "$tmpdepfile" |
1527914d74bSmrg## Some versions of gcc put a space before the `:'.  On the theory
1537914d74bSmrg## that the space means something, we add a space to the output as
1547914d74bSmrg## well.
1557914d74bSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
1567914d74bSmrg## correctly.  Breaking it into two sed invocations is a workaround.
1577914d74bSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
1587914d74bSmrg  rm -f "$tmpdepfile"
1597914d74bSmrg  ;;
1607914d74bSmrg
1617914d74bSmrghp)
1627914d74bSmrg  # This case exists only to let depend.m4 do its work.  It works by
1637914d74bSmrg  # looking at the text of this script.  This case will never be run,
1647914d74bSmrg  # since it is checked for above.
1657914d74bSmrg  exit 1
1667914d74bSmrg  ;;
1677914d74bSmrg
1687914d74bSmrgsgi)
1697914d74bSmrg  if test "$libtool" = yes; then
1707914d74bSmrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
1717914d74bSmrg  else
1727914d74bSmrg    "$@" -MDupdate "$tmpdepfile"
1737914d74bSmrg  fi
1747914d74bSmrg  stat=$?
1757914d74bSmrg  if test $stat -eq 0; then :
1767914d74bSmrg  else
1777914d74bSmrg    rm -f "$tmpdepfile"
1787914d74bSmrg    exit $stat
1797914d74bSmrg  fi
1807914d74bSmrg  rm -f "$depfile"
1817914d74bSmrg
1827914d74bSmrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
1837914d74bSmrg    echo "$object : \\" > "$depfile"
1847914d74bSmrg
1857914d74bSmrg    # Clip off the initial element (the dependent).  Don't try to be
1867914d74bSmrg    # clever and replace this with sed code, as IRIX sed won't handle
1877914d74bSmrg    # lines with more than a fixed number of characters (4096 in
1887914d74bSmrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
1897914d74bSmrg    # the IRIX cc adds comments like `#:fec' to the end of the
1907914d74bSmrg    # dependency line.
1917914d74bSmrg    tr ' ' '
1927914d74bSmrg' < "$tmpdepfile" \
1937914d74bSmrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
1947914d74bSmrg    tr '
1957914d74bSmrg' ' ' >> $depfile
1967914d74bSmrg    echo >> $depfile
1977914d74bSmrg
1987914d74bSmrg    # The second pass generates a dummy entry for each header file.
1997914d74bSmrg    tr ' ' '
2007914d74bSmrg' < "$tmpdepfile" \
2017914d74bSmrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
2027914d74bSmrg   >> $depfile
2037914d74bSmrg  else
2047914d74bSmrg    # The sourcefile does not contain any dependencies, so just
2057914d74bSmrg    # store a dummy comment line, to avoid errors with the Makefile
2067914d74bSmrg    # "include basename.Plo" scheme.
2077914d74bSmrg    echo "#dummy" > "$depfile"
2087914d74bSmrg  fi
2097914d74bSmrg  rm -f "$tmpdepfile"
2107914d74bSmrg  ;;
2117914d74bSmrg
2127914d74bSmrgaix)
2137914d74bSmrg  # The C for AIX Compiler uses -M and outputs the dependencies
2147914d74bSmrg  # in a .u file.  In older versions, this file always lives in the
2157914d74bSmrg  # current directory.  Also, the AIX compiler puts `$object:' at the
2167914d74bSmrg  # start of each line; $object doesn't have directory information.
2177914d74bSmrg  # Version 6 uses the directory in both cases.
2187914d74bSmrg  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
2197914d74bSmrg  tmpdepfile="$stripped.u"
2207914d74bSmrg  if test "$libtool" = yes; then
2217914d74bSmrg    "$@" -Wc,-M
2227914d74bSmrg  else
2237914d74bSmrg    "$@" -M
2247914d74bSmrg  fi
2257914d74bSmrg  stat=$?
2267914d74bSmrg
2277914d74bSmrg  if test -f "$tmpdepfile"; then :
2287914d74bSmrg  else
2297914d74bSmrg    stripped=`echo "$stripped" | sed 's,^.*/,,'`
2307914d74bSmrg    tmpdepfile="$stripped.u"
2317914d74bSmrg  fi
2327914d74bSmrg
2337914d74bSmrg  if test $stat -eq 0; then :
2347914d74bSmrg  else
2357914d74bSmrg    rm -f "$tmpdepfile"
2367914d74bSmrg    exit $stat
2377914d74bSmrg  fi
2387914d74bSmrg
2397914d74bSmrg  if test -f "$tmpdepfile"; then
2407914d74bSmrg    outname="$stripped.o"
2417914d74bSmrg    # Each line is of the form `foo.o: dependent.h'.
2427914d74bSmrg    # Do two passes, one to just change these to
2437914d74bSmrg    # `$object: dependent.h' and one to simply `dependent.h:'.
2447914d74bSmrg    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
2457914d74bSmrg    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
2467914d74bSmrg  else
2477914d74bSmrg    # The sourcefile does not contain any dependencies, so just
2487914d74bSmrg    # store a dummy comment line, to avoid errors with the Makefile
2497914d74bSmrg    # "include basename.Plo" scheme.
2507914d74bSmrg    echo "#dummy" > "$depfile"
2517914d74bSmrg  fi
2527914d74bSmrg  rm -f "$tmpdepfile"
2537914d74bSmrg  ;;
2547914d74bSmrg
2557914d74bSmrgicc)
2567914d74bSmrg  # Intel's C compiler understands `-MD -MF file'.  However on
2577914d74bSmrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
2587914d74bSmrg  # ICC 7.0 will fill foo.d with something like
2597914d74bSmrg  #    foo.o: sub/foo.c
2607914d74bSmrg  #    foo.o: sub/foo.h
2617914d74bSmrg  # which is wrong.  We want:
2627914d74bSmrg  #    sub/foo.o: sub/foo.c
2637914d74bSmrg  #    sub/foo.o: sub/foo.h
2647914d74bSmrg  #    sub/foo.c:
2657914d74bSmrg  #    sub/foo.h:
2667914d74bSmrg  # ICC 7.1 will output
2677914d74bSmrg  #    foo.o: sub/foo.c sub/foo.h
2687914d74bSmrg  # and will wrap long lines using \ :
2697914d74bSmrg  #    foo.o: sub/foo.c ... \
2707914d74bSmrg  #     sub/foo.h ... \
2717914d74bSmrg  #     ...
2727914d74bSmrg
2737914d74bSmrg  "$@" -MD -MF "$tmpdepfile"
2747914d74bSmrg  stat=$?
2757914d74bSmrg  if test $stat -eq 0; then :
2767914d74bSmrg  else
2777914d74bSmrg    rm -f "$tmpdepfile"
2787914d74bSmrg    exit $stat
2797914d74bSmrg  fi
2807914d74bSmrg  rm -f "$depfile"
2817914d74bSmrg  # Each line is of the form `foo.o: dependent.h',
2827914d74bSmrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
2837914d74bSmrg  # Do two passes, one to just change these to
2847914d74bSmrg  # `$object: dependent.h' and one to simply `dependent.h:'.
2857914d74bSmrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
2867914d74bSmrg  # Some versions of the HPUX 10.20 sed can't process this invocation
2877914d74bSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
2887914d74bSmrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
2897914d74bSmrg    sed -e 's/$/ :/' >> "$depfile"
2907914d74bSmrg  rm -f "$tmpdepfile"
2917914d74bSmrg  ;;
2927914d74bSmrg
2937914d74bSmrghp2)
2947914d74bSmrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
2957914d74bSmrg  # compilers, which have integrated preprocessors.  The correct option
2967914d74bSmrg  # to use with these is +Maked; it writes dependencies to a file named
2977914d74bSmrg  # 'foo.d', which lands next to the object file, wherever that
2987914d74bSmrg  # happens to be.
2997914d74bSmrg  # Much of this is similar to the tru64 case; see comments there.
3007914d74bSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3017914d74bSmrg  test "x$dir" = "x$object" && dir=
3027914d74bSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3037914d74bSmrg  if test "$libtool" = yes; then
3047914d74bSmrg    tmpdepfile1=$dir$base.d
3057914d74bSmrg    tmpdepfile2=$dir.libs/$base.d
3067914d74bSmrg    "$@" -Wc,+Maked
3077914d74bSmrg  else
3087914d74bSmrg    tmpdepfile1=$dir$base.d
3097914d74bSmrg    tmpdepfile2=$dir$base.d
3107914d74bSmrg    "$@" +Maked
3117914d74bSmrg  fi
3127914d74bSmrg  stat=$?
3137914d74bSmrg  if test $stat -eq 0; then :
3147914d74bSmrg  else
3157914d74bSmrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
3167914d74bSmrg     exit $stat
3177914d74bSmrg  fi
3187914d74bSmrg
3197914d74bSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
3207914d74bSmrg  do
3217914d74bSmrg    test -f "$tmpdepfile" && break
3227914d74bSmrg  done
3237914d74bSmrg  if test -f "$tmpdepfile"; then
3247914d74bSmrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
3257914d74bSmrg    # Add `dependent.h:' lines.
3267914d74bSmrg    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
3277914d74bSmrg  else
3287914d74bSmrg    echo "#dummy" > "$depfile"
3297914d74bSmrg  fi
3307914d74bSmrg  rm -f "$tmpdepfile" "$tmpdepfile2"
3317914d74bSmrg  ;;
3327914d74bSmrg
3337914d74bSmrgtru64)
3347914d74bSmrg   # The Tru64 compiler uses -MD to generate dependencies as a side
3357914d74bSmrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
3367914d74bSmrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
3377914d74bSmrg   # dependencies in `foo.d' instead, so we check for that too.
3387914d74bSmrg   # Subdirectories are respected.
3397914d74bSmrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3407914d74bSmrg   test "x$dir" = "x$object" && dir=
3417914d74bSmrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3427914d74bSmrg
3437914d74bSmrg   if test "$libtool" = yes; then
3447914d74bSmrg      # With Tru64 cc, shared objects can also be used to make a
3457914d74bSmrg      # static library.  This mechanism is used in libtool 1.4 series to
3467914d74bSmrg      # handle both shared and static libraries in a single compilation.
3477914d74bSmrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
3487914d74bSmrg      #
3497914d74bSmrg      # With libtool 1.5 this exception was removed, and libtool now
3507914d74bSmrg      # generates 2 separate objects for the 2 libraries.  These two
3517914d74bSmrg      # compilations output dependencies in $dir.libs/$base.o.d and
3527914d74bSmrg      # in $dir$base.o.d.  We have to check for both files, because
3537914d74bSmrg      # one of the two compilations can be disabled.  We should prefer
3547914d74bSmrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
3557914d74bSmrg      # automatically cleaned when .libs/ is deleted, while ignoring
3567914d74bSmrg      # the former would cause a distcleancheck panic.
3577914d74bSmrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
3587914d74bSmrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
3597914d74bSmrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
3607914d74bSmrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
3617914d74bSmrg      "$@" -Wc,-MD
3627914d74bSmrg   else
3637914d74bSmrg      tmpdepfile1=$dir$base.o.d
3647914d74bSmrg      tmpdepfile2=$dir$base.d
3657914d74bSmrg      tmpdepfile3=$dir$base.d
3667914d74bSmrg      tmpdepfile4=$dir$base.d
3677914d74bSmrg      "$@" -MD
3687914d74bSmrg   fi
3697914d74bSmrg
3707914d74bSmrg   stat=$?
3717914d74bSmrg   if test $stat -eq 0; then :
3727914d74bSmrg   else
3737914d74bSmrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3747914d74bSmrg      exit $stat
3757914d74bSmrg   fi
3767914d74bSmrg
3777914d74bSmrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3787914d74bSmrg   do
3797914d74bSmrg     test -f "$tmpdepfile" && break
3807914d74bSmrg   done
3817914d74bSmrg   if test -f "$tmpdepfile"; then
3827914d74bSmrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
3837914d74bSmrg      # That's a tab and a space in the [].
3847914d74bSmrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
3857914d74bSmrg   else
3867914d74bSmrg      echo "#dummy" > "$depfile"
3877914d74bSmrg   fi
3887914d74bSmrg   rm -f "$tmpdepfile"
3897914d74bSmrg   ;;
3907914d74bSmrg
3917914d74bSmrg#nosideeffect)
3927914d74bSmrg  # This comment above is used by automake to tell side-effect
3937914d74bSmrg  # dependency tracking mechanisms from slower ones.
3947914d74bSmrg
3957914d74bSmrgdashmstdout)
3967914d74bSmrg  # Important note: in order to support this mode, a compiler *must*
3977914d74bSmrg  # always write the preprocessed file to stdout, regardless of -o.
3987914d74bSmrg  "$@" || exit $?
3997914d74bSmrg
4007914d74bSmrg  # Remove the call to Libtool.
4017914d74bSmrg  if test "$libtool" = yes; then
4027914d74bSmrg    while test $1 != '--mode=compile'; do
4037914d74bSmrg      shift
4047914d74bSmrg    done
4057914d74bSmrg    shift
4067914d74bSmrg  fi
4077914d74bSmrg
4087914d74bSmrg  # Remove `-o $object'.
4097914d74bSmrg  IFS=" "
4107914d74bSmrg  for arg
4117914d74bSmrg  do
4127914d74bSmrg    case $arg in
4137914d74bSmrg    -o)
4147914d74bSmrg      shift
4157914d74bSmrg      ;;
4167914d74bSmrg    $object)
4177914d74bSmrg      shift
4187914d74bSmrg      ;;
4197914d74bSmrg    *)
4207914d74bSmrg      set fnord "$@" "$arg"
4217914d74bSmrg      shift # fnord
4227914d74bSmrg      shift # $arg
4237914d74bSmrg      ;;
4247914d74bSmrg    esac
4257914d74bSmrg  done
4267914d74bSmrg
4277914d74bSmrg  test -z "$dashmflag" && dashmflag=-M
4287914d74bSmrg  # Require at least two characters before searching for `:'
4297914d74bSmrg  # in the target name.  This is to cope with DOS-style filenames:
4307914d74bSmrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
4317914d74bSmrg  "$@" $dashmflag |
4327914d74bSmrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
4337914d74bSmrg  rm -f "$depfile"
4347914d74bSmrg  cat < "$tmpdepfile" > "$depfile"
4357914d74bSmrg  tr ' ' '
4367914d74bSmrg' < "$tmpdepfile" | \
4377914d74bSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
4387914d74bSmrg## correctly.  Breaking it into two sed invocations is a workaround.
4397914d74bSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
4407914d74bSmrg  rm -f "$tmpdepfile"
4417914d74bSmrg  ;;
4427914d74bSmrg
4437914d74bSmrgdashXmstdout)
4447914d74bSmrg  # This case only exists to satisfy depend.m4.  It is never actually
4457914d74bSmrg  # run, as this mode is specially recognized in the preamble.
4467914d74bSmrg  exit 1
4477914d74bSmrg  ;;
4487914d74bSmrg
4497914d74bSmrgmakedepend)
4507914d74bSmrg  "$@" || exit $?
4517914d74bSmrg  # Remove any Libtool call
4527914d74bSmrg  if test "$libtool" = yes; then
4537914d74bSmrg    while test $1 != '--mode=compile'; do
4547914d74bSmrg      shift
4557914d74bSmrg    done
4567914d74bSmrg    shift
4577914d74bSmrg  fi
4587914d74bSmrg  # X makedepend
4597914d74bSmrg  shift
4607914d74bSmrg  cleared=no
4617914d74bSmrg  for arg in "$@"; do
4627914d74bSmrg    case $cleared in
4637914d74bSmrg    no)
4647914d74bSmrg      set ""; shift
4657914d74bSmrg      cleared=yes ;;
4667914d74bSmrg    esac
4677914d74bSmrg    case "$arg" in
4687914d74bSmrg    -D*|-I*)
4697914d74bSmrg      set fnord "$@" "$arg"; shift ;;
4707914d74bSmrg    # Strip any option that makedepend may not understand.  Remove
4717914d74bSmrg    # the object too, otherwise makedepend will parse it as a source file.
4727914d74bSmrg    -*|$object)
4737914d74bSmrg      ;;
4747914d74bSmrg    *)
4757914d74bSmrg      set fnord "$@" "$arg"; shift ;;
4767914d74bSmrg    esac
4777914d74bSmrg  done
4787914d74bSmrg  obj_suffix="`echo $object | sed 's/^.*\././'`"
4797914d74bSmrg  touch "$tmpdepfile"
4807914d74bSmrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
4817914d74bSmrg  rm -f "$depfile"
4827914d74bSmrg  cat < "$tmpdepfile" > "$depfile"
4837914d74bSmrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
4847914d74bSmrg' | \
4857914d74bSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
4867914d74bSmrg## correctly.  Breaking it into two sed invocations is a workaround.
4877914d74bSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
4887914d74bSmrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
4897914d74bSmrg  ;;
4907914d74bSmrg
4917914d74bSmrgcpp)
4927914d74bSmrg  # Important note: in order to support this mode, a compiler *must*
4937914d74bSmrg  # always write the preprocessed file to stdout.
4947914d74bSmrg  "$@" || exit $?
4957914d74bSmrg
4967914d74bSmrg  # Remove the call to Libtool.
4977914d74bSmrg  if test "$libtool" = yes; then
4987914d74bSmrg    while test $1 != '--mode=compile'; do
4997914d74bSmrg      shift
5007914d74bSmrg    done
5017914d74bSmrg    shift
5027914d74bSmrg  fi
5037914d74bSmrg
5047914d74bSmrg  # Remove `-o $object'.
5057914d74bSmrg  IFS=" "
5067914d74bSmrg  for arg
5077914d74bSmrg  do
5087914d74bSmrg    case $arg in
5097914d74bSmrg    -o)
5107914d74bSmrg      shift
5117914d74bSmrg      ;;
5127914d74bSmrg    $object)
5137914d74bSmrg      shift
5147914d74bSmrg      ;;
5157914d74bSmrg    *)
5167914d74bSmrg      set fnord "$@" "$arg"
5177914d74bSmrg      shift # fnord
5187914d74bSmrg      shift # $arg
5197914d74bSmrg      ;;
5207914d74bSmrg    esac
5217914d74bSmrg  done
5227914d74bSmrg
5237914d74bSmrg  "$@" -E |
5247914d74bSmrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
5257914d74bSmrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
5267914d74bSmrg    sed '$ s: \\$::' > "$tmpdepfile"
5277914d74bSmrg  rm -f "$depfile"
5287914d74bSmrg  echo "$object : \\" > "$depfile"
5297914d74bSmrg  cat < "$tmpdepfile" >> "$depfile"
5307914d74bSmrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
5317914d74bSmrg  rm -f "$tmpdepfile"
5327914d74bSmrg  ;;
5337914d74bSmrg
5347914d74bSmrgmsvisualcpp)
5357914d74bSmrg  # Important note: in order to support this mode, a compiler *must*
5367914d74bSmrg  # always write the preprocessed file to stdout, regardless of -o,
5377914d74bSmrg  # because we must use -o when running libtool.
5387914d74bSmrg  "$@" || exit $?
5397914d74bSmrg  IFS=" "
5407914d74bSmrg  for arg
5417914d74bSmrg  do
5427914d74bSmrg    case "$arg" in
5437914d74bSmrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
5447914d74bSmrg	set fnord "$@"
5457914d74bSmrg	shift
5467914d74bSmrg	shift
5477914d74bSmrg	;;
5487914d74bSmrg    *)
5497914d74bSmrg	set fnord "$@" "$arg"
5507914d74bSmrg	shift
5517914d74bSmrg	shift
5527914d74bSmrg	;;
5537914d74bSmrg    esac
5547914d74bSmrg  done
5557914d74bSmrg  "$@" -E |
5567914d74bSmrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
5577914d74bSmrg  rm -f "$depfile"
5587914d74bSmrg  echo "$object : \\" > "$depfile"
5597914d74bSmrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
5607914d74bSmrg  echo "	" >> "$depfile"
5617914d74bSmrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
5627914d74bSmrg  rm -f "$tmpdepfile"
5637914d74bSmrg  ;;
5647914d74bSmrg
5657914d74bSmrgnone)
5667914d74bSmrg  exec "$@"
5677914d74bSmrg  ;;
5687914d74bSmrg
5697914d74bSmrg*)
5707914d74bSmrg  echo "Unknown depmode $depmode" 1>&2
5717914d74bSmrg  exit 1
5727914d74bSmrg  ;;
5737914d74bSmrgesac
5747914d74bSmrg
5757914d74bSmrgexit 0
5767914d74bSmrg
5777914d74bSmrg# Local Variables:
5787914d74bSmrg# mode: shell-script
5797914d74bSmrg# sh-indentation: 2
5807914d74bSmrg# eval: (add-hook 'write-file-hooks 'time-stamp)
5817914d74bSmrg# time-stamp-start: "scriptversion="
5827914d74bSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
5837914d74bSmrg# time-stamp-end: "$"
5847914d74bSmrg# End:
585