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