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