depcomp revision 498372ab
14d9b34d9Smrg#! /bin/sh
24d9b34d9Smrg# depcomp - compile a program generating dependencies as side-effects
34d9b34d9Smrg
4498372abSmrgscriptversion=2011-12-04.11; # UTC
54d9b34d9Smrg
6498372abSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
7498372abSmrg# 2011 Free Software Foundation, Inc.
84d9b34d9Smrg
94d9b34d9Smrg# This program is free software; you can redistribute it and/or modify
104d9b34d9Smrg# it under the terms of the GNU General Public License as published by
114d9b34d9Smrg# the Free Software Foundation; either version 2, or (at your option)
124d9b34d9Smrg# any later version.
134d9b34d9Smrg
144d9b34d9Smrg# This program is distributed in the hope that it will be useful,
154d9b34d9Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
164d9b34d9Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
174d9b34d9Smrg# GNU General Public License for more details.
184d9b34d9Smrg
194d9b34d9Smrg# You should have received a copy of the GNU General Public License
208512f934Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
214d9b34d9Smrg
224d9b34d9Smrg# As a special exception to the GNU General Public License, if you
234d9b34d9Smrg# distribute this file as part of a program that contains a
244d9b34d9Smrg# configuration script generated by Autoconf, you may include it under
254d9b34d9Smrg# the same distribution terms that you use for the rest of that program.
264d9b34d9Smrg
274d9b34d9Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
284d9b34d9Smrg
294d9b34d9Smrgcase $1 in
304d9b34d9Smrg  '')
314d9b34d9Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
324d9b34d9Smrg     exit 1;
334d9b34d9Smrg     ;;
344d9b34d9Smrg  -h | --h*)
354d9b34d9Smrg    cat <<\EOF
364d9b34d9SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
374d9b34d9Smrg
384d9b34d9SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
394d9b34d9Smrgas side-effects.
404d9b34d9Smrg
414d9b34d9SmrgEnvironment variables:
424d9b34d9Smrg  depmode     Dependency tracking mode.
434d9b34d9Smrg  source      Source file read by `PROGRAMS ARGS'.
444d9b34d9Smrg  object      Object file output by `PROGRAMS ARGS'.
454d9b34d9Smrg  DEPDIR      directory where to store dependencies.
464d9b34d9Smrg  depfile     Dependency file to output.
47498372abSmrg  tmpdepfile  Temporary file to use when outputting dependencies.
484d9b34d9Smrg  libtool     Whether libtool is used (yes/no).
494d9b34d9Smrg
504d9b34d9SmrgReport bugs to <bug-automake@gnu.org>.
514d9b34d9SmrgEOF
524d9b34d9Smrg    exit $?
534d9b34d9Smrg    ;;
544d9b34d9Smrg  -v | --v*)
554d9b34d9Smrg    echo "depcomp $scriptversion"
564d9b34d9Smrg    exit $?
574d9b34d9Smrg    ;;
584d9b34d9Smrgesac
594d9b34d9Smrg
604d9b34d9Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
614d9b34d9Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
624d9b34d9Smrg  exit 1
634d9b34d9Smrgfi
644d9b34d9Smrg
654d9b34d9Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
664d9b34d9Smrgdepfile=${depfile-`echo "$object" |
674d9b34d9Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
684d9b34d9Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
694d9b34d9Smrg
704d9b34d9Smrgrm -f "$tmpdepfile"
714d9b34d9Smrg
724d9b34d9Smrg# Some modes work just like other modes, but use different flags.  We
734d9b34d9Smrg# parameterize here, but still list the modes in the big case below,
744d9b34d9Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
754d9b34d9Smrg# here, because this file can only contain one case statement.
764d9b34d9Smrgif test "$depmode" = hp; then
774d9b34d9Smrg  # HP compiler uses -M and no extra arg.
784d9b34d9Smrg  gccflag=-M
794d9b34d9Smrg  depmode=gcc
804d9b34d9Smrgfi
814d9b34d9Smrg
824d9b34d9Smrgif test "$depmode" = dashXmstdout; then
834d9b34d9Smrg   # This is just like dashmstdout with a different argument.
844d9b34d9Smrg   dashmflag=-xM
854d9b34d9Smrg   depmode=dashmstdout
864d9b34d9Smrgfi
874d9b34d9Smrg
888512f934Smrgcygpath_u="cygpath -u -f -"
898512f934Smrgif test "$depmode" = msvcmsys; then
908512f934Smrg   # This is just like msvisualcpp but w/o cygpath translation.
918512f934Smrg   # Just convert the backslash-escaped backslashes to single forward
928512f934Smrg   # slashes to satisfy depend.m4
93498372abSmrg   cygpath_u='sed s,\\\\,/,g'
948512f934Smrg   depmode=msvisualcpp
958512f934Smrgfi
968512f934Smrg
97498372abSmrgif test "$depmode" = msvc7msys; then
98498372abSmrg   # This is just like msvc7 but w/o cygpath translation.
99498372abSmrg   # Just convert the backslash-escaped backslashes to single forward
100498372abSmrg   # slashes to satisfy depend.m4
101498372abSmrg   cygpath_u='sed s,\\\\,/,g'
102498372abSmrg   depmode=msvc7
103498372abSmrgfi
104498372abSmrg
1054d9b34d9Smrgcase "$depmode" in
1064d9b34d9Smrggcc3)
1074d9b34d9Smrg## gcc 3 implements dependency tracking that does exactly what
1084d9b34d9Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
1094d9b34d9Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
1104d9b34d9Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
1114d9b34d9Smrg## the command line argument order; so add the flags where they
1124d9b34d9Smrg## appear in depend2.am.  Note that the slowdown incurred here
1134d9b34d9Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
1144d9b34d9Smrg  for arg
1154d9b34d9Smrg  do
1164d9b34d9Smrg    case $arg in
1174d9b34d9Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
1184d9b34d9Smrg    *)  set fnord "$@" "$arg" ;;
1194d9b34d9Smrg    esac
1204d9b34d9Smrg    shift # fnord
1214d9b34d9Smrg    shift # $arg
1224d9b34d9Smrg  done
1234d9b34d9Smrg  "$@"
1244d9b34d9Smrg  stat=$?
1254d9b34d9Smrg  if test $stat -eq 0; then :
1264d9b34d9Smrg  else
1274d9b34d9Smrg    rm -f "$tmpdepfile"
1284d9b34d9Smrg    exit $stat
1294d9b34d9Smrg  fi
1304d9b34d9Smrg  mv "$tmpdepfile" "$depfile"
1314d9b34d9Smrg  ;;
1324d9b34d9Smrg
1334d9b34d9Smrggcc)
1344d9b34d9Smrg## There are various ways to get dependency output from gcc.  Here's
1354d9b34d9Smrg## why we pick this rather obscure method:
1364d9b34d9Smrg## - Don't want to use -MD because we'd like the dependencies to end
1374d9b34d9Smrg##   up in a subdir.  Having to rename by hand is ugly.
1384d9b34d9Smrg##   (We might end up doing this anyway to support other compilers.)
1394d9b34d9Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
1404d9b34d9Smrg##   -MM, not -M (despite what the docs say).
1414d9b34d9Smrg## - Using -M directly means running the compiler twice (even worse
1424d9b34d9Smrg##   than renaming).
1434d9b34d9Smrg  if test -z "$gccflag"; then
1444d9b34d9Smrg    gccflag=-MD,
1454d9b34d9Smrg  fi
1464d9b34d9Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
1474d9b34d9Smrg  stat=$?
1484d9b34d9Smrg  if test $stat -eq 0; then :
1494d9b34d9Smrg  else
1504d9b34d9Smrg    rm -f "$tmpdepfile"
1514d9b34d9Smrg    exit $stat
1524d9b34d9Smrg  fi
1534d9b34d9Smrg  rm -f "$depfile"
1544d9b34d9Smrg  echo "$object : \\" > "$depfile"
1554d9b34d9Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
1564d9b34d9Smrg## The second -e expression handles DOS-style file names with drive letters.
1574d9b34d9Smrg  sed -e 's/^[^:]*: / /' \
1584d9b34d9Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
1594d9b34d9Smrg## This next piece of magic avoids the `deleted header file' problem.
1604d9b34d9Smrg## The problem is that when a header file which appears in a .P file
1614d9b34d9Smrg## is deleted, the dependency causes make to die (because there is
1624d9b34d9Smrg## typically no way to rebuild the header).  We avoid this by adding
1634d9b34d9Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
1644d9b34d9Smrg## this for us directly.
1654d9b34d9Smrg  tr ' ' '
1664d9b34d9Smrg' < "$tmpdepfile" |
1674d9b34d9Smrg## Some versions of gcc put a space before the `:'.  On the theory
1684d9b34d9Smrg## that the space means something, we add a space to the output as
169498372abSmrg## well.  hp depmode also adds that space, but also prefixes the VPATH
170498372abSmrg## to the object.  Take care to not repeat it in the output.
1714d9b34d9Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
1724d9b34d9Smrg## correctly.  Breaking it into two sed invocations is a workaround.
173498372abSmrg    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
174498372abSmrg      | sed -e 's/$/ :/' >> "$depfile"
1754d9b34d9Smrg  rm -f "$tmpdepfile"
1764d9b34d9Smrg  ;;
1774d9b34d9Smrg
1784d9b34d9Smrghp)
1794d9b34d9Smrg  # This case exists only to let depend.m4 do its work.  It works by
1804d9b34d9Smrg  # looking at the text of this script.  This case will never be run,
1814d9b34d9Smrg  # since it is checked for above.
1824d9b34d9Smrg  exit 1
1834d9b34d9Smrg  ;;
1844d9b34d9Smrg
1854d9b34d9Smrgsgi)
1864d9b34d9Smrg  if test "$libtool" = yes; then
1874d9b34d9Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
1884d9b34d9Smrg  else
1894d9b34d9Smrg    "$@" -MDupdate "$tmpdepfile"
1904d9b34d9Smrg  fi
1914d9b34d9Smrg  stat=$?
1924d9b34d9Smrg  if test $stat -eq 0; then :
1934d9b34d9Smrg  else
1944d9b34d9Smrg    rm -f "$tmpdepfile"
1954d9b34d9Smrg    exit $stat
1964d9b34d9Smrg  fi
1974d9b34d9Smrg  rm -f "$depfile"
1984d9b34d9Smrg
1994d9b34d9Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
2004d9b34d9Smrg    echo "$object : \\" > "$depfile"
2014d9b34d9Smrg
2024d9b34d9Smrg    # Clip off the initial element (the dependent).  Don't try to be
2034d9b34d9Smrg    # clever and replace this with sed code, as IRIX sed won't handle
2044d9b34d9Smrg    # lines with more than a fixed number of characters (4096 in
2054d9b34d9Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
2064d9b34d9Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
2074d9b34d9Smrg    # dependency line.
2084d9b34d9Smrg    tr ' ' '
2094d9b34d9Smrg' < "$tmpdepfile" \
2104d9b34d9Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
2114d9b34d9Smrg    tr '
2128512f934Smrg' ' ' >> "$depfile"
2138512f934Smrg    echo >> "$depfile"
2144d9b34d9Smrg
2154d9b34d9Smrg    # The second pass generates a dummy entry for each header file.
2164d9b34d9Smrg    tr ' ' '
2174d9b34d9Smrg' < "$tmpdepfile" \
2184d9b34d9Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
2198512f934Smrg   >> "$depfile"
2204d9b34d9Smrg  else
2214d9b34d9Smrg    # The sourcefile does not contain any dependencies, so just
2224d9b34d9Smrg    # store a dummy comment line, to avoid errors with the Makefile
2234d9b34d9Smrg    # "include basename.Plo" scheme.
2244d9b34d9Smrg    echo "#dummy" > "$depfile"
2254d9b34d9Smrg  fi
2264d9b34d9Smrg  rm -f "$tmpdepfile"
2274d9b34d9Smrg  ;;
2284d9b34d9Smrg
2294d9b34d9Smrgaix)
2304d9b34d9Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
2314d9b34d9Smrg  # in a .u file.  In older versions, this file always lives in the
2324d9b34d9Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
2334d9b34d9Smrg  # start of each line; $object doesn't have directory information.
2344d9b34d9Smrg  # Version 6 uses the directory in both cases.
2358512f934Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
2368512f934Smrg  test "x$dir" = "x$object" && dir=
2378512f934Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
2384d9b34d9Smrg  if test "$libtool" = yes; then
2398512f934Smrg    tmpdepfile1=$dir$base.u
2408512f934Smrg    tmpdepfile2=$base.u
2418512f934Smrg    tmpdepfile3=$dir.libs/$base.u
2424d9b34d9Smrg    "$@" -Wc,-M
2434d9b34d9Smrg  else
2448512f934Smrg    tmpdepfile1=$dir$base.u
2458512f934Smrg    tmpdepfile2=$dir$base.u
2468512f934Smrg    tmpdepfile3=$dir$base.u
2474d9b34d9Smrg    "$@" -M
2484d9b34d9Smrg  fi
2494d9b34d9Smrg  stat=$?
2504d9b34d9Smrg
2514d9b34d9Smrg  if test $stat -eq 0; then :
2524d9b34d9Smrg  else
2538512f934Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2544d9b34d9Smrg    exit $stat
2554d9b34d9Smrg  fi
2564d9b34d9Smrg
2578512f934Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2588512f934Smrg  do
2598512f934Smrg    test -f "$tmpdepfile" && break
2608512f934Smrg  done
2614d9b34d9Smrg  if test -f "$tmpdepfile"; then
2624d9b34d9Smrg    # Each line is of the form `foo.o: dependent.h'.
2634d9b34d9Smrg    # Do two passes, one to just change these to
2644d9b34d9Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
2658512f934Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
2668512f934Smrg    # That's a tab and a space in the [].
2678512f934Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
2684d9b34d9Smrg  else
2694d9b34d9Smrg    # The sourcefile does not contain any dependencies, so just
2704d9b34d9Smrg    # store a dummy comment line, to avoid errors with the Makefile
2714d9b34d9Smrg    # "include basename.Plo" scheme.
2724d9b34d9Smrg    echo "#dummy" > "$depfile"
2734d9b34d9Smrg  fi
2744d9b34d9Smrg  rm -f "$tmpdepfile"
2754d9b34d9Smrg  ;;
2764d9b34d9Smrg
2774d9b34d9Smrgicc)
2784d9b34d9Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
2794d9b34d9Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
2804d9b34d9Smrg  # ICC 7.0 will fill foo.d with something like
2814d9b34d9Smrg  #    foo.o: sub/foo.c
2824d9b34d9Smrg  #    foo.o: sub/foo.h
2834d9b34d9Smrg  # which is wrong.  We want:
2844d9b34d9Smrg  #    sub/foo.o: sub/foo.c
2854d9b34d9Smrg  #    sub/foo.o: sub/foo.h
2864d9b34d9Smrg  #    sub/foo.c:
2874d9b34d9Smrg  #    sub/foo.h:
2884d9b34d9Smrg  # ICC 7.1 will output
2894d9b34d9Smrg  #    foo.o: sub/foo.c sub/foo.h
2904d9b34d9Smrg  # and will wrap long lines using \ :
2914d9b34d9Smrg  #    foo.o: sub/foo.c ... \
2924d9b34d9Smrg  #     sub/foo.h ... \
2934d9b34d9Smrg  #     ...
2944d9b34d9Smrg
2954d9b34d9Smrg  "$@" -MD -MF "$tmpdepfile"
2964d9b34d9Smrg  stat=$?
2974d9b34d9Smrg  if test $stat -eq 0; then :
2984d9b34d9Smrg  else
2994d9b34d9Smrg    rm -f "$tmpdepfile"
3004d9b34d9Smrg    exit $stat
3014d9b34d9Smrg  fi
3024d9b34d9Smrg  rm -f "$depfile"
3034d9b34d9Smrg  # Each line is of the form `foo.o: dependent.h',
3044d9b34d9Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
3054d9b34d9Smrg  # Do two passes, one to just change these to
3064d9b34d9Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
3074d9b34d9Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
3084d9b34d9Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
3094d9b34d9Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
3104d9b34d9Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
3114d9b34d9Smrg    sed -e 's/$/ :/' >> "$depfile"
3124d9b34d9Smrg  rm -f "$tmpdepfile"
3134d9b34d9Smrg  ;;
3144d9b34d9Smrg
3154d9b34d9Smrghp2)
3164d9b34d9Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
3174d9b34d9Smrg  # compilers, which have integrated preprocessors.  The correct option
3184d9b34d9Smrg  # to use with these is +Maked; it writes dependencies to a file named
3194d9b34d9Smrg  # 'foo.d', which lands next to the object file, wherever that
3204d9b34d9Smrg  # happens to be.
3214d9b34d9Smrg  # Much of this is similar to the tru64 case; see comments there.
3224d9b34d9Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3234d9b34d9Smrg  test "x$dir" = "x$object" && dir=
3244d9b34d9Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3254d9b34d9Smrg  if test "$libtool" = yes; then
3264d9b34d9Smrg    tmpdepfile1=$dir$base.d
3274d9b34d9Smrg    tmpdepfile2=$dir.libs/$base.d
3284d9b34d9Smrg    "$@" -Wc,+Maked
3294d9b34d9Smrg  else
3304d9b34d9Smrg    tmpdepfile1=$dir$base.d
3314d9b34d9Smrg    tmpdepfile2=$dir$base.d
3324d9b34d9Smrg    "$@" +Maked
3334d9b34d9Smrg  fi
3344d9b34d9Smrg  stat=$?
3354d9b34d9Smrg  if test $stat -eq 0; then :
3364d9b34d9Smrg  else
3374d9b34d9Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
3384d9b34d9Smrg     exit $stat
3394d9b34d9Smrg  fi
3404d9b34d9Smrg
3414d9b34d9Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
3424d9b34d9Smrg  do
3434d9b34d9Smrg    test -f "$tmpdepfile" && break
3444d9b34d9Smrg  done
3454d9b34d9Smrg  if test -f "$tmpdepfile"; then
3464d9b34d9Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
3474d9b34d9Smrg    # Add `dependent.h:' lines.
3488512f934Smrg    sed -ne '2,${
3498512f934Smrg	       s/^ *//
3508512f934Smrg	       s/ \\*$//
3518512f934Smrg	       s/$/:/
3528512f934Smrg	       p
3538512f934Smrg	     }' "$tmpdepfile" >> "$depfile"
3544d9b34d9Smrg  else
3554d9b34d9Smrg    echo "#dummy" > "$depfile"
3564d9b34d9Smrg  fi
3574d9b34d9Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
3584d9b34d9Smrg  ;;
3594d9b34d9Smrg
3604d9b34d9Smrgtru64)
3614d9b34d9Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
3624d9b34d9Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
3634d9b34d9Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
3644d9b34d9Smrg   # dependencies in `foo.d' instead, so we check for that too.
3654d9b34d9Smrg   # Subdirectories are respected.
3664d9b34d9Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3674d9b34d9Smrg   test "x$dir" = "x$object" && dir=
3684d9b34d9Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3694d9b34d9Smrg
3704d9b34d9Smrg   if test "$libtool" = yes; then
3714d9b34d9Smrg      # With Tru64 cc, shared objects can also be used to make a
3724d9b34d9Smrg      # static library.  This mechanism is used in libtool 1.4 series to
3734d9b34d9Smrg      # handle both shared and static libraries in a single compilation.
3744d9b34d9Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
3754d9b34d9Smrg      #
3764d9b34d9Smrg      # With libtool 1.5 this exception was removed, and libtool now
3774d9b34d9Smrg      # generates 2 separate objects for the 2 libraries.  These two
3784d9b34d9Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
3794d9b34d9Smrg      # in $dir$base.o.d.  We have to check for both files, because
3804d9b34d9Smrg      # one of the two compilations can be disabled.  We should prefer
3814d9b34d9Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
3824d9b34d9Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
3834d9b34d9Smrg      # the former would cause a distcleancheck panic.
3844d9b34d9Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
3854d9b34d9Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
3864d9b34d9Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
3874d9b34d9Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
3884d9b34d9Smrg      "$@" -Wc,-MD
3894d9b34d9Smrg   else
3904d9b34d9Smrg      tmpdepfile1=$dir$base.o.d
3914d9b34d9Smrg      tmpdepfile2=$dir$base.d
3924d9b34d9Smrg      tmpdepfile3=$dir$base.d
3934d9b34d9Smrg      tmpdepfile4=$dir$base.d
3944d9b34d9Smrg      "$@" -MD
3954d9b34d9Smrg   fi
3964d9b34d9Smrg
3974d9b34d9Smrg   stat=$?
3984d9b34d9Smrg   if test $stat -eq 0; then :
3994d9b34d9Smrg   else
4004d9b34d9Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
4014d9b34d9Smrg      exit $stat
4024d9b34d9Smrg   fi
4034d9b34d9Smrg
4044d9b34d9Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
4054d9b34d9Smrg   do
4064d9b34d9Smrg     test -f "$tmpdepfile" && break
4074d9b34d9Smrg   done
4084d9b34d9Smrg   if test -f "$tmpdepfile"; then
4094d9b34d9Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
4104d9b34d9Smrg      # That's a tab and a space in the [].
4114d9b34d9Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
4124d9b34d9Smrg   else
4134d9b34d9Smrg      echo "#dummy" > "$depfile"
4144d9b34d9Smrg   fi
4154d9b34d9Smrg   rm -f "$tmpdepfile"
4164d9b34d9Smrg   ;;
4174d9b34d9Smrg
418498372abSmrgmsvc7)
419498372abSmrg  if test "$libtool" = yes; then
420498372abSmrg    showIncludes=-Wc,-showIncludes
421498372abSmrg  else
422498372abSmrg    showIncludes=-showIncludes
423498372abSmrg  fi
424498372abSmrg  "$@" $showIncludes > "$tmpdepfile"
425498372abSmrg  stat=$?
426498372abSmrg  grep -v '^Note: including file: ' "$tmpdepfile"
427498372abSmrg  if test "$stat" = 0; then :
428498372abSmrg  else
429498372abSmrg    rm -f "$tmpdepfile"
430498372abSmrg    exit $stat
431498372abSmrg  fi
432498372abSmrg  rm -f "$depfile"
433498372abSmrg  echo "$object : \\" > "$depfile"
434498372abSmrg  # The first sed program below extracts the file names and escapes
435498372abSmrg  # backslashes for cygpath.  The second sed program outputs the file
436498372abSmrg  # name when reading, but also accumulates all include files in the
437498372abSmrg  # hold buffer in order to output them again at the end.  This only
438498372abSmrg  # works with sed implementations that can handle large buffers.
439498372abSmrg  sed < "$tmpdepfile" -n '
440498372abSmrg/^Note: including file:  *\(.*\)/ {
441498372abSmrg  s//\1/
442498372abSmrg  s/\\/\\\\/g
443498372abSmrg  p
444498372abSmrg}' | $cygpath_u | sort -u | sed -n '
445498372abSmrgs/ /\\ /g
446498372abSmrgs/\(.*\)/	\1 \\/p
447498372abSmrgs/.\(.*\) \\/\1:/
448498372abSmrgH
449498372abSmrg$ {
450498372abSmrg  s/.*/	/
451498372abSmrg  G
452498372abSmrg  p
453498372abSmrg}' >> "$depfile"
454498372abSmrg  rm -f "$tmpdepfile"
455498372abSmrg  ;;
456498372abSmrg
457498372abSmrgmsvc7msys)
458498372abSmrg  # This case exists only to let depend.m4 do its work.  It works by
459498372abSmrg  # looking at the text of this script.  This case will never be run,
460498372abSmrg  # since it is checked for above.
461498372abSmrg  exit 1
462498372abSmrg  ;;
463498372abSmrg
4644d9b34d9Smrg#nosideeffect)
4654d9b34d9Smrg  # This comment above is used by automake to tell side-effect
4664d9b34d9Smrg  # dependency tracking mechanisms from slower ones.
4674d9b34d9Smrg
4684d9b34d9Smrgdashmstdout)
4694d9b34d9Smrg  # Important note: in order to support this mode, a compiler *must*
4704d9b34d9Smrg  # always write the preprocessed file to stdout, regardless of -o.
4714d9b34d9Smrg  "$@" || exit $?
4724d9b34d9Smrg
4734d9b34d9Smrg  # Remove the call to Libtool.
4744d9b34d9Smrg  if test "$libtool" = yes; then
4758512f934Smrg    while test "X$1" != 'X--mode=compile'; do
4764d9b34d9Smrg      shift
4774d9b34d9Smrg    done
4784d9b34d9Smrg    shift
4794d9b34d9Smrg  fi
4804d9b34d9Smrg
4814d9b34d9Smrg  # Remove `-o $object'.
4824d9b34d9Smrg  IFS=" "
4834d9b34d9Smrg  for arg
4844d9b34d9Smrg  do
4854d9b34d9Smrg    case $arg in
4864d9b34d9Smrg    -o)
4874d9b34d9Smrg      shift
4884d9b34d9Smrg      ;;
4894d9b34d9Smrg    $object)
4904d9b34d9Smrg      shift
4914d9b34d9Smrg      ;;
4924d9b34d9Smrg    *)
4934d9b34d9Smrg      set fnord "$@" "$arg"
4944d9b34d9Smrg      shift # fnord
4954d9b34d9Smrg      shift # $arg
4964d9b34d9Smrg      ;;
4974d9b34d9Smrg    esac
4984d9b34d9Smrg  done
4994d9b34d9Smrg
5004d9b34d9Smrg  test -z "$dashmflag" && dashmflag=-M
5014d9b34d9Smrg  # Require at least two characters before searching for `:'
5024d9b34d9Smrg  # in the target name.  This is to cope with DOS-style filenames:
5034d9b34d9Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
5044d9b34d9Smrg  "$@" $dashmflag |
5054d9b34d9Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
5064d9b34d9Smrg  rm -f "$depfile"
5074d9b34d9Smrg  cat < "$tmpdepfile" > "$depfile"
5084d9b34d9Smrg  tr ' ' '
5094d9b34d9Smrg' < "$tmpdepfile" | \
5104d9b34d9Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
5114d9b34d9Smrg## correctly.  Breaking it into two sed invocations is a workaround.
5124d9b34d9Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
5134d9b34d9Smrg  rm -f "$tmpdepfile"
5144d9b34d9Smrg  ;;
5154d9b34d9Smrg
5164d9b34d9SmrgdashXmstdout)
5174d9b34d9Smrg  # This case only exists to satisfy depend.m4.  It is never actually
5184d9b34d9Smrg  # run, as this mode is specially recognized in the preamble.
5194d9b34d9Smrg  exit 1
5204d9b34d9Smrg  ;;
5214d9b34d9Smrg
5224d9b34d9Smrgmakedepend)
5234d9b34d9Smrg  "$@" || exit $?
5244d9b34d9Smrg  # Remove any Libtool call
5254d9b34d9Smrg  if test "$libtool" = yes; then
5268512f934Smrg    while test "X$1" != 'X--mode=compile'; do
5274d9b34d9Smrg      shift
5284d9b34d9Smrg    done
5294d9b34d9Smrg    shift
5304d9b34d9Smrg  fi
5314d9b34d9Smrg  # X makedepend
5324d9b34d9Smrg  shift
5338512f934Smrg  cleared=no eat=no
5348512f934Smrg  for arg
5358512f934Smrg  do
5364d9b34d9Smrg    case $cleared in
5374d9b34d9Smrg    no)
5384d9b34d9Smrg      set ""; shift
5394d9b34d9Smrg      cleared=yes ;;
5404d9b34d9Smrg    esac
5418512f934Smrg    if test $eat = yes; then
5428512f934Smrg      eat=no
5438512f934Smrg      continue
5448512f934Smrg    fi
5454d9b34d9Smrg    case "$arg" in
5464d9b34d9Smrg    -D*|-I*)
5474d9b34d9Smrg      set fnord "$@" "$arg"; shift ;;
5484d9b34d9Smrg    # Strip any option that makedepend may not understand.  Remove
5494d9b34d9Smrg    # the object too, otherwise makedepend will parse it as a source file.
5508512f934Smrg    -arch)
5518512f934Smrg      eat=yes ;;
5524d9b34d9Smrg    -*|$object)
5534d9b34d9Smrg      ;;
5544d9b34d9Smrg    *)
5554d9b34d9Smrg      set fnord "$@" "$arg"; shift ;;
5564d9b34d9Smrg    esac
5574d9b34d9Smrg  done
5588512f934Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
5594d9b34d9Smrg  touch "$tmpdepfile"
5604d9b34d9Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
5614d9b34d9Smrg  rm -f "$depfile"
562498372abSmrg  # makedepend may prepend the VPATH from the source file name to the object.
563498372abSmrg  # No need to regex-escape $object, excess matching of '.' is harmless.
564498372abSmrg  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
5654d9b34d9Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
5664d9b34d9Smrg' | \
5674d9b34d9Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
5684d9b34d9Smrg## correctly.  Breaking it into two sed invocations is a workaround.
5694d9b34d9Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
5704d9b34d9Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
5714d9b34d9Smrg  ;;
5724d9b34d9Smrg
5734d9b34d9Smrgcpp)
5744d9b34d9Smrg  # Important note: in order to support this mode, a compiler *must*
5754d9b34d9Smrg  # always write the preprocessed file to stdout.
5764d9b34d9Smrg  "$@" || exit $?
5774d9b34d9Smrg
5784d9b34d9Smrg  # Remove the call to Libtool.
5794d9b34d9Smrg  if test "$libtool" = yes; then
5808512f934Smrg    while test "X$1" != 'X--mode=compile'; do
5814d9b34d9Smrg      shift
5824d9b34d9Smrg    done
5834d9b34d9Smrg    shift
5844d9b34d9Smrg  fi
5854d9b34d9Smrg
5864d9b34d9Smrg  # Remove `-o $object'.
5874d9b34d9Smrg  IFS=" "
5884d9b34d9Smrg  for arg
5894d9b34d9Smrg  do
5904d9b34d9Smrg    case $arg in
5914d9b34d9Smrg    -o)
5924d9b34d9Smrg      shift
5934d9b34d9Smrg      ;;
5944d9b34d9Smrg    $object)
5954d9b34d9Smrg      shift
5964d9b34d9Smrg      ;;
5974d9b34d9Smrg    *)
5984d9b34d9Smrg      set fnord "$@" "$arg"
5994d9b34d9Smrg      shift # fnord
6004d9b34d9Smrg      shift # $arg
6014d9b34d9Smrg      ;;
6024d9b34d9Smrg    esac
6034d9b34d9Smrg  done
6044d9b34d9Smrg
6054d9b34d9Smrg  "$@" -E |
6064d9b34d9Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
6074d9b34d9Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
6084d9b34d9Smrg    sed '$ s: \\$::' > "$tmpdepfile"
6094d9b34d9Smrg  rm -f "$depfile"
6104d9b34d9Smrg  echo "$object : \\" > "$depfile"
6114d9b34d9Smrg  cat < "$tmpdepfile" >> "$depfile"
6124d9b34d9Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
6134d9b34d9Smrg  rm -f "$tmpdepfile"
6144d9b34d9Smrg  ;;
6154d9b34d9Smrg
6164d9b34d9Smrgmsvisualcpp)
6174d9b34d9Smrg  # Important note: in order to support this mode, a compiler *must*
6188512f934Smrg  # always write the preprocessed file to stdout.
6194d9b34d9Smrg  "$@" || exit $?
6208512f934Smrg
6218512f934Smrg  # Remove the call to Libtool.
6228512f934Smrg  if test "$libtool" = yes; then
6238512f934Smrg    while test "X$1" != 'X--mode=compile'; do
6248512f934Smrg      shift
6258512f934Smrg    done
6268512f934Smrg    shift
6278512f934Smrg  fi
6288512f934Smrg
6294d9b34d9Smrg  IFS=" "
6304d9b34d9Smrg  for arg
6314d9b34d9Smrg  do
6324d9b34d9Smrg    case "$arg" in
6338512f934Smrg    -o)
6348512f934Smrg      shift
6358512f934Smrg      ;;
6368512f934Smrg    $object)
6378512f934Smrg      shift
6388512f934Smrg      ;;
6394d9b34d9Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
6404d9b34d9Smrg	set fnord "$@"
6414d9b34d9Smrg	shift
6424d9b34d9Smrg	shift
6434d9b34d9Smrg	;;
6444d9b34d9Smrg    *)
6454d9b34d9Smrg	set fnord "$@" "$arg"
6464d9b34d9Smrg	shift
6474d9b34d9Smrg	shift
6484d9b34d9Smrg	;;
6494d9b34d9Smrg    esac
6504d9b34d9Smrg  done
6518512f934Smrg  "$@" -E 2>/dev/null |
6528512f934Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
6534d9b34d9Smrg  rm -f "$depfile"
6544d9b34d9Smrg  echo "$object : \\" > "$depfile"
6558512f934Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
6564d9b34d9Smrg  echo "	" >> "$depfile"
6578512f934Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
6584d9b34d9Smrg  rm -f "$tmpdepfile"
6594d9b34d9Smrg  ;;
6604d9b34d9Smrg
6618512f934Smrgmsvcmsys)
6628512f934Smrg  # This case exists only to let depend.m4 do its work.  It works by
6638512f934Smrg  # looking at the text of this script.  This case will never be run,
6648512f934Smrg  # since it is checked for above.
6658512f934Smrg  exit 1
6668512f934Smrg  ;;
6678512f934Smrg
6684d9b34d9Smrgnone)
6694d9b34d9Smrg  exec "$@"
6704d9b34d9Smrg  ;;
6714d9b34d9Smrg
6724d9b34d9Smrg*)
6734d9b34d9Smrg  echo "Unknown depmode $depmode" 1>&2
6744d9b34d9Smrg  exit 1
6754d9b34d9Smrg  ;;
6764d9b34d9Smrgesac
6774d9b34d9Smrg
6784d9b34d9Smrgexit 0
6794d9b34d9Smrg
6804d9b34d9Smrg# Local Variables:
6814d9b34d9Smrg# mode: shell-script
6824d9b34d9Smrg# sh-indentation: 2
6834d9b34d9Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
6844d9b34d9Smrg# time-stamp-start: "scriptversion="
6854d9b34d9Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
6868512f934Smrg# time-stamp-time-zone: "UTC"
6878512f934Smrg# time-stamp-end: "; # UTC"
6884d9b34d9Smrg# End:
689