depcomp revision 047944f3
17706df26Smrg#! /bin/sh
27706df26Smrg# depcomp - compile a program generating dependencies as side-effects
37706df26Smrg
4047944f3Smrgscriptversion=2007-03-29.01
57706df26Smrg
6047944f3Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software
7047944f3Smrg# 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
207706df26Smrg# along with this program; if not, write to the Free Software
217706df26Smrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
227706df26Smrg# 02110-1301, USA.
237706df26Smrg
247706df26Smrg# As a special exception to the GNU General Public License, if you
257706df26Smrg# distribute this file as part of a program that contains a
267706df26Smrg# configuration script generated by Autoconf, you may include it under
277706df26Smrg# the same distribution terms that you use for the rest of that program.
287706df26Smrg
297706df26Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
307706df26Smrg
317706df26Smrgcase $1 in
327706df26Smrg  '')
337706df26Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
347706df26Smrg     exit 1;
357706df26Smrg     ;;
367706df26Smrg  -h | --h*)
377706df26Smrg    cat <<\EOF
387706df26SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
397706df26Smrg
407706df26SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
417706df26Smrgas side-effects.
427706df26Smrg
437706df26SmrgEnvironment variables:
447706df26Smrg  depmode     Dependency tracking mode.
457706df26Smrg  source      Source file read by `PROGRAMS ARGS'.
467706df26Smrg  object      Object file output by `PROGRAMS ARGS'.
477706df26Smrg  DEPDIR      directory where to store dependencies.
487706df26Smrg  depfile     Dependency file to output.
497706df26Smrg  tmpdepfile  Temporary file to use when outputing dependencies.
507706df26Smrg  libtool     Whether libtool is used (yes/no).
517706df26Smrg
527706df26SmrgReport bugs to <bug-automake@gnu.org>.
537706df26SmrgEOF
547706df26Smrg    exit $?
557706df26Smrg    ;;
567706df26Smrg  -v | --v*)
577706df26Smrg    echo "depcomp $scriptversion"
587706df26Smrg    exit $?
597706df26Smrg    ;;
607706df26Smrgesac
617706df26Smrg
627706df26Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
637706df26Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
647706df26Smrg  exit 1
657706df26Smrgfi
667706df26Smrg
677706df26Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
687706df26Smrgdepfile=${depfile-`echo "$object" |
697706df26Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
707706df26Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
717706df26Smrg
727706df26Smrgrm -f "$tmpdepfile"
737706df26Smrg
747706df26Smrg# Some modes work just like other modes, but use different flags.  We
757706df26Smrg# parameterize here, but still list the modes in the big case below,
767706df26Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
777706df26Smrg# here, because this file can only contain one case statement.
787706df26Smrgif test "$depmode" = hp; then
797706df26Smrg  # HP compiler uses -M and no extra arg.
807706df26Smrg  gccflag=-M
817706df26Smrg  depmode=gcc
827706df26Smrgfi
837706df26Smrg
847706df26Smrgif test "$depmode" = dashXmstdout; then
857706df26Smrg   # This is just like dashmstdout with a different argument.
867706df26Smrg   dashmflag=-xM
877706df26Smrg   depmode=dashmstdout
887706df26Smrgfi
897706df26Smrg
907706df26Smrgcase "$depmode" in
917706df26Smrggcc3)
927706df26Smrg## gcc 3 implements dependency tracking that does exactly what
937706df26Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
947706df26Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
95047944f3Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
96047944f3Smrg## the command line argument order; so add the flags where they
97047944f3Smrg## appear in depend2.am.  Note that the slowdown incurred here
98047944f3Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
99047944f3Smrg  for arg
100047944f3Smrg  do
101047944f3Smrg    case $arg in
102047944f3Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
103047944f3Smrg    *)  set fnord "$@" "$arg" ;;
104047944f3Smrg    esac
105047944f3Smrg    shift # fnord
106047944f3Smrg    shift # $arg
107047944f3Smrg  done
108047944f3Smrg  "$@"
1097706df26Smrg  stat=$?
1107706df26Smrg  if test $stat -eq 0; then :
1117706df26Smrg  else
1127706df26Smrg    rm -f "$tmpdepfile"
1137706df26Smrg    exit $stat
1147706df26Smrg  fi
1157706df26Smrg  mv "$tmpdepfile" "$depfile"
1167706df26Smrg  ;;
1177706df26Smrg
1187706df26Smrggcc)
1197706df26Smrg## There are various ways to get dependency output from gcc.  Here's
1207706df26Smrg## why we pick this rather obscure method:
1217706df26Smrg## - Don't want to use -MD because we'd like the dependencies to end
1227706df26Smrg##   up in a subdir.  Having to rename by hand is ugly.
1237706df26Smrg##   (We might end up doing this anyway to support other compilers.)
1247706df26Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
1257706df26Smrg##   -MM, not -M (despite what the docs say).
1267706df26Smrg## - Using -M directly means running the compiler twice (even worse
1277706df26Smrg##   than renaming).
1287706df26Smrg  if test -z "$gccflag"; then
1297706df26Smrg    gccflag=-MD,
1307706df26Smrg  fi
1317706df26Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
1327706df26Smrg  stat=$?
1337706df26Smrg  if test $stat -eq 0; then :
1347706df26Smrg  else
1357706df26Smrg    rm -f "$tmpdepfile"
1367706df26Smrg    exit $stat
1377706df26Smrg  fi
1387706df26Smrg  rm -f "$depfile"
1397706df26Smrg  echo "$object : \\" > "$depfile"
1407706df26Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
1417706df26Smrg## The second -e expression handles DOS-style file names with drive letters.
1427706df26Smrg  sed -e 's/^[^:]*: / /' \
1437706df26Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
1447706df26Smrg## This next piece of magic avoids the `deleted header file' problem.
1457706df26Smrg## The problem is that when a header file which appears in a .P file
1467706df26Smrg## is deleted, the dependency causes make to die (because there is
1477706df26Smrg## typically no way to rebuild the header).  We avoid this by adding
1487706df26Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
1497706df26Smrg## this for us directly.
1507706df26Smrg  tr ' ' '
1517706df26Smrg' < "$tmpdepfile" |
1527706df26Smrg## Some versions of gcc put a space before the `:'.  On the theory
1537706df26Smrg## that the space means something, we add a space to the output as
1547706df26Smrg## well.
1557706df26Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
1567706df26Smrg## correctly.  Breaking it into two sed invocations is a workaround.
1577706df26Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
1587706df26Smrg  rm -f "$tmpdepfile"
1597706df26Smrg  ;;
1607706df26Smrg
1617706df26Smrghp)
1627706df26Smrg  # This case exists only to let depend.m4 do its work.  It works by
1637706df26Smrg  # looking at the text of this script.  This case will never be run,
1647706df26Smrg  # since it is checked for above.
1657706df26Smrg  exit 1
1667706df26Smrg  ;;
1677706df26Smrg
1687706df26Smrgsgi)
1697706df26Smrg  if test "$libtool" = yes; then
1707706df26Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
1717706df26Smrg  else
1727706df26Smrg    "$@" -MDupdate "$tmpdepfile"
1737706df26Smrg  fi
1747706df26Smrg  stat=$?
1757706df26Smrg  if test $stat -eq 0; then :
1767706df26Smrg  else
1777706df26Smrg    rm -f "$tmpdepfile"
1787706df26Smrg    exit $stat
1797706df26Smrg  fi
1807706df26Smrg  rm -f "$depfile"
1817706df26Smrg
1827706df26Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
1837706df26Smrg    echo "$object : \\" > "$depfile"
1847706df26Smrg
1857706df26Smrg    # Clip off the initial element (the dependent).  Don't try to be
1867706df26Smrg    # clever and replace this with sed code, as IRIX sed won't handle
1877706df26Smrg    # lines with more than a fixed number of characters (4096 in
1887706df26Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
1897706df26Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
1907706df26Smrg    # dependency line.
1917706df26Smrg    tr ' ' '
1927706df26Smrg' < "$tmpdepfile" \
1937706df26Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
1947706df26Smrg    tr '
1957706df26Smrg' ' ' >> $depfile
1967706df26Smrg    echo >> $depfile
1977706df26Smrg
1987706df26Smrg    # The second pass generates a dummy entry for each header file.
1997706df26Smrg    tr ' ' '
2007706df26Smrg' < "$tmpdepfile" \
2017706df26Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
2027706df26Smrg   >> $depfile
2037706df26Smrg  else
2047706df26Smrg    # The sourcefile does not contain any dependencies, so just
2057706df26Smrg    # store a dummy comment line, to avoid errors with the Makefile
2067706df26Smrg    # "include basename.Plo" scheme.
2077706df26Smrg    echo "#dummy" > "$depfile"
2087706df26Smrg  fi
2097706df26Smrg  rm -f "$tmpdepfile"
2107706df26Smrg  ;;
2117706df26Smrg
2127706df26Smrgaix)
2137706df26Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
2147706df26Smrg  # in a .u file.  In older versions, this file always lives in the
2157706df26Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
2167706df26Smrg  # start of each line; $object doesn't have directory information.
2177706df26Smrg  # Version 6 uses the directory in both cases.
218047944f3Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
219047944f3Smrg  test "x$dir" = "x$object" && dir=
220047944f3Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
2217706df26Smrg  if test "$libtool" = yes; then
222047944f3Smrg    tmpdepfile1=$dir$base.u
223047944f3Smrg    tmpdepfile2=$base.u
224047944f3Smrg    tmpdepfile3=$dir.libs/$base.u
2257706df26Smrg    "$@" -Wc,-M
2267706df26Smrg  else
227047944f3Smrg    tmpdepfile1=$dir$base.u
228047944f3Smrg    tmpdepfile2=$dir$base.u
229047944f3Smrg    tmpdepfile3=$dir$base.u
2307706df26Smrg    "$@" -M
2317706df26Smrg  fi
2327706df26Smrg  stat=$?
2337706df26Smrg
2347706df26Smrg  if test $stat -eq 0; then :
2357706df26Smrg  else
236047944f3Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2377706df26Smrg    exit $stat
2387706df26Smrg  fi
2397706df26Smrg
240047944f3Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
241047944f3Smrg  do
242047944f3Smrg    test -f "$tmpdepfile" && break
243047944f3Smrg  done
2447706df26Smrg  if test -f "$tmpdepfile"; then
2457706df26Smrg    # Each line is of the form `foo.o: dependent.h'.
2467706df26Smrg    # Do two passes, one to just change these to
2477706df26Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
248047944f3Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
249047944f3Smrg    # That's a tab and a space in the [].
250047944f3Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
2517706df26Smrg  else
2527706df26Smrg    # The sourcefile does not contain any dependencies, so just
2537706df26Smrg    # store a dummy comment line, to avoid errors with the Makefile
2547706df26Smrg    # "include basename.Plo" scheme.
2557706df26Smrg    echo "#dummy" > "$depfile"
2567706df26Smrg  fi
2577706df26Smrg  rm -f "$tmpdepfile"
2587706df26Smrg  ;;
2597706df26Smrg
2607706df26Smrgicc)
2617706df26Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
2627706df26Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
2637706df26Smrg  # ICC 7.0 will fill foo.d with something like
2647706df26Smrg  #    foo.o: sub/foo.c
2657706df26Smrg  #    foo.o: sub/foo.h
2667706df26Smrg  # which is wrong.  We want:
2677706df26Smrg  #    sub/foo.o: sub/foo.c
2687706df26Smrg  #    sub/foo.o: sub/foo.h
2697706df26Smrg  #    sub/foo.c:
2707706df26Smrg  #    sub/foo.h:
2717706df26Smrg  # ICC 7.1 will output
2727706df26Smrg  #    foo.o: sub/foo.c sub/foo.h
2737706df26Smrg  # and will wrap long lines using \ :
2747706df26Smrg  #    foo.o: sub/foo.c ... \
2757706df26Smrg  #     sub/foo.h ... \
2767706df26Smrg  #     ...
2777706df26Smrg
2787706df26Smrg  "$@" -MD -MF "$tmpdepfile"
2797706df26Smrg  stat=$?
2807706df26Smrg  if test $stat -eq 0; then :
2817706df26Smrg  else
2827706df26Smrg    rm -f "$tmpdepfile"
2837706df26Smrg    exit $stat
2847706df26Smrg  fi
2857706df26Smrg  rm -f "$depfile"
2867706df26Smrg  # Each line is of the form `foo.o: dependent.h',
2877706df26Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
2887706df26Smrg  # Do two passes, one to just change these to
2897706df26Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
2907706df26Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
2917706df26Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
2927706df26Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
2937706df26Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
2947706df26Smrg    sed -e 's/$/ :/' >> "$depfile"
2957706df26Smrg  rm -f "$tmpdepfile"
2967706df26Smrg  ;;
2977706df26Smrg
298047944f3Smrghp2)
299047944f3Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
300047944f3Smrg  # compilers, which have integrated preprocessors.  The correct option
301047944f3Smrg  # to use with these is +Maked; it writes dependencies to a file named
302047944f3Smrg  # 'foo.d', which lands next to the object file, wherever that
303047944f3Smrg  # happens to be.
304047944f3Smrg  # Much of this is similar to the tru64 case; see comments there.
305047944f3Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
306047944f3Smrg  test "x$dir" = "x$object" && dir=
307047944f3Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
308047944f3Smrg  if test "$libtool" = yes; then
309047944f3Smrg    tmpdepfile1=$dir$base.d
310047944f3Smrg    tmpdepfile2=$dir.libs/$base.d
311047944f3Smrg    "$@" -Wc,+Maked
312047944f3Smrg  else
313047944f3Smrg    tmpdepfile1=$dir$base.d
314047944f3Smrg    tmpdepfile2=$dir$base.d
315047944f3Smrg    "$@" +Maked
316047944f3Smrg  fi
317047944f3Smrg  stat=$?
318047944f3Smrg  if test $stat -eq 0; then :
319047944f3Smrg  else
320047944f3Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
321047944f3Smrg     exit $stat
322047944f3Smrg  fi
323047944f3Smrg
324047944f3Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
325047944f3Smrg  do
326047944f3Smrg    test -f "$tmpdepfile" && break
327047944f3Smrg  done
328047944f3Smrg  if test -f "$tmpdepfile"; then
329047944f3Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
330047944f3Smrg    # Add `dependent.h:' lines.
331047944f3Smrg    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
332047944f3Smrg  else
333047944f3Smrg    echo "#dummy" > "$depfile"
334047944f3Smrg  fi
335047944f3Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
336047944f3Smrg  ;;
337047944f3Smrg
3387706df26Smrgtru64)
3397706df26Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
3407706df26Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
3417706df26Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
3427706df26Smrg   # dependencies in `foo.d' instead, so we check for that too.
3437706df26Smrg   # Subdirectories are respected.
3447706df26Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3457706df26Smrg   test "x$dir" = "x$object" && dir=
3467706df26Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3477706df26Smrg
3487706df26Smrg   if test "$libtool" = yes; then
3497706df26Smrg      # With Tru64 cc, shared objects can also be used to make a
350047944f3Smrg      # static library.  This mechanism is used in libtool 1.4 series to
3517706df26Smrg      # handle both shared and static libraries in a single compilation.
3527706df26Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
3537706df26Smrg      #
3547706df26Smrg      # With libtool 1.5 this exception was removed, and libtool now
3557706df26Smrg      # generates 2 separate objects for the 2 libraries.  These two
356047944f3Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
3577706df26Smrg      # in $dir$base.o.d.  We have to check for both files, because
3587706df26Smrg      # one of the two compilations can be disabled.  We should prefer
3597706df26Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
3607706df26Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
3617706df26Smrg      # the former would cause a distcleancheck panic.
3627706df26Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
3637706df26Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
3647706df26Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
3657706df26Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
3667706df26Smrg      "$@" -Wc,-MD
3677706df26Smrg   else
3687706df26Smrg      tmpdepfile1=$dir$base.o.d
3697706df26Smrg      tmpdepfile2=$dir$base.d
3707706df26Smrg      tmpdepfile3=$dir$base.d
3717706df26Smrg      tmpdepfile4=$dir$base.d
3727706df26Smrg      "$@" -MD
3737706df26Smrg   fi
3747706df26Smrg
3757706df26Smrg   stat=$?
3767706df26Smrg   if test $stat -eq 0; then :
3777706df26Smrg   else
3787706df26Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3797706df26Smrg      exit $stat
3807706df26Smrg   fi
3817706df26Smrg
3827706df26Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3837706df26Smrg   do
3847706df26Smrg     test -f "$tmpdepfile" && break
3857706df26Smrg   done
3867706df26Smrg   if test -f "$tmpdepfile"; then
3877706df26Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
3887706df26Smrg      # That's a tab and a space in the [].
3897706df26Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
3907706df26Smrg   else
3917706df26Smrg      echo "#dummy" > "$depfile"
3927706df26Smrg   fi
3937706df26Smrg   rm -f "$tmpdepfile"
3947706df26Smrg   ;;
3957706df26Smrg
3967706df26Smrg#nosideeffect)
3977706df26Smrg  # This comment above is used by automake to tell side-effect
3987706df26Smrg  # dependency tracking mechanisms from slower ones.
3997706df26Smrg
4007706df26Smrgdashmstdout)
4017706df26Smrg  # Important note: in order to support this mode, a compiler *must*
4027706df26Smrg  # always write the preprocessed file to stdout, regardless of -o.
4037706df26Smrg  "$@" || exit $?
4047706df26Smrg
4057706df26Smrg  # Remove the call to Libtool.
4067706df26Smrg  if test "$libtool" = yes; then
4077706df26Smrg    while test $1 != '--mode=compile'; do
4087706df26Smrg      shift
4097706df26Smrg    done
4107706df26Smrg    shift
4117706df26Smrg  fi
4127706df26Smrg
4137706df26Smrg  # Remove `-o $object'.
4147706df26Smrg  IFS=" "
4157706df26Smrg  for arg
4167706df26Smrg  do
4177706df26Smrg    case $arg in
4187706df26Smrg    -o)
4197706df26Smrg      shift
4207706df26Smrg      ;;
4217706df26Smrg    $object)
4227706df26Smrg      shift
4237706df26Smrg      ;;
4247706df26Smrg    *)
4257706df26Smrg      set fnord "$@" "$arg"
4267706df26Smrg      shift # fnord
4277706df26Smrg      shift # $arg
4287706df26Smrg      ;;
4297706df26Smrg    esac
4307706df26Smrg  done
4317706df26Smrg
4327706df26Smrg  test -z "$dashmflag" && dashmflag=-M
4337706df26Smrg  # Require at least two characters before searching for `:'
4347706df26Smrg  # in the target name.  This is to cope with DOS-style filenames:
4357706df26Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
4367706df26Smrg  "$@" $dashmflag |
4377706df26Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
4387706df26Smrg  rm -f "$depfile"
4397706df26Smrg  cat < "$tmpdepfile" > "$depfile"
4407706df26Smrg  tr ' ' '
4417706df26Smrg' < "$tmpdepfile" | \
4427706df26Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
4437706df26Smrg## correctly.  Breaking it into two sed invocations is a workaround.
4447706df26Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
4457706df26Smrg  rm -f "$tmpdepfile"
4467706df26Smrg  ;;
4477706df26Smrg
4487706df26SmrgdashXmstdout)
4497706df26Smrg  # This case only exists to satisfy depend.m4.  It is never actually
4507706df26Smrg  # run, as this mode is specially recognized in the preamble.
4517706df26Smrg  exit 1
4527706df26Smrg  ;;
4537706df26Smrg
4547706df26Smrgmakedepend)
4557706df26Smrg  "$@" || exit $?
4567706df26Smrg  # Remove any Libtool call
4577706df26Smrg  if test "$libtool" = yes; then
4587706df26Smrg    while test $1 != '--mode=compile'; do
4597706df26Smrg      shift
4607706df26Smrg    done
4617706df26Smrg    shift
4627706df26Smrg  fi
4637706df26Smrg  # X makedepend
4647706df26Smrg  shift
4657706df26Smrg  cleared=no
4667706df26Smrg  for arg in "$@"; do
4677706df26Smrg    case $cleared in
4687706df26Smrg    no)
4697706df26Smrg      set ""; shift
4707706df26Smrg      cleared=yes ;;
4717706df26Smrg    esac
4727706df26Smrg    case "$arg" in
4737706df26Smrg    -D*|-I*)
4747706df26Smrg      set fnord "$@" "$arg"; shift ;;
4757706df26Smrg    # Strip any option that makedepend may not understand.  Remove
4767706df26Smrg    # the object too, otherwise makedepend will parse it as a source file.
4777706df26Smrg    -*|$object)
4787706df26Smrg      ;;
4797706df26Smrg    *)
4807706df26Smrg      set fnord "$@" "$arg"; shift ;;
4817706df26Smrg    esac
4827706df26Smrg  done
4837706df26Smrg  obj_suffix="`echo $object | sed 's/^.*\././'`"
4847706df26Smrg  touch "$tmpdepfile"
4857706df26Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
4867706df26Smrg  rm -f "$depfile"
4877706df26Smrg  cat < "$tmpdepfile" > "$depfile"
4887706df26Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
4897706df26Smrg' | \
4907706df26Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
4917706df26Smrg## correctly.  Breaking it into two sed invocations is a workaround.
4927706df26Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
4937706df26Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
4947706df26Smrg  ;;
4957706df26Smrg
4967706df26Smrgcpp)
4977706df26Smrg  # Important note: in order to support this mode, a compiler *must*
4987706df26Smrg  # always write the preprocessed file to stdout.
4997706df26Smrg  "$@" || exit $?
5007706df26Smrg
5017706df26Smrg  # Remove the call to Libtool.
5027706df26Smrg  if test "$libtool" = yes; then
5037706df26Smrg    while test $1 != '--mode=compile'; do
5047706df26Smrg      shift
5057706df26Smrg    done
5067706df26Smrg    shift
5077706df26Smrg  fi
5087706df26Smrg
5097706df26Smrg  # Remove `-o $object'.
5107706df26Smrg  IFS=" "
5117706df26Smrg  for arg
5127706df26Smrg  do
5137706df26Smrg    case $arg in
5147706df26Smrg    -o)
5157706df26Smrg      shift
5167706df26Smrg      ;;
5177706df26Smrg    $object)
5187706df26Smrg      shift
5197706df26Smrg      ;;
5207706df26Smrg    *)
5217706df26Smrg      set fnord "$@" "$arg"
5227706df26Smrg      shift # fnord
5237706df26Smrg      shift # $arg
5247706df26Smrg      ;;
5257706df26Smrg    esac
5267706df26Smrg  done
5277706df26Smrg
5287706df26Smrg  "$@" -E |
5297706df26Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
5307706df26Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
5317706df26Smrg    sed '$ s: \\$::' > "$tmpdepfile"
5327706df26Smrg  rm -f "$depfile"
5337706df26Smrg  echo "$object : \\" > "$depfile"
5347706df26Smrg  cat < "$tmpdepfile" >> "$depfile"
5357706df26Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
5367706df26Smrg  rm -f "$tmpdepfile"
5377706df26Smrg  ;;
5387706df26Smrg
5397706df26Smrgmsvisualcpp)
5407706df26Smrg  # Important note: in order to support this mode, a compiler *must*
5417706df26Smrg  # always write the preprocessed file to stdout, regardless of -o,
5427706df26Smrg  # because we must use -o when running libtool.
5437706df26Smrg  "$@" || exit $?
5447706df26Smrg  IFS=" "
5457706df26Smrg  for arg
5467706df26Smrg  do
5477706df26Smrg    case "$arg" in
5487706df26Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
5497706df26Smrg	set fnord "$@"
5507706df26Smrg	shift
5517706df26Smrg	shift
5527706df26Smrg	;;
5537706df26Smrg    *)
5547706df26Smrg	set fnord "$@" "$arg"
5557706df26Smrg	shift
5567706df26Smrg	shift
5577706df26Smrg	;;
5587706df26Smrg    esac
5597706df26Smrg  done
5607706df26Smrg  "$@" -E |
5617706df26Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
5627706df26Smrg  rm -f "$depfile"
5637706df26Smrg  echo "$object : \\" > "$depfile"
5647706df26Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
5657706df26Smrg  echo "	" >> "$depfile"
5667706df26Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
5677706df26Smrg  rm -f "$tmpdepfile"
5687706df26Smrg  ;;
5697706df26Smrg
5707706df26Smrgnone)
5717706df26Smrg  exec "$@"
5727706df26Smrg  ;;
5737706df26Smrg
5747706df26Smrg*)
5757706df26Smrg  echo "Unknown depmode $depmode" 1>&2
5767706df26Smrg  exit 1
5777706df26Smrg  ;;
5787706df26Smrgesac
5797706df26Smrg
5807706df26Smrgexit 0
5817706df26Smrg
5827706df26Smrg# Local Variables:
5837706df26Smrg# mode: shell-script
5847706df26Smrg# sh-indentation: 2
5857706df26Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
5867706df26Smrg# time-stamp-start: "scriptversion="
5877706df26Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
5887706df26Smrg# time-stamp-end: "$"
5897706df26Smrg# End:
590