depcomp revision 9f606849
19f606849Smrg#! /bin/sh
29f606849Smrg# depcomp - compile a program generating dependencies as side-effects
39f606849Smrg
49f606849Smrgscriptversion=2006-10-15.18
59f606849Smrg
69f606849Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software
79f606849Smrg# Foundation, Inc.
89f606849Smrg
99f606849Smrg# This program is free software; you can redistribute it and/or modify
109f606849Smrg# it under the terms of the GNU General Public License as published by
119f606849Smrg# the Free Software Foundation; either version 2, or (at your option)
129f606849Smrg# any later version.
139f606849Smrg
149f606849Smrg# This program is distributed in the hope that it will be useful,
159f606849Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
169f606849Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
179f606849Smrg# GNU General Public License for more details.
189f606849Smrg
199f606849Smrg# You should have received a copy of the GNU General Public License
209f606849Smrg# along with this program; if not, write to the Free Software
219f606849Smrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
229f606849Smrg# 02110-1301, USA.
239f606849Smrg
249f606849Smrg# As a special exception to the GNU General Public License, if you
259f606849Smrg# distribute this file as part of a program that contains a
269f606849Smrg# configuration script generated by Autoconf, you may include it under
279f606849Smrg# the same distribution terms that you use for the rest of that program.
289f606849Smrg
299f606849Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
309f606849Smrg
319f606849Smrgcase $1 in
329f606849Smrg  '')
339f606849Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
349f606849Smrg     exit 1;
359f606849Smrg     ;;
369f606849Smrg  -h | --h*)
379f606849Smrg    cat <<\EOF
389f606849SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
399f606849Smrg
409f606849SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
419f606849Smrgas side-effects.
429f606849Smrg
439f606849SmrgEnvironment variables:
449f606849Smrg  depmode     Dependency tracking mode.
459f606849Smrg  source      Source file read by `PROGRAMS ARGS'.
469f606849Smrg  object      Object file output by `PROGRAMS ARGS'.
479f606849Smrg  DEPDIR      directory where to store dependencies.
489f606849Smrg  depfile     Dependency file to output.
499f606849Smrg  tmpdepfile  Temporary file to use when outputing dependencies.
509f606849Smrg  libtool     Whether libtool is used (yes/no).
519f606849Smrg
529f606849SmrgReport bugs to <bug-automake@gnu.org>.
539f606849SmrgEOF
549f606849Smrg    exit $?
559f606849Smrg    ;;
569f606849Smrg  -v | --v*)
579f606849Smrg    echo "depcomp $scriptversion"
589f606849Smrg    exit $?
599f606849Smrg    ;;
609f606849Smrgesac
619f606849Smrg
629f606849Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
639f606849Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
649f606849Smrg  exit 1
659f606849Smrgfi
669f606849Smrg
679f606849Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
689f606849Smrgdepfile=${depfile-`echo "$object" |
699f606849Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
709f606849Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
719f606849Smrg
729f606849Smrgrm -f "$tmpdepfile"
739f606849Smrg
749f606849Smrg# Some modes work just like other modes, but use different flags.  We
759f606849Smrg# parameterize here, but still list the modes in the big case below,
769f606849Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
779f606849Smrg# here, because this file can only contain one case statement.
789f606849Smrgif test "$depmode" = hp; then
799f606849Smrg  # HP compiler uses -M and no extra arg.
809f606849Smrg  gccflag=-M
819f606849Smrg  depmode=gcc
829f606849Smrgfi
839f606849Smrg
849f606849Smrgif test "$depmode" = dashXmstdout; then
859f606849Smrg   # This is just like dashmstdout with a different argument.
869f606849Smrg   dashmflag=-xM
879f606849Smrg   depmode=dashmstdout
889f606849Smrgfi
899f606849Smrg
909f606849Smrgcase "$depmode" in
919f606849Smrggcc3)
929f606849Smrg## gcc 3 implements dependency tracking that does exactly what
939f606849Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
949f606849Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
959f606849Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
969f606849Smrg## the command line argument order; so add the flags where they
979f606849Smrg## appear in depend2.am.  Note that the slowdown incurred here
989f606849Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
999f606849Smrg  for arg
1009f606849Smrg  do
1019f606849Smrg    case $arg in
1029f606849Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
1039f606849Smrg    *)  set fnord "$@" "$arg" ;;
1049f606849Smrg    esac
1059f606849Smrg    shift # fnord
1069f606849Smrg    shift # $arg
1079f606849Smrg  done
1089f606849Smrg  "$@"
1099f606849Smrg  stat=$?
1109f606849Smrg  if test $stat -eq 0; then :
1119f606849Smrg  else
1129f606849Smrg    rm -f "$tmpdepfile"
1139f606849Smrg    exit $stat
1149f606849Smrg  fi
1159f606849Smrg  mv "$tmpdepfile" "$depfile"
1169f606849Smrg  ;;
1179f606849Smrg
1189f606849Smrggcc)
1199f606849Smrg## There are various ways to get dependency output from gcc.  Here's
1209f606849Smrg## why we pick this rather obscure method:
1219f606849Smrg## - Don't want to use -MD because we'd like the dependencies to end
1229f606849Smrg##   up in a subdir.  Having to rename by hand is ugly.
1239f606849Smrg##   (We might end up doing this anyway to support other compilers.)
1249f606849Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
1259f606849Smrg##   -MM, not -M (despite what the docs say).
1269f606849Smrg## - Using -M directly means running the compiler twice (even worse
1279f606849Smrg##   than renaming).
1289f606849Smrg  if test -z "$gccflag"; then
1299f606849Smrg    gccflag=-MD,
1309f606849Smrg  fi
1319f606849Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
1329f606849Smrg  stat=$?
1339f606849Smrg  if test $stat -eq 0; then :
1349f606849Smrg  else
1359f606849Smrg    rm -f "$tmpdepfile"
1369f606849Smrg    exit $stat
1379f606849Smrg  fi
1389f606849Smrg  rm -f "$depfile"
1399f606849Smrg  echo "$object : \\" > "$depfile"
1409f606849Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
1419f606849Smrg## The second -e expression handles DOS-style file names with drive letters.
1429f606849Smrg  sed -e 's/^[^:]*: / /' \
1439f606849Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
1449f606849Smrg## This next piece of magic avoids the `deleted header file' problem.
1459f606849Smrg## The problem is that when a header file which appears in a .P file
1469f606849Smrg## is deleted, the dependency causes make to die (because there is
1479f606849Smrg## typically no way to rebuild the header).  We avoid this by adding
1489f606849Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
1499f606849Smrg## this for us directly.
1509f606849Smrg  tr ' ' '
1519f606849Smrg' < "$tmpdepfile" |
1529f606849Smrg## Some versions of gcc put a space before the `:'.  On the theory
1539f606849Smrg## that the space means something, we add a space to the output as
1549f606849Smrg## well.
1559f606849Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
1569f606849Smrg## correctly.  Breaking it into two sed invocations is a workaround.
1579f606849Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
1589f606849Smrg  rm -f "$tmpdepfile"
1599f606849Smrg  ;;
1609f606849Smrg
1619f606849Smrghp)
1629f606849Smrg  # This case exists only to let depend.m4 do its work.  It works by
1639f606849Smrg  # looking at the text of this script.  This case will never be run,
1649f606849Smrg  # since it is checked for above.
1659f606849Smrg  exit 1
1669f606849Smrg  ;;
1679f606849Smrg
1689f606849Smrgsgi)
1699f606849Smrg  if test "$libtool" = yes; then
1709f606849Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
1719f606849Smrg  else
1729f606849Smrg    "$@" -MDupdate "$tmpdepfile"
1739f606849Smrg  fi
1749f606849Smrg  stat=$?
1759f606849Smrg  if test $stat -eq 0; then :
1769f606849Smrg  else
1779f606849Smrg    rm -f "$tmpdepfile"
1789f606849Smrg    exit $stat
1799f606849Smrg  fi
1809f606849Smrg  rm -f "$depfile"
1819f606849Smrg
1829f606849Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
1839f606849Smrg    echo "$object : \\" > "$depfile"
1849f606849Smrg
1859f606849Smrg    # Clip off the initial element (the dependent).  Don't try to be
1869f606849Smrg    # clever and replace this with sed code, as IRIX sed won't handle
1879f606849Smrg    # lines with more than a fixed number of characters (4096 in
1889f606849Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
1899f606849Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
1909f606849Smrg    # dependency line.
1919f606849Smrg    tr ' ' '
1929f606849Smrg' < "$tmpdepfile" \
1939f606849Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
1949f606849Smrg    tr '
1959f606849Smrg' ' ' >> $depfile
1969f606849Smrg    echo >> $depfile
1979f606849Smrg
1989f606849Smrg    # The second pass generates a dummy entry for each header file.
1999f606849Smrg    tr ' ' '
2009f606849Smrg' < "$tmpdepfile" \
2019f606849Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
2029f606849Smrg   >> $depfile
2039f606849Smrg  else
2049f606849Smrg    # The sourcefile does not contain any dependencies, so just
2059f606849Smrg    # store a dummy comment line, to avoid errors with the Makefile
2069f606849Smrg    # "include basename.Plo" scheme.
2079f606849Smrg    echo "#dummy" > "$depfile"
2089f606849Smrg  fi
2099f606849Smrg  rm -f "$tmpdepfile"
2109f606849Smrg  ;;
2119f606849Smrg
2129f606849Smrgaix)
2139f606849Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
2149f606849Smrg  # in a .u file.  In older versions, this file always lives in the
2159f606849Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
2169f606849Smrg  # start of each line; $object doesn't have directory information.
2179f606849Smrg  # Version 6 uses the directory in both cases.
2189f606849Smrg  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
2199f606849Smrg  tmpdepfile="$stripped.u"
2209f606849Smrg  if test "$libtool" = yes; then
2219f606849Smrg    "$@" -Wc,-M
2229f606849Smrg  else
2239f606849Smrg    "$@" -M
2249f606849Smrg  fi
2259f606849Smrg  stat=$?
2269f606849Smrg
2279f606849Smrg  if test -f "$tmpdepfile"; then :
2289f606849Smrg  else
2299f606849Smrg    stripped=`echo "$stripped" | sed 's,^.*/,,'`
2309f606849Smrg    tmpdepfile="$stripped.u"
2319f606849Smrg  fi
2329f606849Smrg
2339f606849Smrg  if test $stat -eq 0; then :
2349f606849Smrg  else
2359f606849Smrg    rm -f "$tmpdepfile"
2369f606849Smrg    exit $stat
2379f606849Smrg  fi
2389f606849Smrg
2399f606849Smrg  if test -f "$tmpdepfile"; then
2409f606849Smrg    outname="$stripped.o"
2419f606849Smrg    # Each line is of the form `foo.o: dependent.h'.
2429f606849Smrg    # Do two passes, one to just change these to
2439f606849Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
2449f606849Smrg    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
2459f606849Smrg    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
2469f606849Smrg  else
2479f606849Smrg    # The sourcefile does not contain any dependencies, so just
2489f606849Smrg    # store a dummy comment line, to avoid errors with the Makefile
2499f606849Smrg    # "include basename.Plo" scheme.
2509f606849Smrg    echo "#dummy" > "$depfile"
2519f606849Smrg  fi
2529f606849Smrg  rm -f "$tmpdepfile"
2539f606849Smrg  ;;
2549f606849Smrg
2559f606849Smrgicc)
2569f606849Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
2579f606849Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
2589f606849Smrg  # ICC 7.0 will fill foo.d with something like
2599f606849Smrg  #    foo.o: sub/foo.c
2609f606849Smrg  #    foo.o: sub/foo.h
2619f606849Smrg  # which is wrong.  We want:
2629f606849Smrg  #    sub/foo.o: sub/foo.c
2639f606849Smrg  #    sub/foo.o: sub/foo.h
2649f606849Smrg  #    sub/foo.c:
2659f606849Smrg  #    sub/foo.h:
2669f606849Smrg  # ICC 7.1 will output
2679f606849Smrg  #    foo.o: sub/foo.c sub/foo.h
2689f606849Smrg  # and will wrap long lines using \ :
2699f606849Smrg  #    foo.o: sub/foo.c ... \
2709f606849Smrg  #     sub/foo.h ... \
2719f606849Smrg  #     ...
2729f606849Smrg
2739f606849Smrg  "$@" -MD -MF "$tmpdepfile"
2749f606849Smrg  stat=$?
2759f606849Smrg  if test $stat -eq 0; then :
2769f606849Smrg  else
2779f606849Smrg    rm -f "$tmpdepfile"
2789f606849Smrg    exit $stat
2799f606849Smrg  fi
2809f606849Smrg  rm -f "$depfile"
2819f606849Smrg  # Each line is of the form `foo.o: dependent.h',
2829f606849Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
2839f606849Smrg  # Do two passes, one to just change these to
2849f606849Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
2859f606849Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
2869f606849Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
2879f606849Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
2889f606849Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
2899f606849Smrg    sed -e 's/$/ :/' >> "$depfile"
2909f606849Smrg  rm -f "$tmpdepfile"
2919f606849Smrg  ;;
2929f606849Smrg
2939f606849Smrghp2)
2949f606849Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
2959f606849Smrg  # compilers, which have integrated preprocessors.  The correct option
2969f606849Smrg  # to use with these is +Maked; it writes dependencies to a file named
2979f606849Smrg  # 'foo.d', which lands next to the object file, wherever that
2989f606849Smrg  # happens to be.
2999f606849Smrg  # Much of this is similar to the tru64 case; see comments there.
3009f606849Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3019f606849Smrg  test "x$dir" = "x$object" && dir=
3029f606849Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3039f606849Smrg  if test "$libtool" = yes; then
3049f606849Smrg    tmpdepfile1=$dir$base.d
3059f606849Smrg    tmpdepfile2=$dir.libs/$base.d
3069f606849Smrg    "$@" -Wc,+Maked
3079f606849Smrg  else
3089f606849Smrg    tmpdepfile1=$dir$base.d
3099f606849Smrg    tmpdepfile2=$dir$base.d
3109f606849Smrg    "$@" +Maked
3119f606849Smrg  fi
3129f606849Smrg  stat=$?
3139f606849Smrg  if test $stat -eq 0; then :
3149f606849Smrg  else
3159f606849Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
3169f606849Smrg     exit $stat
3179f606849Smrg  fi
3189f606849Smrg
3199f606849Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
3209f606849Smrg  do
3219f606849Smrg    test -f "$tmpdepfile" && break
3229f606849Smrg  done
3239f606849Smrg  if test -f "$tmpdepfile"; then
3249f606849Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
3259f606849Smrg    # Add `dependent.h:' lines.
3269f606849Smrg    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
3279f606849Smrg  else
3289f606849Smrg    echo "#dummy" > "$depfile"
3299f606849Smrg  fi
3309f606849Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
3319f606849Smrg  ;;
3329f606849Smrg
3339f606849Smrgtru64)
3349f606849Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
3359f606849Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
3369f606849Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
3379f606849Smrg   # dependencies in `foo.d' instead, so we check for that too.
3389f606849Smrg   # Subdirectories are respected.
3399f606849Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3409f606849Smrg   test "x$dir" = "x$object" && dir=
3419f606849Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3429f606849Smrg
3439f606849Smrg   if test "$libtool" = yes; then
3449f606849Smrg      # With Tru64 cc, shared objects can also be used to make a
3459f606849Smrg      # static library.  This mechanism is used in libtool 1.4 series to
3469f606849Smrg      # handle both shared and static libraries in a single compilation.
3479f606849Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
3489f606849Smrg      #
3499f606849Smrg      # With libtool 1.5 this exception was removed, and libtool now
3509f606849Smrg      # generates 2 separate objects for the 2 libraries.  These two
3519f606849Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
3529f606849Smrg      # in $dir$base.o.d.  We have to check for both files, because
3539f606849Smrg      # one of the two compilations can be disabled.  We should prefer
3549f606849Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
3559f606849Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
3569f606849Smrg      # the former would cause a distcleancheck panic.
3579f606849Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
3589f606849Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
3599f606849Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
3609f606849Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
3619f606849Smrg      "$@" -Wc,-MD
3629f606849Smrg   else
3639f606849Smrg      tmpdepfile1=$dir$base.o.d
3649f606849Smrg      tmpdepfile2=$dir$base.d
3659f606849Smrg      tmpdepfile3=$dir$base.d
3669f606849Smrg      tmpdepfile4=$dir$base.d
3679f606849Smrg      "$@" -MD
3689f606849Smrg   fi
3699f606849Smrg
3709f606849Smrg   stat=$?
3719f606849Smrg   if test $stat -eq 0; then :
3729f606849Smrg   else
3739f606849Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3749f606849Smrg      exit $stat
3759f606849Smrg   fi
3769f606849Smrg
3779f606849Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3789f606849Smrg   do
3799f606849Smrg     test -f "$tmpdepfile" && break
3809f606849Smrg   done
3819f606849Smrg   if test -f "$tmpdepfile"; then
3829f606849Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
3839f606849Smrg      # That's a tab and a space in the [].
3849f606849Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
3859f606849Smrg   else
3869f606849Smrg      echo "#dummy" > "$depfile"
3879f606849Smrg   fi
3889f606849Smrg   rm -f "$tmpdepfile"
3899f606849Smrg   ;;
3909f606849Smrg
3919f606849Smrg#nosideeffect)
3929f606849Smrg  # This comment above is used by automake to tell side-effect
3939f606849Smrg  # dependency tracking mechanisms from slower ones.
3949f606849Smrg
3959f606849Smrgdashmstdout)
3969f606849Smrg  # Important note: in order to support this mode, a compiler *must*
3979f606849Smrg  # always write the preprocessed file to stdout, regardless of -o.
3989f606849Smrg  "$@" || exit $?
3999f606849Smrg
4009f606849Smrg  # Remove the call to Libtool.
4019f606849Smrg  if test "$libtool" = yes; then
4029f606849Smrg    while test $1 != '--mode=compile'; do
4039f606849Smrg      shift
4049f606849Smrg    done
4059f606849Smrg    shift
4069f606849Smrg  fi
4079f606849Smrg
4089f606849Smrg  # Remove `-o $object'.
4099f606849Smrg  IFS=" "
4109f606849Smrg  for arg
4119f606849Smrg  do
4129f606849Smrg    case $arg in
4139f606849Smrg    -o)
4149f606849Smrg      shift
4159f606849Smrg      ;;
4169f606849Smrg    $object)
4179f606849Smrg      shift
4189f606849Smrg      ;;
4199f606849Smrg    *)
4209f606849Smrg      set fnord "$@" "$arg"
4219f606849Smrg      shift # fnord
4229f606849Smrg      shift # $arg
4239f606849Smrg      ;;
4249f606849Smrg    esac
4259f606849Smrg  done
4269f606849Smrg
4279f606849Smrg  test -z "$dashmflag" && dashmflag=-M
4289f606849Smrg  # Require at least two characters before searching for `:'
4299f606849Smrg  # in the target name.  This is to cope with DOS-style filenames:
4309f606849Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
4319f606849Smrg  "$@" $dashmflag |
4329f606849Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
4339f606849Smrg  rm -f "$depfile"
4349f606849Smrg  cat < "$tmpdepfile" > "$depfile"
4359f606849Smrg  tr ' ' '
4369f606849Smrg' < "$tmpdepfile" | \
4379f606849Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
4389f606849Smrg## correctly.  Breaking it into two sed invocations is a workaround.
4399f606849Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
4409f606849Smrg  rm -f "$tmpdepfile"
4419f606849Smrg  ;;
4429f606849Smrg
4439f606849SmrgdashXmstdout)
4449f606849Smrg  # This case only exists to satisfy depend.m4.  It is never actually
4459f606849Smrg  # run, as this mode is specially recognized in the preamble.
4469f606849Smrg  exit 1
4479f606849Smrg  ;;
4489f606849Smrg
4499f606849Smrgmakedepend)
4509f606849Smrg  "$@" || exit $?
4519f606849Smrg  # Remove any Libtool call
4529f606849Smrg  if test "$libtool" = yes; then
4539f606849Smrg    while test $1 != '--mode=compile'; do
4549f606849Smrg      shift
4559f606849Smrg    done
4569f606849Smrg    shift
4579f606849Smrg  fi
4589f606849Smrg  # X makedepend
4599f606849Smrg  shift
4609f606849Smrg  cleared=no
4619f606849Smrg  for arg in "$@"; do
4629f606849Smrg    case $cleared in
4639f606849Smrg    no)
4649f606849Smrg      set ""; shift
4659f606849Smrg      cleared=yes ;;
4669f606849Smrg    esac
4679f606849Smrg    case "$arg" in
4689f606849Smrg    -D*|-I*)
4699f606849Smrg      set fnord "$@" "$arg"; shift ;;
4709f606849Smrg    # Strip any option that makedepend may not understand.  Remove
4719f606849Smrg    # the object too, otherwise makedepend will parse it as a source file.
4729f606849Smrg    -*|$object)
4739f606849Smrg      ;;
4749f606849Smrg    *)
4759f606849Smrg      set fnord "$@" "$arg"; shift ;;
4769f606849Smrg    esac
4779f606849Smrg  done
4789f606849Smrg  obj_suffix="`echo $object | sed 's/^.*\././'`"
4799f606849Smrg  touch "$tmpdepfile"
4809f606849Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
4819f606849Smrg  rm -f "$depfile"
4829f606849Smrg  cat < "$tmpdepfile" > "$depfile"
4839f606849Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
4849f606849Smrg' | \
4859f606849Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
4869f606849Smrg## correctly.  Breaking it into two sed invocations is a workaround.
4879f606849Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
4889f606849Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
4899f606849Smrg  ;;
4909f606849Smrg
4919f606849Smrgcpp)
4929f606849Smrg  # Important note: in order to support this mode, a compiler *must*
4939f606849Smrg  # always write the preprocessed file to stdout.
4949f606849Smrg  "$@" || exit $?
4959f606849Smrg
4969f606849Smrg  # Remove the call to Libtool.
4979f606849Smrg  if test "$libtool" = yes; then
4989f606849Smrg    while test $1 != '--mode=compile'; do
4999f606849Smrg      shift
5009f606849Smrg    done
5019f606849Smrg    shift
5029f606849Smrg  fi
5039f606849Smrg
5049f606849Smrg  # Remove `-o $object'.
5059f606849Smrg  IFS=" "
5069f606849Smrg  for arg
5079f606849Smrg  do
5089f606849Smrg    case $arg in
5099f606849Smrg    -o)
5109f606849Smrg      shift
5119f606849Smrg      ;;
5129f606849Smrg    $object)
5139f606849Smrg      shift
5149f606849Smrg      ;;
5159f606849Smrg    *)
5169f606849Smrg      set fnord "$@" "$arg"
5179f606849Smrg      shift # fnord
5189f606849Smrg      shift # $arg
5199f606849Smrg      ;;
5209f606849Smrg    esac
5219f606849Smrg  done
5229f606849Smrg
5239f606849Smrg  "$@" -E |
5249f606849Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
5259f606849Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
5269f606849Smrg    sed '$ s: \\$::' > "$tmpdepfile"
5279f606849Smrg  rm -f "$depfile"
5289f606849Smrg  echo "$object : \\" > "$depfile"
5299f606849Smrg  cat < "$tmpdepfile" >> "$depfile"
5309f606849Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
5319f606849Smrg  rm -f "$tmpdepfile"
5329f606849Smrg  ;;
5339f606849Smrg
5349f606849Smrgmsvisualcpp)
5359f606849Smrg  # Important note: in order to support this mode, a compiler *must*
5369f606849Smrg  # always write the preprocessed file to stdout, regardless of -o,
5379f606849Smrg  # because we must use -o when running libtool.
5389f606849Smrg  "$@" || exit $?
5399f606849Smrg  IFS=" "
5409f606849Smrg  for arg
5419f606849Smrg  do
5429f606849Smrg    case "$arg" in
5439f606849Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
5449f606849Smrg	set fnord "$@"
5459f606849Smrg	shift
5469f606849Smrg	shift
5479f606849Smrg	;;
5489f606849Smrg    *)
5499f606849Smrg	set fnord "$@" "$arg"
5509f606849Smrg	shift
5519f606849Smrg	shift
5529f606849Smrg	;;
5539f606849Smrg    esac
5549f606849Smrg  done
5559f606849Smrg  "$@" -E |
5569f606849Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
5579f606849Smrg  rm -f "$depfile"
5589f606849Smrg  echo "$object : \\" > "$depfile"
5599f606849Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
5609f606849Smrg  echo "	" >> "$depfile"
5619f606849Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
5629f606849Smrg  rm -f "$tmpdepfile"
5639f606849Smrg  ;;
5649f606849Smrg
5659f606849Smrgnone)
5669f606849Smrg  exec "$@"
5679f606849Smrg  ;;
5689f606849Smrg
5699f606849Smrg*)
5709f606849Smrg  echo "Unknown depmode $depmode" 1>&2
5719f606849Smrg  exit 1
5729f606849Smrg  ;;
5739f606849Smrgesac
5749f606849Smrg
5759f606849Smrgexit 0
5769f606849Smrg
5779f606849Smrg# Local Variables:
5789f606849Smrg# mode: shell-script
5799f606849Smrg# sh-indentation: 2
5809f606849Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
5819f606849Smrg# time-stamp-start: "scriptversion="
5829f606849Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
5839f606849Smrg# time-stamp-end: "$"
5849f606849Smrg# End:
585