depcomp revision 1568b75b
17d5e3a19Smrg#! /bin/sh
27d5e3a19Smrg# depcomp - compile a program generating dependencies as side-effects
37d5e3a19Smrg
41568b75bSmrgscriptversion=2007-03-29.01
57d5e3a19Smrg
61568b75bSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software
77d5e3a19Smrg# Foundation, Inc.
87d5e3a19Smrg
97d5e3a19Smrg# This program is free software; you can redistribute it and/or modify
107d5e3a19Smrg# it under the terms of the GNU General Public License as published by
117d5e3a19Smrg# the Free Software Foundation; either version 2, or (at your option)
127d5e3a19Smrg# any later version.
137d5e3a19Smrg
147d5e3a19Smrg# This program is distributed in the hope that it will be useful,
157d5e3a19Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
167d5e3a19Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
177d5e3a19Smrg# GNU General Public License for more details.
187d5e3a19Smrg
197d5e3a19Smrg# You should have received a copy of the GNU General Public License
207d5e3a19Smrg# along with this program; if not, write to the Free Software
217d5e3a19Smrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
227d5e3a19Smrg# 02110-1301, USA.
237d5e3a19Smrg
247d5e3a19Smrg# As a special exception to the GNU General Public License, if you
257d5e3a19Smrg# distribute this file as part of a program that contains a
267d5e3a19Smrg# configuration script generated by Autoconf, you may include it under
277d5e3a19Smrg# the same distribution terms that you use for the rest of that program.
287d5e3a19Smrg
297d5e3a19Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
307d5e3a19Smrg
317d5e3a19Smrgcase $1 in
327d5e3a19Smrg  '')
337d5e3a19Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
347d5e3a19Smrg     exit 1;
357d5e3a19Smrg     ;;
367d5e3a19Smrg  -h | --h*)
377d5e3a19Smrg    cat <<\EOF
387d5e3a19SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
397d5e3a19Smrg
407d5e3a19SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
417d5e3a19Smrgas side-effects.
427d5e3a19Smrg
437d5e3a19SmrgEnvironment variables:
447d5e3a19Smrg  depmode     Dependency tracking mode.
457d5e3a19Smrg  source      Source file read by `PROGRAMS ARGS'.
467d5e3a19Smrg  object      Object file output by `PROGRAMS ARGS'.
477d5e3a19Smrg  DEPDIR      directory where to store dependencies.
487d5e3a19Smrg  depfile     Dependency file to output.
497d5e3a19Smrg  tmpdepfile  Temporary file to use when outputing dependencies.
507d5e3a19Smrg  libtool     Whether libtool is used (yes/no).
517d5e3a19Smrg
527d5e3a19SmrgReport bugs to <bug-automake@gnu.org>.
537d5e3a19SmrgEOF
547d5e3a19Smrg    exit $?
557d5e3a19Smrg    ;;
567d5e3a19Smrg  -v | --v*)
577d5e3a19Smrg    echo "depcomp $scriptversion"
587d5e3a19Smrg    exit $?
597d5e3a19Smrg    ;;
607d5e3a19Smrgesac
617d5e3a19Smrg
627d5e3a19Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
637d5e3a19Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
647d5e3a19Smrg  exit 1
657d5e3a19Smrgfi
667d5e3a19Smrg
677d5e3a19Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
687d5e3a19Smrgdepfile=${depfile-`echo "$object" |
697d5e3a19Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
707d5e3a19Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
717d5e3a19Smrg
727d5e3a19Smrgrm -f "$tmpdepfile"
737d5e3a19Smrg
747d5e3a19Smrg# Some modes work just like other modes, but use different flags.  We
757d5e3a19Smrg# parameterize here, but still list the modes in the big case below,
767d5e3a19Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
777d5e3a19Smrg# here, because this file can only contain one case statement.
787d5e3a19Smrgif test "$depmode" = hp; then
797d5e3a19Smrg  # HP compiler uses -M and no extra arg.
807d5e3a19Smrg  gccflag=-M
817d5e3a19Smrg  depmode=gcc
827d5e3a19Smrgfi
837d5e3a19Smrg
847d5e3a19Smrgif test "$depmode" = dashXmstdout; then
857d5e3a19Smrg   # This is just like dashmstdout with a different argument.
867d5e3a19Smrg   dashmflag=-xM
877d5e3a19Smrg   depmode=dashmstdout
887d5e3a19Smrgfi
897d5e3a19Smrg
907d5e3a19Smrgcase "$depmode" in
917d5e3a19Smrggcc3)
927d5e3a19Smrg## gcc 3 implements dependency tracking that does exactly what
937d5e3a19Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
947d5e3a19Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
957d5e3a19Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
967d5e3a19Smrg## the command line argument order; so add the flags where they
977d5e3a19Smrg## appear in depend2.am.  Note that the slowdown incurred here
987d5e3a19Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
997d5e3a19Smrg  for arg
1007d5e3a19Smrg  do
1017d5e3a19Smrg    case $arg in
1027d5e3a19Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
1037d5e3a19Smrg    *)  set fnord "$@" "$arg" ;;
1047d5e3a19Smrg    esac
1057d5e3a19Smrg    shift # fnord
1067d5e3a19Smrg    shift # $arg
1077d5e3a19Smrg  done
1087d5e3a19Smrg  "$@"
1097d5e3a19Smrg  stat=$?
1107d5e3a19Smrg  if test $stat -eq 0; then :
1117d5e3a19Smrg  else
1127d5e3a19Smrg    rm -f "$tmpdepfile"
1137d5e3a19Smrg    exit $stat
1147d5e3a19Smrg  fi
1157d5e3a19Smrg  mv "$tmpdepfile" "$depfile"
1167d5e3a19Smrg  ;;
1177d5e3a19Smrg
1187d5e3a19Smrggcc)
1197d5e3a19Smrg## There are various ways to get dependency output from gcc.  Here's
1207d5e3a19Smrg## why we pick this rather obscure method:
1217d5e3a19Smrg## - Don't want to use -MD because we'd like the dependencies to end
1227d5e3a19Smrg##   up in a subdir.  Having to rename by hand is ugly.
1237d5e3a19Smrg##   (We might end up doing this anyway to support other compilers.)
1247d5e3a19Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
1257d5e3a19Smrg##   -MM, not -M (despite what the docs say).
1267d5e3a19Smrg## - Using -M directly means running the compiler twice (even worse
1277d5e3a19Smrg##   than renaming).
1287d5e3a19Smrg  if test -z "$gccflag"; then
1297d5e3a19Smrg    gccflag=-MD,
1307d5e3a19Smrg  fi
1317d5e3a19Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
1327d5e3a19Smrg  stat=$?
1337d5e3a19Smrg  if test $stat -eq 0; then :
1347d5e3a19Smrg  else
1357d5e3a19Smrg    rm -f "$tmpdepfile"
1367d5e3a19Smrg    exit $stat
1377d5e3a19Smrg  fi
1387d5e3a19Smrg  rm -f "$depfile"
1397d5e3a19Smrg  echo "$object : \\" > "$depfile"
1407d5e3a19Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
1417d5e3a19Smrg## The second -e expression handles DOS-style file names with drive letters.
1427d5e3a19Smrg  sed -e 's/^[^:]*: / /' \
1437d5e3a19Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
1447d5e3a19Smrg## This next piece of magic avoids the `deleted header file' problem.
1457d5e3a19Smrg## The problem is that when a header file which appears in a .P file
1467d5e3a19Smrg## is deleted, the dependency causes make to die (because there is
1477d5e3a19Smrg## typically no way to rebuild the header).  We avoid this by adding
1487d5e3a19Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
1497d5e3a19Smrg## this for us directly.
1507d5e3a19Smrg  tr ' ' '
1517d5e3a19Smrg' < "$tmpdepfile" |
1527d5e3a19Smrg## Some versions of gcc put a space before the `:'.  On the theory
1537d5e3a19Smrg## that the space means something, we add a space to the output as
1547d5e3a19Smrg## well.
1557d5e3a19Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
1567d5e3a19Smrg## correctly.  Breaking it into two sed invocations is a workaround.
1577d5e3a19Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
1587d5e3a19Smrg  rm -f "$tmpdepfile"
1597d5e3a19Smrg  ;;
1607d5e3a19Smrg
1617d5e3a19Smrghp)
1627d5e3a19Smrg  # This case exists only to let depend.m4 do its work.  It works by
1637d5e3a19Smrg  # looking at the text of this script.  This case will never be run,
1647d5e3a19Smrg  # since it is checked for above.
1657d5e3a19Smrg  exit 1
1667d5e3a19Smrg  ;;
1677d5e3a19Smrg
1687d5e3a19Smrgsgi)
1697d5e3a19Smrg  if test "$libtool" = yes; then
1707d5e3a19Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
1717d5e3a19Smrg  else
1727d5e3a19Smrg    "$@" -MDupdate "$tmpdepfile"
1737d5e3a19Smrg  fi
1747d5e3a19Smrg  stat=$?
1757d5e3a19Smrg  if test $stat -eq 0; then :
1767d5e3a19Smrg  else
1777d5e3a19Smrg    rm -f "$tmpdepfile"
1787d5e3a19Smrg    exit $stat
1797d5e3a19Smrg  fi
1807d5e3a19Smrg  rm -f "$depfile"
1817d5e3a19Smrg
1827d5e3a19Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
1837d5e3a19Smrg    echo "$object : \\" > "$depfile"
1847d5e3a19Smrg
1857d5e3a19Smrg    # Clip off the initial element (the dependent).  Don't try to be
1867d5e3a19Smrg    # clever and replace this with sed code, as IRIX sed won't handle
1877d5e3a19Smrg    # lines with more than a fixed number of characters (4096 in
1887d5e3a19Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
1897d5e3a19Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
1907d5e3a19Smrg    # dependency line.
1917d5e3a19Smrg    tr ' ' '
1927d5e3a19Smrg' < "$tmpdepfile" \
1937d5e3a19Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
1947d5e3a19Smrg    tr '
1957d5e3a19Smrg' ' ' >> $depfile
1967d5e3a19Smrg    echo >> $depfile
1977d5e3a19Smrg
1987d5e3a19Smrg    # The second pass generates a dummy entry for each header file.
1997d5e3a19Smrg    tr ' ' '
2007d5e3a19Smrg' < "$tmpdepfile" \
2017d5e3a19Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
2027d5e3a19Smrg   >> $depfile
2037d5e3a19Smrg  else
2047d5e3a19Smrg    # The sourcefile does not contain any dependencies, so just
2057d5e3a19Smrg    # store a dummy comment line, to avoid errors with the Makefile
2067d5e3a19Smrg    # "include basename.Plo" scheme.
2077d5e3a19Smrg    echo "#dummy" > "$depfile"
2087d5e3a19Smrg  fi
2097d5e3a19Smrg  rm -f "$tmpdepfile"
2107d5e3a19Smrg  ;;
2117d5e3a19Smrg
2127d5e3a19Smrgaix)
2137d5e3a19Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
2147d5e3a19Smrg  # in a .u file.  In older versions, this file always lives in the
2157d5e3a19Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
2167d5e3a19Smrg  # start of each line; $object doesn't have directory information.
2177d5e3a19Smrg  # Version 6 uses the directory in both cases.
2181568b75bSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
2191568b75bSmrg  test "x$dir" = "x$object" && dir=
2201568b75bSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
2217d5e3a19Smrg  if test "$libtool" = yes; then
2221568b75bSmrg    tmpdepfile1=$dir$base.u
2231568b75bSmrg    tmpdepfile2=$base.u
2241568b75bSmrg    tmpdepfile3=$dir.libs/$base.u
2257d5e3a19Smrg    "$@" -Wc,-M
2267d5e3a19Smrg  else
2271568b75bSmrg    tmpdepfile1=$dir$base.u
2281568b75bSmrg    tmpdepfile2=$dir$base.u
2291568b75bSmrg    tmpdepfile3=$dir$base.u
2307d5e3a19Smrg    "$@" -M
2317d5e3a19Smrg  fi
2327d5e3a19Smrg  stat=$?
2337d5e3a19Smrg
2347d5e3a19Smrg  if test $stat -eq 0; then :
2357d5e3a19Smrg  else
2361568b75bSmrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2377d5e3a19Smrg    exit $stat
2387d5e3a19Smrg  fi
2397d5e3a19Smrg
2401568b75bSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2411568b75bSmrg  do
2421568b75bSmrg    test -f "$tmpdepfile" && break
2431568b75bSmrg  done
2447d5e3a19Smrg  if test -f "$tmpdepfile"; then
2457d5e3a19Smrg    # Each line is of the form `foo.o: dependent.h'.
2467d5e3a19Smrg    # Do two passes, one to just change these to
2477d5e3a19Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
2481568b75bSmrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
2491568b75bSmrg    # That's a tab and a space in the [].
2501568b75bSmrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
2517d5e3a19Smrg  else
2527d5e3a19Smrg    # The sourcefile does not contain any dependencies, so just
2537d5e3a19Smrg    # store a dummy comment line, to avoid errors with the Makefile
2547d5e3a19Smrg    # "include basename.Plo" scheme.
2557d5e3a19Smrg    echo "#dummy" > "$depfile"
2567d5e3a19Smrg  fi
2577d5e3a19Smrg  rm -f "$tmpdepfile"
2587d5e3a19Smrg  ;;
2597d5e3a19Smrg
2607d5e3a19Smrgicc)
2617d5e3a19Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
2627d5e3a19Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
2637d5e3a19Smrg  # ICC 7.0 will fill foo.d with something like
2647d5e3a19Smrg  #    foo.o: sub/foo.c
2657d5e3a19Smrg  #    foo.o: sub/foo.h
2667d5e3a19Smrg  # which is wrong.  We want:
2677d5e3a19Smrg  #    sub/foo.o: sub/foo.c
2687d5e3a19Smrg  #    sub/foo.o: sub/foo.h
2697d5e3a19Smrg  #    sub/foo.c:
2707d5e3a19Smrg  #    sub/foo.h:
2717d5e3a19Smrg  # ICC 7.1 will output
2727d5e3a19Smrg  #    foo.o: sub/foo.c sub/foo.h
2737d5e3a19Smrg  # and will wrap long lines using \ :
2747d5e3a19Smrg  #    foo.o: sub/foo.c ... \
2757d5e3a19Smrg  #     sub/foo.h ... \
2767d5e3a19Smrg  #     ...
2777d5e3a19Smrg
2787d5e3a19Smrg  "$@" -MD -MF "$tmpdepfile"
2797d5e3a19Smrg  stat=$?
2807d5e3a19Smrg  if test $stat -eq 0; then :
2817d5e3a19Smrg  else
2827d5e3a19Smrg    rm -f "$tmpdepfile"
2837d5e3a19Smrg    exit $stat
2847d5e3a19Smrg  fi
2857d5e3a19Smrg  rm -f "$depfile"
2867d5e3a19Smrg  # Each line is of the form `foo.o: dependent.h',
2877d5e3a19Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
2887d5e3a19Smrg  # Do two passes, one to just change these to
2897d5e3a19Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
2907d5e3a19Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
2917d5e3a19Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
2927d5e3a19Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
2937d5e3a19Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
2947d5e3a19Smrg    sed -e 's/$/ :/' >> "$depfile"
2957d5e3a19Smrg  rm -f "$tmpdepfile"
2967d5e3a19Smrg  ;;
2977d5e3a19Smrg
2987d5e3a19Smrghp2)
2997d5e3a19Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
3007d5e3a19Smrg  # compilers, which have integrated preprocessors.  The correct option
3017d5e3a19Smrg  # to use with these is +Maked; it writes dependencies to a file named
3027d5e3a19Smrg  # 'foo.d', which lands next to the object file, wherever that
3037d5e3a19Smrg  # happens to be.
3047d5e3a19Smrg  # Much of this is similar to the tru64 case; see comments there.
3057d5e3a19Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3067d5e3a19Smrg  test "x$dir" = "x$object" && dir=
3077d5e3a19Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3087d5e3a19Smrg  if test "$libtool" = yes; then
3097d5e3a19Smrg    tmpdepfile1=$dir$base.d
3107d5e3a19Smrg    tmpdepfile2=$dir.libs/$base.d
3117d5e3a19Smrg    "$@" -Wc,+Maked
3127d5e3a19Smrg  else
3137d5e3a19Smrg    tmpdepfile1=$dir$base.d
3147d5e3a19Smrg    tmpdepfile2=$dir$base.d
3157d5e3a19Smrg    "$@" +Maked
3167d5e3a19Smrg  fi
3177d5e3a19Smrg  stat=$?
3187d5e3a19Smrg  if test $stat -eq 0; then :
3197d5e3a19Smrg  else
3207d5e3a19Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
3217d5e3a19Smrg     exit $stat
3227d5e3a19Smrg  fi
3237d5e3a19Smrg
3247d5e3a19Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
3257d5e3a19Smrg  do
3267d5e3a19Smrg    test -f "$tmpdepfile" && break
3277d5e3a19Smrg  done
3287d5e3a19Smrg  if test -f "$tmpdepfile"; then
3297d5e3a19Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
3307d5e3a19Smrg    # Add `dependent.h:' lines.
3317d5e3a19Smrg    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
3327d5e3a19Smrg  else
3337d5e3a19Smrg    echo "#dummy" > "$depfile"
3347d5e3a19Smrg  fi
3357d5e3a19Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
3367d5e3a19Smrg  ;;
3377d5e3a19Smrg
3387d5e3a19Smrgtru64)
3397d5e3a19Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
3407d5e3a19Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
3417d5e3a19Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
3427d5e3a19Smrg   # dependencies in `foo.d' instead, so we check for that too.
3437d5e3a19Smrg   # Subdirectories are respected.
3447d5e3a19Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3457d5e3a19Smrg   test "x$dir" = "x$object" && dir=
3467d5e3a19Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3477d5e3a19Smrg
3487d5e3a19Smrg   if test "$libtool" = yes; then
3497d5e3a19Smrg      # With Tru64 cc, shared objects can also be used to make a
3507d5e3a19Smrg      # static library.  This mechanism is used in libtool 1.4 series to
3517d5e3a19Smrg      # handle both shared and static libraries in a single compilation.
3527d5e3a19Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
3537d5e3a19Smrg      #
3547d5e3a19Smrg      # With libtool 1.5 this exception was removed, and libtool now
3557d5e3a19Smrg      # generates 2 separate objects for the 2 libraries.  These two
3567d5e3a19Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
3577d5e3a19Smrg      # in $dir$base.o.d.  We have to check for both files, because
3587d5e3a19Smrg      # one of the two compilations can be disabled.  We should prefer
3597d5e3a19Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
3607d5e3a19Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
3617d5e3a19Smrg      # the former would cause a distcleancheck panic.
3627d5e3a19Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
3637d5e3a19Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
3647d5e3a19Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
3657d5e3a19Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
3667d5e3a19Smrg      "$@" -Wc,-MD
3677d5e3a19Smrg   else
3687d5e3a19Smrg      tmpdepfile1=$dir$base.o.d
3697d5e3a19Smrg      tmpdepfile2=$dir$base.d
3707d5e3a19Smrg      tmpdepfile3=$dir$base.d
3717d5e3a19Smrg      tmpdepfile4=$dir$base.d
3727d5e3a19Smrg      "$@" -MD
3737d5e3a19Smrg   fi
3747d5e3a19Smrg
3757d5e3a19Smrg   stat=$?
3767d5e3a19Smrg   if test $stat -eq 0; then :
3777d5e3a19Smrg   else
3787d5e3a19Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3797d5e3a19Smrg      exit $stat
3807d5e3a19Smrg   fi
3817d5e3a19Smrg
3827d5e3a19Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3837d5e3a19Smrg   do
3847d5e3a19Smrg     test -f "$tmpdepfile" && break
3857d5e3a19Smrg   done
3867d5e3a19Smrg   if test -f "$tmpdepfile"; then
3877d5e3a19Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
3887d5e3a19Smrg      # That's a tab and a space in the [].
3897d5e3a19Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
3907d5e3a19Smrg   else
3917d5e3a19Smrg      echo "#dummy" > "$depfile"
3927d5e3a19Smrg   fi
3937d5e3a19Smrg   rm -f "$tmpdepfile"
3947d5e3a19Smrg   ;;
3957d5e3a19Smrg
3967d5e3a19Smrg#nosideeffect)
3977d5e3a19Smrg  # This comment above is used by automake to tell side-effect
3987d5e3a19Smrg  # dependency tracking mechanisms from slower ones.
3997d5e3a19Smrg
4007d5e3a19Smrgdashmstdout)
4017d5e3a19Smrg  # Important note: in order to support this mode, a compiler *must*
4027d5e3a19Smrg  # always write the preprocessed file to stdout, regardless of -o.
4037d5e3a19Smrg  "$@" || exit $?
4047d5e3a19Smrg
4057d5e3a19Smrg  # Remove the call to Libtool.
4067d5e3a19Smrg  if test "$libtool" = yes; then
4077d5e3a19Smrg    while test $1 != '--mode=compile'; do
4087d5e3a19Smrg      shift
4097d5e3a19Smrg    done
4107d5e3a19Smrg    shift
4117d5e3a19Smrg  fi
4127d5e3a19Smrg
4137d5e3a19Smrg  # Remove `-o $object'.
4147d5e3a19Smrg  IFS=" "
4157d5e3a19Smrg  for arg
4167d5e3a19Smrg  do
4177d5e3a19Smrg    case $arg in
4187d5e3a19Smrg    -o)
4197d5e3a19Smrg      shift
4207d5e3a19Smrg      ;;
4217d5e3a19Smrg    $object)
4227d5e3a19Smrg      shift
4237d5e3a19Smrg      ;;
4247d5e3a19Smrg    *)
4257d5e3a19Smrg      set fnord "$@" "$arg"
4267d5e3a19Smrg      shift # fnord
4277d5e3a19Smrg      shift # $arg
4287d5e3a19Smrg      ;;
4297d5e3a19Smrg    esac
4307d5e3a19Smrg  done
4317d5e3a19Smrg
4327d5e3a19Smrg  test -z "$dashmflag" && dashmflag=-M
4337d5e3a19Smrg  # Require at least two characters before searching for `:'
4347d5e3a19Smrg  # in the target name.  This is to cope with DOS-style filenames:
4357d5e3a19Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
4367d5e3a19Smrg  "$@" $dashmflag |
4377d5e3a19Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
4387d5e3a19Smrg  rm -f "$depfile"
4397d5e3a19Smrg  cat < "$tmpdepfile" > "$depfile"
4407d5e3a19Smrg  tr ' ' '
4417d5e3a19Smrg' < "$tmpdepfile" | \
4427d5e3a19Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
4437d5e3a19Smrg## correctly.  Breaking it into two sed invocations is a workaround.
4447d5e3a19Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
4457d5e3a19Smrg  rm -f "$tmpdepfile"
4467d5e3a19Smrg  ;;
4477d5e3a19Smrg
4487d5e3a19SmrgdashXmstdout)
4497d5e3a19Smrg  # This case only exists to satisfy depend.m4.  It is never actually
4507d5e3a19Smrg  # run, as this mode is specially recognized in the preamble.
4517d5e3a19Smrg  exit 1
4527d5e3a19Smrg  ;;
4537d5e3a19Smrg
4547d5e3a19Smrgmakedepend)
4557d5e3a19Smrg  "$@" || exit $?
4567d5e3a19Smrg  # Remove any Libtool call
4577d5e3a19Smrg  if test "$libtool" = yes; then
4587d5e3a19Smrg    while test $1 != '--mode=compile'; do
4597d5e3a19Smrg      shift
4607d5e3a19Smrg    done
4617d5e3a19Smrg    shift
4627d5e3a19Smrg  fi
4637d5e3a19Smrg  # X makedepend
4647d5e3a19Smrg  shift
4657d5e3a19Smrg  cleared=no
4667d5e3a19Smrg  for arg in "$@"; do
4677d5e3a19Smrg    case $cleared in
4687d5e3a19Smrg    no)
4697d5e3a19Smrg      set ""; shift
4707d5e3a19Smrg      cleared=yes ;;
4717d5e3a19Smrg    esac
4727d5e3a19Smrg    case "$arg" in
4737d5e3a19Smrg    -D*|-I*)
4747d5e3a19Smrg      set fnord "$@" "$arg"; shift ;;
4757d5e3a19Smrg    # Strip any option that makedepend may not understand.  Remove
4767d5e3a19Smrg    # the object too, otherwise makedepend will parse it as a source file.
4777d5e3a19Smrg    -*|$object)
4787d5e3a19Smrg      ;;
4797d5e3a19Smrg    *)
4807d5e3a19Smrg      set fnord "$@" "$arg"; shift ;;
4817d5e3a19Smrg    esac
4827d5e3a19Smrg  done
4837d5e3a19Smrg  obj_suffix="`echo $object | sed 's/^.*\././'`"
4847d5e3a19Smrg  touch "$tmpdepfile"
4857d5e3a19Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
4867d5e3a19Smrg  rm -f "$depfile"
4877d5e3a19Smrg  cat < "$tmpdepfile" > "$depfile"
4887d5e3a19Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
4897d5e3a19Smrg' | \
4907d5e3a19Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
4917d5e3a19Smrg## correctly.  Breaking it into two sed invocations is a workaround.
4927d5e3a19Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
4937d5e3a19Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
4947d5e3a19Smrg  ;;
4957d5e3a19Smrg
4967d5e3a19Smrgcpp)
4977d5e3a19Smrg  # Important note: in order to support this mode, a compiler *must*
4987d5e3a19Smrg  # always write the preprocessed file to stdout.
4997d5e3a19Smrg  "$@" || exit $?
5007d5e3a19Smrg
5017d5e3a19Smrg  # Remove the call to Libtool.
5027d5e3a19Smrg  if test "$libtool" = yes; then
5037d5e3a19Smrg    while test $1 != '--mode=compile'; do
5047d5e3a19Smrg      shift
5057d5e3a19Smrg    done
5067d5e3a19Smrg    shift
5077d5e3a19Smrg  fi
5087d5e3a19Smrg
5097d5e3a19Smrg  # Remove `-o $object'.
5107d5e3a19Smrg  IFS=" "
5117d5e3a19Smrg  for arg
5127d5e3a19Smrg  do
5137d5e3a19Smrg    case $arg in
5147d5e3a19Smrg    -o)
5157d5e3a19Smrg      shift
5167d5e3a19Smrg      ;;
5177d5e3a19Smrg    $object)
5187d5e3a19Smrg      shift
5197d5e3a19Smrg      ;;
5207d5e3a19Smrg    *)
5217d5e3a19Smrg      set fnord "$@" "$arg"
5227d5e3a19Smrg      shift # fnord
5237d5e3a19Smrg      shift # $arg
5247d5e3a19Smrg      ;;
5257d5e3a19Smrg    esac
5267d5e3a19Smrg  done
5277d5e3a19Smrg
5287d5e3a19Smrg  "$@" -E |
5297d5e3a19Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
5307d5e3a19Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
5317d5e3a19Smrg    sed '$ s: \\$::' > "$tmpdepfile"
5327d5e3a19Smrg  rm -f "$depfile"
5337d5e3a19Smrg  echo "$object : \\" > "$depfile"
5347d5e3a19Smrg  cat < "$tmpdepfile" >> "$depfile"
5357d5e3a19Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
5367d5e3a19Smrg  rm -f "$tmpdepfile"
5377d5e3a19Smrg  ;;
5387d5e3a19Smrg
5397d5e3a19Smrgmsvisualcpp)
5407d5e3a19Smrg  # Important note: in order to support this mode, a compiler *must*
5417d5e3a19Smrg  # always write the preprocessed file to stdout, regardless of -o,
5427d5e3a19Smrg  # because we must use -o when running libtool.
5437d5e3a19Smrg  "$@" || exit $?
5447d5e3a19Smrg  IFS=" "
5457d5e3a19Smrg  for arg
5467d5e3a19Smrg  do
5477d5e3a19Smrg    case "$arg" in
5487d5e3a19Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
5497d5e3a19Smrg	set fnord "$@"
5507d5e3a19Smrg	shift
5517d5e3a19Smrg	shift
5527d5e3a19Smrg	;;
5537d5e3a19Smrg    *)
5547d5e3a19Smrg	set fnord "$@" "$arg"
5557d5e3a19Smrg	shift
5567d5e3a19Smrg	shift
5577d5e3a19Smrg	;;
5587d5e3a19Smrg    esac
5597d5e3a19Smrg  done
5607d5e3a19Smrg  "$@" -E |
5617d5e3a19Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
5627d5e3a19Smrg  rm -f "$depfile"
5637d5e3a19Smrg  echo "$object : \\" > "$depfile"
5647d5e3a19Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
5657d5e3a19Smrg  echo "	" >> "$depfile"
5667d5e3a19Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
5677d5e3a19Smrg  rm -f "$tmpdepfile"
5687d5e3a19Smrg  ;;
5697d5e3a19Smrg
5707d5e3a19Smrgnone)
5717d5e3a19Smrg  exec "$@"
5727d5e3a19Smrg  ;;
5737d5e3a19Smrg
5747d5e3a19Smrg*)
5757d5e3a19Smrg  echo "Unknown depmode $depmode" 1>&2
5767d5e3a19Smrg  exit 1
5777d5e3a19Smrg  ;;
5787d5e3a19Smrgesac
5797d5e3a19Smrg
5807d5e3a19Smrgexit 0
5817d5e3a19Smrg
5827d5e3a19Smrg# Local Variables:
5837d5e3a19Smrg# mode: shell-script
5847d5e3a19Smrg# sh-indentation: 2
5857d5e3a19Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
5867d5e3a19Smrg# time-stamp-start: "scriptversion="
5877d5e3a19Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
5887d5e3a19Smrg# time-stamp-end: "$"
5897d5e3a19Smrg# End:
590