17706df26Smrg#! /bin/sh
27706df26Smrg# depcomp - compile a program generating dependencies as side-effects
37706df26Smrg
4b92e825aSmrgscriptversion=2011-12-04.11; # UTC
57706df26Smrg
6b92e825aSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
7b92e825aSmrg# 2011 Free Software Foundation, Inc.
87706df26Smrg
97706df26Smrg# This program is free software; you can redistribute it and/or modify
107706df26Smrg# it under the terms of the GNU General Public License as published by
117706df26Smrg# the Free Software Foundation; either version 2, or (at your option)
127706df26Smrg# any later version.
137706df26Smrg
147706df26Smrg# This program is distributed in the hope that it will be useful,
157706df26Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
167706df26Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
177706df26Smrg# GNU General Public License for more details.
187706df26Smrg
197706df26Smrg# You should have received a copy of the GNU General Public License
207ae0a258Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
217706df26Smrg
227706df26Smrg# As a special exception to the GNU General Public License, if you
237706df26Smrg# distribute this file as part of a program that contains a
247706df26Smrg# configuration script generated by Autoconf, you may include it under
257706df26Smrg# the same distribution terms that you use for the rest of that program.
267706df26Smrg
277706df26Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
287706df26Smrg
297706df26Smrgcase $1 in
307706df26Smrg  '')
317706df26Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
327706df26Smrg     exit 1;
337706df26Smrg     ;;
347706df26Smrg  -h | --h*)
357706df26Smrg    cat <<\EOF
367706df26SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
377706df26Smrg
387706df26SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
397706df26Smrgas side-effects.
407706df26Smrg
417706df26SmrgEnvironment variables:
427706df26Smrg  depmode     Dependency tracking mode.
437706df26Smrg  source      Source file read by `PROGRAMS ARGS'.
447706df26Smrg  object      Object file output by `PROGRAMS ARGS'.
457706df26Smrg  DEPDIR      directory where to store dependencies.
467706df26Smrg  depfile     Dependency file to output.
47b92e825aSmrg  tmpdepfile  Temporary file to use when outputting dependencies.
487706df26Smrg  libtool     Whether libtool is used (yes/no).
497706df26Smrg
507706df26SmrgReport bugs to <bug-automake@gnu.org>.
517706df26SmrgEOF
527706df26Smrg    exit $?
537706df26Smrg    ;;
547706df26Smrg  -v | --v*)
557706df26Smrg    echo "depcomp $scriptversion"
567706df26Smrg    exit $?
577706df26Smrg    ;;
587706df26Smrgesac
597706df26Smrg
607706df26Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
617706df26Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
627706df26Smrg  exit 1
637706df26Smrgfi
647706df26Smrg
657706df26Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
667706df26Smrgdepfile=${depfile-`echo "$object" |
677706df26Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
687706df26Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
697706df26Smrg
707706df26Smrgrm -f "$tmpdepfile"
717706df26Smrg
727706df26Smrg# Some modes work just like other modes, but use different flags.  We
737706df26Smrg# parameterize here, but still list the modes in the big case below,
747706df26Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
757706df26Smrg# here, because this file can only contain one case statement.
767706df26Smrgif test "$depmode" = hp; then
777706df26Smrg  # HP compiler uses -M and no extra arg.
787706df26Smrg  gccflag=-M
797706df26Smrg  depmode=gcc
807706df26Smrgfi
817706df26Smrg
827706df26Smrgif test "$depmode" = dashXmstdout; then
837706df26Smrg   # This is just like dashmstdout with a different argument.
847706df26Smrg   dashmflag=-xM
857706df26Smrg   depmode=dashmstdout
867706df26Smrgfi
877706df26Smrg
887ae0a258Smrgcygpath_u="cygpath -u -f -"
897ae0a258Smrgif test "$depmode" = msvcmsys; then
907ae0a258Smrg   # This is just like msvisualcpp but w/o cygpath translation.
917ae0a258Smrg   # Just convert the backslash-escaped backslashes to single forward
927ae0a258Smrg   # slashes to satisfy depend.m4
93b92e825aSmrg   cygpath_u='sed s,\\\\,/,g'
947ae0a258Smrg   depmode=msvisualcpp
957ae0a258Smrgfi
967ae0a258Smrg
97b92e825aSmrgif test "$depmode" = msvc7msys; then
98b92e825aSmrg   # This is just like msvc7 but w/o cygpath translation.
99b92e825aSmrg   # Just convert the backslash-escaped backslashes to single forward
100b92e825aSmrg   # slashes to satisfy depend.m4
101b92e825aSmrg   cygpath_u='sed s,\\\\,/,g'
102b92e825aSmrg   depmode=msvc7
103b92e825aSmrgfi
104b92e825aSmrg
1057706df26Smrgcase "$depmode" in
1067706df26Smrggcc3)
1077706df26Smrg## gcc 3 implements dependency tracking that does exactly what
1087706df26Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
1097706df26Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
110047944f3Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
111047944f3Smrg## the command line argument order; so add the flags where they
112047944f3Smrg## appear in depend2.am.  Note that the slowdown incurred here
113047944f3Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
114047944f3Smrg  for arg
115047944f3Smrg  do
116047944f3Smrg    case $arg in
117047944f3Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
118047944f3Smrg    *)  set fnord "$@" "$arg" ;;
119047944f3Smrg    esac
120047944f3Smrg    shift # fnord
121047944f3Smrg    shift # $arg
122047944f3Smrg  done
123047944f3Smrg  "$@"
1247706df26Smrg  stat=$?
1257706df26Smrg  if test $stat -eq 0; then :
1267706df26Smrg  else
1277706df26Smrg    rm -f "$tmpdepfile"
1287706df26Smrg    exit $stat
1297706df26Smrg  fi
1307706df26Smrg  mv "$tmpdepfile" "$depfile"
1317706df26Smrg  ;;
1327706df26Smrg
1337706df26Smrggcc)
1347706df26Smrg## There are various ways to get dependency output from gcc.  Here's
1357706df26Smrg## why we pick this rather obscure method:
1367706df26Smrg## - Don't want to use -MD because we'd like the dependencies to end
1377706df26Smrg##   up in a subdir.  Having to rename by hand is ugly.
1387706df26Smrg##   (We might end up doing this anyway to support other compilers.)
1397706df26Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
1407706df26Smrg##   -MM, not -M (despite what the docs say).
1417706df26Smrg## - Using -M directly means running the compiler twice (even worse
1427706df26Smrg##   than renaming).
1437706df26Smrg  if test -z "$gccflag"; then
1447706df26Smrg    gccflag=-MD,
1457706df26Smrg  fi
1467706df26Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
1477706df26Smrg  stat=$?
1487706df26Smrg  if test $stat -eq 0; then :
1497706df26Smrg  else
1507706df26Smrg    rm -f "$tmpdepfile"
1517706df26Smrg    exit $stat
1527706df26Smrg  fi
1537706df26Smrg  rm -f "$depfile"
1547706df26Smrg  echo "$object : \\" > "$depfile"
1557706df26Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
1567706df26Smrg## The second -e expression handles DOS-style file names with drive letters.
1577706df26Smrg  sed -e 's/^[^:]*: / /' \
1587706df26Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
1597706df26Smrg## This next piece of magic avoids the `deleted header file' problem.
1607706df26Smrg## The problem is that when a header file which appears in a .P file
1617706df26Smrg## is deleted, the dependency causes make to die (because there is
1627706df26Smrg## typically no way to rebuild the header).  We avoid this by adding
1637706df26Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
1647706df26Smrg## this for us directly.
1657706df26Smrg  tr ' ' '
1667706df26Smrg' < "$tmpdepfile" |
1677706df26Smrg## Some versions of gcc put a space before the `:'.  On the theory
1687706df26Smrg## that the space means something, we add a space to the output as
169b92e825aSmrg## well.  hp depmode also adds that space, but also prefixes the VPATH
170b92e825aSmrg## to the object.  Take care to not repeat it in the output.
1717706df26Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
1727706df26Smrg## correctly.  Breaking it into two sed invocations is a workaround.
173b92e825aSmrg    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
174b92e825aSmrg      | sed -e 's/$/ :/' >> "$depfile"
1757706df26Smrg  rm -f "$tmpdepfile"
1767706df26Smrg  ;;
1777706df26Smrg
1787706df26Smrghp)
1797706df26Smrg  # This case exists only to let depend.m4 do its work.  It works by
1807706df26Smrg  # looking at the text of this script.  This case will never be run,
1817706df26Smrg  # since it is checked for above.
1827706df26Smrg  exit 1
1837706df26Smrg  ;;
1847706df26Smrg
1857706df26Smrgsgi)
1867706df26Smrg  if test "$libtool" = yes; then
1877706df26Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
1887706df26Smrg  else
1897706df26Smrg    "$@" -MDupdate "$tmpdepfile"
1907706df26Smrg  fi
1917706df26Smrg  stat=$?
1927706df26Smrg  if test $stat -eq 0; then :
1937706df26Smrg  else
1947706df26Smrg    rm -f "$tmpdepfile"
1957706df26Smrg    exit $stat
1967706df26Smrg  fi
1977706df26Smrg  rm -f "$depfile"
1987706df26Smrg
1997706df26Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
2007706df26Smrg    echo "$object : \\" > "$depfile"
2017706df26Smrg
2027706df26Smrg    # Clip off the initial element (the dependent).  Don't try to be
2037706df26Smrg    # clever and replace this with sed code, as IRIX sed won't handle
2047706df26Smrg    # lines with more than a fixed number of characters (4096 in
2057706df26Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
2067706df26Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
2077706df26Smrg    # dependency line.
2087706df26Smrg    tr ' ' '
2097706df26Smrg' < "$tmpdepfile" \
2107706df26Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
2117706df26Smrg    tr '
2127ae0a258Smrg' ' ' >> "$depfile"
2137ae0a258Smrg    echo >> "$depfile"
2147706df26Smrg
2157706df26Smrg    # The second pass generates a dummy entry for each header file.
2167706df26Smrg    tr ' ' '
2177706df26Smrg' < "$tmpdepfile" \
2187706df26Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
2197ae0a258Smrg   >> "$depfile"
2207706df26Smrg  else
2217706df26Smrg    # The sourcefile does not contain any dependencies, so just
2227706df26Smrg    # store a dummy comment line, to avoid errors with the Makefile
2237706df26Smrg    # "include basename.Plo" scheme.
2247706df26Smrg    echo "#dummy" > "$depfile"
2257706df26Smrg  fi
2267706df26Smrg  rm -f "$tmpdepfile"
2277706df26Smrg  ;;
2287706df26Smrg
2297706df26Smrgaix)
2307706df26Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
2317706df26Smrg  # in a .u file.  In older versions, this file always lives in the
2327706df26Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
2337706df26Smrg  # start of each line; $object doesn't have directory information.
2347706df26Smrg  # Version 6 uses the directory in both cases.
235047944f3Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
236047944f3Smrg  test "x$dir" = "x$object" && dir=
237047944f3Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
2387706df26Smrg  if test "$libtool" = yes; then
239047944f3Smrg    tmpdepfile1=$dir$base.u
240047944f3Smrg    tmpdepfile2=$base.u
241047944f3Smrg    tmpdepfile3=$dir.libs/$base.u
2427706df26Smrg    "$@" -Wc,-M
2437706df26Smrg  else
244047944f3Smrg    tmpdepfile1=$dir$base.u
245047944f3Smrg    tmpdepfile2=$dir$base.u
246047944f3Smrg    tmpdepfile3=$dir$base.u
2477706df26Smrg    "$@" -M
2487706df26Smrg  fi
2497706df26Smrg  stat=$?
2507706df26Smrg
2517706df26Smrg  if test $stat -eq 0; then :
2527706df26Smrg  else
253047944f3Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2547706df26Smrg    exit $stat
2557706df26Smrg  fi
2567706df26Smrg
257047944f3Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
258047944f3Smrg  do
259047944f3Smrg    test -f "$tmpdepfile" && break
260047944f3Smrg  done
2617706df26Smrg  if test -f "$tmpdepfile"; then
2627706df26Smrg    # Each line is of the form `foo.o: dependent.h'.
2637706df26Smrg    # Do two passes, one to just change these to
2647706df26Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
265047944f3Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
266047944f3Smrg    # That's a tab and a space in the [].
267047944f3Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
2687706df26Smrg  else
2697706df26Smrg    # The sourcefile does not contain any dependencies, so just
2707706df26Smrg    # store a dummy comment line, to avoid errors with the Makefile
2717706df26Smrg    # "include basename.Plo" scheme.
2727706df26Smrg    echo "#dummy" > "$depfile"
2737706df26Smrg  fi
2747706df26Smrg  rm -f "$tmpdepfile"
2757706df26Smrg  ;;
2767706df26Smrg
2777706df26Smrgicc)
2787706df26Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
2797706df26Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
2807706df26Smrg  # ICC 7.0 will fill foo.d with something like
2817706df26Smrg  #    foo.o: sub/foo.c
2827706df26Smrg  #    foo.o: sub/foo.h
2837706df26Smrg  # which is wrong.  We want:
2847706df26Smrg  #    sub/foo.o: sub/foo.c
2857706df26Smrg  #    sub/foo.o: sub/foo.h
2867706df26Smrg  #    sub/foo.c:
2877706df26Smrg  #    sub/foo.h:
2887706df26Smrg  # ICC 7.1 will output
2897706df26Smrg  #    foo.o: sub/foo.c sub/foo.h
2907706df26Smrg  # and will wrap long lines using \ :
2917706df26Smrg  #    foo.o: sub/foo.c ... \
2927706df26Smrg  #     sub/foo.h ... \
2937706df26Smrg  #     ...
2947706df26Smrg
2957706df26Smrg  "$@" -MD -MF "$tmpdepfile"
2967706df26Smrg  stat=$?
2977706df26Smrg  if test $stat -eq 0; then :
2987706df26Smrg  else
2997706df26Smrg    rm -f "$tmpdepfile"
3007706df26Smrg    exit $stat
3017706df26Smrg  fi
3027706df26Smrg  rm -f "$depfile"
3037706df26Smrg  # Each line is of the form `foo.o: dependent.h',
3047706df26Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
3057706df26Smrg  # Do two passes, one to just change these to
3067706df26Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
3077706df26Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
3087706df26Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
3097706df26Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
3107706df26Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
3117706df26Smrg    sed -e 's/$/ :/' >> "$depfile"
3127706df26Smrg  rm -f "$tmpdepfile"
3137706df26Smrg  ;;
3147706df26Smrg
315047944f3Smrghp2)
316047944f3Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
317047944f3Smrg  # compilers, which have integrated preprocessors.  The correct option
318047944f3Smrg  # to use with these is +Maked; it writes dependencies to a file named
319047944f3Smrg  # 'foo.d', which lands next to the object file, wherever that
320047944f3Smrg  # happens to be.
321047944f3Smrg  # Much of this is similar to the tru64 case; see comments there.
322047944f3Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
323047944f3Smrg  test "x$dir" = "x$object" && dir=
324047944f3Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
325047944f3Smrg  if test "$libtool" = yes; then
326047944f3Smrg    tmpdepfile1=$dir$base.d
327047944f3Smrg    tmpdepfile2=$dir.libs/$base.d
328047944f3Smrg    "$@" -Wc,+Maked
329047944f3Smrg  else
330047944f3Smrg    tmpdepfile1=$dir$base.d
331047944f3Smrg    tmpdepfile2=$dir$base.d
332047944f3Smrg    "$@" +Maked
333047944f3Smrg  fi
334047944f3Smrg  stat=$?
335047944f3Smrg  if test $stat -eq 0; then :
336047944f3Smrg  else
337047944f3Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
338047944f3Smrg     exit $stat
339047944f3Smrg  fi
340047944f3Smrg
341047944f3Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
342047944f3Smrg  do
343047944f3Smrg    test -f "$tmpdepfile" && break
344047944f3Smrg  done
345047944f3Smrg  if test -f "$tmpdepfile"; then
346047944f3Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
347047944f3Smrg    # Add `dependent.h:' lines.
3487ae0a258Smrg    sed -ne '2,${
3497ae0a258Smrg	       s/^ *//
3507ae0a258Smrg	       s/ \\*$//
3517ae0a258Smrg	       s/$/:/
3527ae0a258Smrg	       p
3537ae0a258Smrg	     }' "$tmpdepfile" >> "$depfile"
354047944f3Smrg  else
355047944f3Smrg    echo "#dummy" > "$depfile"
356047944f3Smrg  fi
357047944f3Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
358047944f3Smrg  ;;
359047944f3Smrg
3607706df26Smrgtru64)
3617706df26Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
3627706df26Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
3637706df26Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
3647706df26Smrg   # dependencies in `foo.d' instead, so we check for that too.
3657706df26Smrg   # Subdirectories are respected.
3667706df26Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3677706df26Smrg   test "x$dir" = "x$object" && dir=
3687706df26Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3697706df26Smrg
3707706df26Smrg   if test "$libtool" = yes; then
3717706df26Smrg      # With Tru64 cc, shared objects can also be used to make a
372047944f3Smrg      # static library.  This mechanism is used in libtool 1.4 series to
3737706df26Smrg      # handle both shared and static libraries in a single compilation.
3747706df26Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
3757706df26Smrg      #
3767706df26Smrg      # With libtool 1.5 this exception was removed, and libtool now
3777706df26Smrg      # generates 2 separate objects for the 2 libraries.  These two
378047944f3Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
3797706df26Smrg      # in $dir$base.o.d.  We have to check for both files, because
3807706df26Smrg      # one of the two compilations can be disabled.  We should prefer
3817706df26Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
3827706df26Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
3837706df26Smrg      # the former would cause a distcleancheck panic.
3847706df26Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
3857706df26Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
3867706df26Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
3877706df26Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
3887706df26Smrg      "$@" -Wc,-MD
3897706df26Smrg   else
3907706df26Smrg      tmpdepfile1=$dir$base.o.d
3917706df26Smrg      tmpdepfile2=$dir$base.d
3927706df26Smrg      tmpdepfile3=$dir$base.d
3937706df26Smrg      tmpdepfile4=$dir$base.d
3947706df26Smrg      "$@" -MD
3957706df26Smrg   fi
3967706df26Smrg
3977706df26Smrg   stat=$?
3987706df26Smrg   if test $stat -eq 0; then :
3997706df26Smrg   else
4007706df26Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
4017706df26Smrg      exit $stat
4027706df26Smrg   fi
4037706df26Smrg
4047706df26Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
4057706df26Smrg   do
4067706df26Smrg     test -f "$tmpdepfile" && break
4077706df26Smrg   done
4087706df26Smrg   if test -f "$tmpdepfile"; then
4097706df26Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
4107706df26Smrg      # That's a tab and a space in the [].
4117706df26Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
4127706df26Smrg   else
4137706df26Smrg      echo "#dummy" > "$depfile"
4147706df26Smrg   fi
4157706df26Smrg   rm -f "$tmpdepfile"
4167706df26Smrg   ;;
4177706df26Smrg
418b92e825aSmrgmsvc7)
419b92e825aSmrg  if test "$libtool" = yes; then
420b92e825aSmrg    showIncludes=-Wc,-showIncludes
421b92e825aSmrg  else
422b92e825aSmrg    showIncludes=-showIncludes
423b92e825aSmrg  fi
424b92e825aSmrg  "$@" $showIncludes > "$tmpdepfile"
425b92e825aSmrg  stat=$?
426b92e825aSmrg  grep -v '^Note: including file: ' "$tmpdepfile"
427b92e825aSmrg  if test "$stat" = 0; then :
428b92e825aSmrg  else
429b92e825aSmrg    rm -f "$tmpdepfile"
430b92e825aSmrg    exit $stat
431b92e825aSmrg  fi
432b92e825aSmrg  rm -f "$depfile"
433b92e825aSmrg  echo "$object : \\" > "$depfile"
434b92e825aSmrg  # The first sed program below extracts the file names and escapes
435b92e825aSmrg  # backslashes for cygpath.  The second sed program outputs the file
436b92e825aSmrg  # name when reading, but also accumulates all include files in the
437b92e825aSmrg  # hold buffer in order to output them again at the end.  This only
438b92e825aSmrg  # works with sed implementations that can handle large buffers.
439b92e825aSmrg  sed < "$tmpdepfile" -n '
440b92e825aSmrg/^Note: including file:  *\(.*\)/ {
441b92e825aSmrg  s//\1/
442b92e825aSmrg  s/\\/\\\\/g
443b92e825aSmrg  p
444b92e825aSmrg}' | $cygpath_u | sort -u | sed -n '
445b92e825aSmrgs/ /\\ /g
446b92e825aSmrgs/\(.*\)/	\1 \\/p
447b92e825aSmrgs/.\(.*\) \\/\1:/
448b92e825aSmrgH
449b92e825aSmrg$ {
450b92e825aSmrg  s/.*/	/
451b92e825aSmrg  G
452b92e825aSmrg  p
453b92e825aSmrg}' >> "$depfile"
454b92e825aSmrg  rm -f "$tmpdepfile"
455b92e825aSmrg  ;;
456b92e825aSmrg
457b92e825aSmrgmsvc7msys)
458b92e825aSmrg  # This case exists only to let depend.m4 do its work.  It works by
459b92e825aSmrg  # looking at the text of this script.  This case will never be run,
460b92e825aSmrg  # since it is checked for above.
461b92e825aSmrg  exit 1
462b92e825aSmrg  ;;
463b92e825aSmrg
4647706df26Smrg#nosideeffect)
4657706df26Smrg  # This comment above is used by automake to tell side-effect
4667706df26Smrg  # dependency tracking mechanisms from slower ones.
4677706df26Smrg
4687706df26Smrgdashmstdout)
4697706df26Smrg  # Important note: in order to support this mode, a compiler *must*
4707706df26Smrg  # always write the preprocessed file to stdout, regardless of -o.
4717706df26Smrg  "$@" || exit $?
4727706df26Smrg
4737706df26Smrg  # Remove the call to Libtool.
4747706df26Smrg  if test "$libtool" = yes; then
4757ae0a258Smrg    while test "X$1" != 'X--mode=compile'; do
4767706df26Smrg      shift
4777706df26Smrg    done
4787706df26Smrg    shift
4797706df26Smrg  fi
4807706df26Smrg
4817706df26Smrg  # Remove `-o $object'.
4827706df26Smrg  IFS=" "
4837706df26Smrg  for arg
4847706df26Smrg  do
4857706df26Smrg    case $arg in
4867706df26Smrg    -o)
4877706df26Smrg      shift
4887706df26Smrg      ;;
4897706df26Smrg    $object)
4907706df26Smrg      shift
4917706df26Smrg      ;;
4927706df26Smrg    *)
4937706df26Smrg      set fnord "$@" "$arg"
4947706df26Smrg      shift # fnord
4957706df26Smrg      shift # $arg
4967706df26Smrg      ;;
4977706df26Smrg    esac
4987706df26Smrg  done
4997706df26Smrg
5007706df26Smrg  test -z "$dashmflag" && dashmflag=-M
5017706df26Smrg  # Require at least two characters before searching for `:'
5027706df26Smrg  # in the target name.  This is to cope with DOS-style filenames:
5037706df26Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
5047706df26Smrg  "$@" $dashmflag |
5057706df26Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
5067706df26Smrg  rm -f "$depfile"
5077706df26Smrg  cat < "$tmpdepfile" > "$depfile"
5087706df26Smrg  tr ' ' '
5097706df26Smrg' < "$tmpdepfile" | \
5107706df26Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
5117706df26Smrg## correctly.  Breaking it into two sed invocations is a workaround.
5127706df26Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
5137706df26Smrg  rm -f "$tmpdepfile"
5147706df26Smrg  ;;
5157706df26Smrg
5167706df26SmrgdashXmstdout)
5177706df26Smrg  # This case only exists to satisfy depend.m4.  It is never actually
5187706df26Smrg  # run, as this mode is specially recognized in the preamble.
5197706df26Smrg  exit 1
5207706df26Smrg  ;;
5217706df26Smrg
5227706df26Smrgmakedepend)
5237706df26Smrg  "$@" || exit $?
5247706df26Smrg  # Remove any Libtool call
5257706df26Smrg  if test "$libtool" = yes; then
5267ae0a258Smrg    while test "X$1" != 'X--mode=compile'; do
5277706df26Smrg      shift
5287706df26Smrg    done
5297706df26Smrg    shift
5307706df26Smrg  fi
5317706df26Smrg  # X makedepend
5327706df26Smrg  shift
5337ae0a258Smrg  cleared=no eat=no
5347ae0a258Smrg  for arg
5357ae0a258Smrg  do
5367706df26Smrg    case $cleared in
5377706df26Smrg    no)
5387706df26Smrg      set ""; shift
5397706df26Smrg      cleared=yes ;;
5407706df26Smrg    esac
5417ae0a258Smrg    if test $eat = yes; then
5427ae0a258Smrg      eat=no
5437ae0a258Smrg      continue
5447ae0a258Smrg    fi
5457706df26Smrg    case "$arg" in
5467706df26Smrg    -D*|-I*)
5477706df26Smrg      set fnord "$@" "$arg"; shift ;;
5487706df26Smrg    # Strip any option that makedepend may not understand.  Remove
5497706df26Smrg    # the object too, otherwise makedepend will parse it as a source file.
5507ae0a258Smrg    -arch)
5517ae0a258Smrg      eat=yes ;;
5527706df26Smrg    -*|$object)
5537706df26Smrg      ;;
5547706df26Smrg    *)
5557706df26Smrg      set fnord "$@" "$arg"; shift ;;
5567706df26Smrg    esac
5577706df26Smrg  done
5587ae0a258Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
5597706df26Smrg  touch "$tmpdepfile"
5607706df26Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
5617706df26Smrg  rm -f "$depfile"
562b92e825aSmrg  # makedepend may prepend the VPATH from the source file name to the object.
563b92e825aSmrg  # No need to regex-escape $object, excess matching of '.' is harmless.
564b92e825aSmrg  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
5657706df26Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
5667706df26Smrg' | \
5677706df26Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
5687706df26Smrg## correctly.  Breaking it into two sed invocations is a workaround.
5697706df26Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
5707706df26Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
5717706df26Smrg  ;;
5727706df26Smrg
5737706df26Smrgcpp)
5747706df26Smrg  # Important note: in order to support this mode, a compiler *must*
5757706df26Smrg  # always write the preprocessed file to stdout.
5767706df26Smrg  "$@" || exit $?
5777706df26Smrg
5787706df26Smrg  # Remove the call to Libtool.
5797706df26Smrg  if test "$libtool" = yes; then
5807ae0a258Smrg    while test "X$1" != 'X--mode=compile'; do
5817706df26Smrg      shift
5827706df26Smrg    done
5837706df26Smrg    shift
5847706df26Smrg  fi
5857706df26Smrg
5867706df26Smrg  # Remove `-o $object'.
5877706df26Smrg  IFS=" "
5887706df26Smrg  for arg
5897706df26Smrg  do
5907706df26Smrg    case $arg in
5917706df26Smrg    -o)
5927706df26Smrg      shift
5937706df26Smrg      ;;
5947706df26Smrg    $object)
5957706df26Smrg      shift
5967706df26Smrg      ;;
5977706df26Smrg    *)
5987706df26Smrg      set fnord "$@" "$arg"
5997706df26Smrg      shift # fnord
6007706df26Smrg      shift # $arg
6017706df26Smrg      ;;
6027706df26Smrg    esac
6037706df26Smrg  done
6047706df26Smrg
6057706df26Smrg  "$@" -E |
6067706df26Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
6077706df26Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
6087706df26Smrg    sed '$ s: \\$::' > "$tmpdepfile"
6097706df26Smrg  rm -f "$depfile"
6107706df26Smrg  echo "$object : \\" > "$depfile"
6117706df26Smrg  cat < "$tmpdepfile" >> "$depfile"
6127706df26Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
6137706df26Smrg  rm -f "$tmpdepfile"
6147706df26Smrg  ;;
6157706df26Smrg
6167706df26Smrgmsvisualcpp)
6177706df26Smrg  # Important note: in order to support this mode, a compiler *must*
6187ae0a258Smrg  # always write the preprocessed file to stdout.
6197706df26Smrg  "$@" || exit $?
6207ae0a258Smrg
6217ae0a258Smrg  # Remove the call to Libtool.
6227ae0a258Smrg  if test "$libtool" = yes; then
6237ae0a258Smrg    while test "X$1" != 'X--mode=compile'; do
6247ae0a258Smrg      shift
6257ae0a258Smrg    done
6267ae0a258Smrg    shift
6277ae0a258Smrg  fi
6287ae0a258Smrg
6297706df26Smrg  IFS=" "
6307706df26Smrg  for arg
6317706df26Smrg  do
6327706df26Smrg    case "$arg" in
6337ae0a258Smrg    -o)
6347ae0a258Smrg      shift
6357ae0a258Smrg      ;;
6367ae0a258Smrg    $object)
6377ae0a258Smrg      shift
6387ae0a258Smrg      ;;
6397706df26Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
6407706df26Smrg	set fnord "$@"
6417706df26Smrg	shift
6427706df26Smrg	shift
6437706df26Smrg	;;
6447706df26Smrg    *)
6457706df26Smrg	set fnord "$@" "$arg"
6467706df26Smrg	shift
6477706df26Smrg	shift
6487706df26Smrg	;;
6497706df26Smrg    esac
6507706df26Smrg  done
6517ae0a258Smrg  "$@" -E 2>/dev/null |
6527ae0a258Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
6537706df26Smrg  rm -f "$depfile"
6547706df26Smrg  echo "$object : \\" > "$depfile"
6557ae0a258Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
6567706df26Smrg  echo "	" >> "$depfile"
6577ae0a258Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
6587706df26Smrg  rm -f "$tmpdepfile"
6597706df26Smrg  ;;
6607706df26Smrg
6617ae0a258Smrgmsvcmsys)
6627ae0a258Smrg  # This case exists only to let depend.m4 do its work.  It works by
6637ae0a258Smrg  # looking at the text of this script.  This case will never be run,
6647ae0a258Smrg  # since it is checked for above.
6657ae0a258Smrg  exit 1
6667ae0a258Smrg  ;;
6677ae0a258Smrg
6687706df26Smrgnone)
6697706df26Smrg  exec "$@"
6707706df26Smrg  ;;
6717706df26Smrg
6727706df26Smrg*)
6737706df26Smrg  echo "Unknown depmode $depmode" 1>&2
6747706df26Smrg  exit 1
6757706df26Smrg  ;;
6767706df26Smrgesac
6777706df26Smrg
6787706df26Smrgexit 0
6797706df26Smrg
6807706df26Smrg# Local Variables:
6817706df26Smrg# mode: shell-script
6827706df26Smrg# sh-indentation: 2
6837706df26Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
6847706df26Smrg# time-stamp-start: "scriptversion="
6857706df26Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
6867ae0a258Smrg# time-stamp-time-zone: "UTC"
6877ae0a258Smrg# time-stamp-end: "; # UTC"
6887706df26Smrg# End:
689