17e6fb56fSmrg#! /bin/sh
27e6fb56fSmrg# depcomp - compile a program generating dependencies as side-effects
37e6fb56fSmrg
4983b4bf2Smrgscriptversion=2011-12-04.11; # UTC
57e6fb56fSmrg
6983b4bf2Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
7983b4bf2Smrg# 2011 Free Software Foundation, Inc.
87e6fb56fSmrg
97e6fb56fSmrg# This program is free software; you can redistribute it and/or modify
107e6fb56fSmrg# it under the terms of the GNU General Public License as published by
117e6fb56fSmrg# the Free Software Foundation; either version 2, or (at your option)
127e6fb56fSmrg# any later version.
137e6fb56fSmrg
147e6fb56fSmrg# This program is distributed in the hope that it will be useful,
157e6fb56fSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
167e6fb56fSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
177e6fb56fSmrg# GNU General Public License for more details.
187e6fb56fSmrg
197e6fb56fSmrg# You should have received a copy of the GNU General Public License
207e6fb56fSmrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
217e6fb56fSmrg
227e6fb56fSmrg# As a special exception to the GNU General Public License, if you
237e6fb56fSmrg# distribute this file as part of a program that contains a
247e6fb56fSmrg# configuration script generated by Autoconf, you may include it under
257e6fb56fSmrg# the same distribution terms that you use for the rest of that program.
267e6fb56fSmrg
277e6fb56fSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
287e6fb56fSmrg
297e6fb56fSmrgcase $1 in
307e6fb56fSmrg  '')
31983b4bf2Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
32983b4bf2Smrg     exit 1;
33983b4bf2Smrg     ;;
347e6fb56fSmrg  -h | --h*)
357e6fb56fSmrg    cat <<\EOF
367e6fb56fSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
377e6fb56fSmrg
387e6fb56fSmrgRun PROGRAMS ARGS to compile a file, generating dependencies
397e6fb56fSmrgas side-effects.
407e6fb56fSmrg
417e6fb56fSmrgEnvironment variables:
427e6fb56fSmrg  depmode     Dependency tracking mode.
43983b4bf2Smrg  source      Source file read by `PROGRAMS ARGS'.
44983b4bf2Smrg  object      Object file output by `PROGRAMS ARGS'.
457e6fb56fSmrg  DEPDIR      directory where to store dependencies.
467e6fb56fSmrg  depfile     Dependency file to output.
4790b17f1bSmrg  tmpdepfile  Temporary file to use when outputting dependencies.
487e6fb56fSmrg  libtool     Whether libtool is used (yes/no).
497e6fb56fSmrg
507e6fb56fSmrgReport bugs to <bug-automake@gnu.org>.
517e6fb56fSmrgEOF
527e6fb56fSmrg    exit $?
537e6fb56fSmrg    ;;
547e6fb56fSmrg  -v | --v*)
557e6fb56fSmrg    echo "depcomp $scriptversion"
567e6fb56fSmrg    exit $?
577e6fb56fSmrg    ;;
587e6fb56fSmrgesac
597e6fb56fSmrg
607e6fb56fSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
617e6fb56fSmrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
627e6fb56fSmrg  exit 1
637e6fb56fSmrgfi
647e6fb56fSmrg
657e6fb56fSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
667e6fb56fSmrgdepfile=${depfile-`echo "$object" |
677e6fb56fSmrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
687e6fb56fSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
697e6fb56fSmrg
707e6fb56fSmrgrm -f "$tmpdepfile"
717e6fb56fSmrg
727e6fb56fSmrg# Some modes work just like other modes, but use different flags.  We
737e6fb56fSmrg# parameterize here, but still list the modes in the big case below,
747e6fb56fSmrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
757e6fb56fSmrg# here, because this file can only contain one case statement.
767e6fb56fSmrgif test "$depmode" = hp; then
777e6fb56fSmrg  # HP compiler uses -M and no extra arg.
787e6fb56fSmrg  gccflag=-M
797e6fb56fSmrg  depmode=gcc
807e6fb56fSmrgfi
817e6fb56fSmrg
827e6fb56fSmrgif test "$depmode" = dashXmstdout; then
83983b4bf2Smrg   # This is just like dashmstdout with a different argument.
84983b4bf2Smrg   dashmflag=-xM
85983b4bf2Smrg   depmode=dashmstdout
867e6fb56fSmrgfi
877e6fb56fSmrg
887e6fb56fSmrgcygpath_u="cygpath -u -f -"
897e6fb56fSmrgif test "$depmode" = msvcmsys; then
90983b4bf2Smrg   # This is just like msvisualcpp but w/o cygpath translation.
91983b4bf2Smrg   # Just convert the backslash-escaped backslashes to single forward
92983b4bf2Smrg   # slashes to satisfy depend.m4
93983b4bf2Smrg   cygpath_u='sed s,\\\\,/,g'
94983b4bf2Smrg   depmode=msvisualcpp
957e6fb56fSmrgfi
967e6fb56fSmrg
9790b17f1bSmrgif test "$depmode" = msvc7msys; then
98983b4bf2Smrg   # This is just like msvc7 but w/o cygpath translation.
99983b4bf2Smrg   # Just convert the backslash-escaped backslashes to single forward
100983b4bf2Smrg   # slashes to satisfy depend.m4
101983b4bf2Smrg   cygpath_u='sed s,\\\\,/,g'
102983b4bf2Smrg   depmode=msvc7
10390b17f1bSmrgfi
10490b17f1bSmrg
1057e6fb56fSmrgcase "$depmode" in
1067e6fb56fSmrggcc3)
1077e6fb56fSmrg## gcc 3 implements dependency tracking that does exactly what
1087e6fb56fSmrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
1097e6fb56fSmrg## it if -MD -MP comes after the -MF stuff.  Hmm.
1107e6fb56fSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
1117e6fb56fSmrg## the command line argument order; so add the flags where they
1127e6fb56fSmrg## appear in depend2.am.  Note that the slowdown incurred here
1137e6fb56fSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
1147e6fb56fSmrg  for arg
1157e6fb56fSmrg  do
1167e6fb56fSmrg    case $arg in
1177e6fb56fSmrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
1187e6fb56fSmrg    *)  set fnord "$@" "$arg" ;;
1197e6fb56fSmrg    esac
1207e6fb56fSmrg    shift # fnord
1217e6fb56fSmrg    shift # $arg
1227e6fb56fSmrg  done
1237e6fb56fSmrg  "$@"
1247e6fb56fSmrg  stat=$?
125983b4bf2Smrg  if test $stat -eq 0; then :
126983b4bf2Smrg  else
1277e6fb56fSmrg    rm -f "$tmpdepfile"
1287e6fb56fSmrg    exit $stat
1297e6fb56fSmrg  fi
1307e6fb56fSmrg  mv "$tmpdepfile" "$depfile"
1317e6fb56fSmrg  ;;
1327e6fb56fSmrg
1337e6fb56fSmrggcc)
1347e6fb56fSmrg## There are various ways to get dependency output from gcc.  Here's
1357e6fb56fSmrg## why we pick this rather obscure method:
1367e6fb56fSmrg## - Don't want to use -MD because we'd like the dependencies to end
1377e6fb56fSmrg##   up in a subdir.  Having to rename by hand is ugly.
1387e6fb56fSmrg##   (We might end up doing this anyway to support other compilers.)
1397e6fb56fSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
140983b4bf2Smrg##   -MM, not -M (despite what the docs say).
1417e6fb56fSmrg## - Using -M directly means running the compiler twice (even worse
1427e6fb56fSmrg##   than renaming).
1437e6fb56fSmrg  if test -z "$gccflag"; then
1447e6fb56fSmrg    gccflag=-MD,
1457e6fb56fSmrg  fi
1467e6fb56fSmrg  "$@" -Wp,"$gccflag$tmpdepfile"
1477e6fb56fSmrg  stat=$?
148983b4bf2Smrg  if test $stat -eq 0; then :
149983b4bf2Smrg  else
1507e6fb56fSmrg    rm -f "$tmpdepfile"
1517e6fb56fSmrg    exit $stat
1527e6fb56fSmrg  fi
1537e6fb56fSmrg  rm -f "$depfile"
1547e6fb56fSmrg  echo "$object : \\" > "$depfile"
155983b4bf2Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
156983b4bf2Smrg## The second -e expression handles DOS-style file names with drive letters.
1577e6fb56fSmrg  sed -e 's/^[^:]*: / /' \
1587e6fb56fSmrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
159983b4bf2Smrg## This next piece of magic avoids the `deleted header file' problem.
1607e6fb56fSmrg## The problem is that when a header file which appears in a .P file
1617e6fb56fSmrg## is deleted, the dependency causes make to die (because there is
1627e6fb56fSmrg## typically no way to rebuild the header).  We avoid this by adding
1637e6fb56fSmrg## dummy dependencies for each header file.  Too bad gcc doesn't do
1647e6fb56fSmrg## this for us directly.
165983b4bf2Smrg  tr ' ' '
166983b4bf2Smrg' < "$tmpdepfile" |
167983b4bf2Smrg## Some versions of gcc put a space before the `:'.  On the theory
1687e6fb56fSmrg## that the space means something, we add a space to the output as
16990b17f1bSmrg## well.  hp depmode also adds that space, but also prefixes the VPATH
17090b17f1bSmrg## to the object.  Take care to not repeat it in the output.
1717e6fb56fSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
1727e6fb56fSmrg## correctly.  Breaking it into two sed invocations is a workaround.
173983b4bf2Smrg    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
174983b4bf2Smrg      | sed -e 's/$/ :/' >> "$depfile"
1757e6fb56fSmrg  rm -f "$tmpdepfile"
1767e6fb56fSmrg  ;;
1777e6fb56fSmrg
1787e6fb56fSmrghp)
1797e6fb56fSmrg  # This case exists only to let depend.m4 do its work.  It works by
1807e6fb56fSmrg  # looking at the text of this script.  This case will never be run,
1817e6fb56fSmrg  # since it is checked for above.
1827e6fb56fSmrg  exit 1
1837e6fb56fSmrg  ;;
1847e6fb56fSmrg
1857e6fb56fSmrgsgi)
1867e6fb56fSmrg  if test "$libtool" = yes; then
1877e6fb56fSmrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
1887e6fb56fSmrg  else
1897e6fb56fSmrg    "$@" -MDupdate "$tmpdepfile"
1907e6fb56fSmrg  fi
1917e6fb56fSmrg  stat=$?
192983b4bf2Smrg  if test $stat -eq 0; then :
193983b4bf2Smrg  else
1947e6fb56fSmrg    rm -f "$tmpdepfile"
1957e6fb56fSmrg    exit $stat
1967e6fb56fSmrg  fi
1977e6fb56fSmrg  rm -f "$depfile"
1987e6fb56fSmrg
1997e6fb56fSmrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
2007e6fb56fSmrg    echo "$object : \\" > "$depfile"
201983b4bf2Smrg
2027e6fb56fSmrg    # Clip off the initial element (the dependent).  Don't try to be
2037e6fb56fSmrg    # clever and replace this with sed code, as IRIX sed won't handle
2047e6fb56fSmrg    # lines with more than a fixed number of characters (4096 in
2057e6fb56fSmrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
206983b4bf2Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
2077e6fb56fSmrg    # dependency line.
208983b4bf2Smrg    tr ' ' '
209983b4bf2Smrg' < "$tmpdepfile" \
210983b4bf2Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
211983b4bf2Smrg    tr '
212983b4bf2Smrg' ' ' >> "$depfile"
2137e6fb56fSmrg    echo >> "$depfile"
214983b4bf2Smrg
2157e6fb56fSmrg    # The second pass generates a dummy entry for each header file.
216983b4bf2Smrg    tr ' ' '
217983b4bf2Smrg' < "$tmpdepfile" \
218983b4bf2Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
219983b4bf2Smrg   >> "$depfile"
2207e6fb56fSmrg  else
221983b4bf2Smrg    # The sourcefile does not contain any dependencies, so just
222983b4bf2Smrg    # store a dummy comment line, to avoid errors with the Makefile
223983b4bf2Smrg    # "include basename.Plo" scheme.
224983b4bf2Smrg    echo "#dummy" > "$depfile"
2257e6fb56fSmrg  fi
2267e6fb56fSmrg  rm -f "$tmpdepfile"
2277e6fb56fSmrg  ;;
2287e6fb56fSmrg
2297e6fb56fSmrgaix)
2307e6fb56fSmrg  # The C for AIX Compiler uses -M and outputs the dependencies
2317e6fb56fSmrg  # in a .u file.  In older versions, this file always lives in the
232983b4bf2Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
2337e6fb56fSmrg  # start of each line; $object doesn't have directory information.
2347e6fb56fSmrg  # Version 6 uses the directory in both cases.
235983b4bf2Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
236983b4bf2Smrg  test "x$dir" = "x$object" && dir=
237983b4bf2Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
2387e6fb56fSmrg  if test "$libtool" = yes; then
2397e6fb56fSmrg    tmpdepfile1=$dir$base.u
2407e6fb56fSmrg    tmpdepfile2=$base.u
2417e6fb56fSmrg    tmpdepfile3=$dir.libs/$base.u
2427e6fb56fSmrg    "$@" -Wc,-M
2437e6fb56fSmrg  else
2447e6fb56fSmrg    tmpdepfile1=$dir$base.u
2457e6fb56fSmrg    tmpdepfile2=$dir$base.u
2467e6fb56fSmrg    tmpdepfile3=$dir$base.u
2477e6fb56fSmrg    "$@" -M
2487e6fb56fSmrg  fi
2497e6fb56fSmrg  stat=$?
250983b4bf2Smrg
251983b4bf2Smrg  if test $stat -eq 0; then :
252983b4bf2Smrg  else
2537e6fb56fSmrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2547e6fb56fSmrg    exit $stat
2557e6fb56fSmrg  fi
2567e6fb56fSmrg
2577e6fb56fSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2587e6fb56fSmrg  do
2597e6fb56fSmrg    test -f "$tmpdepfile" && break
2607e6fb56fSmrg  done
261983b4bf2Smrg  if test -f "$tmpdepfile"; then
262983b4bf2Smrg    # Each line is of the form `foo.o: dependent.h'.
263983b4bf2Smrg    # Do two passes, one to just change these to
264983b4bf2Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
265983b4bf2Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
266983b4bf2Smrg    # That's a tab and a space in the [].
267983b4bf2Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
268983b4bf2Smrg  else
269983b4bf2Smrg    # The sourcefile does not contain any dependencies, so just
270983b4bf2Smrg    # store a dummy comment line, to avoid errors with the Makefile
271983b4bf2Smrg    # "include basename.Plo" scheme.
272983b4bf2Smrg    echo "#dummy" > "$depfile"
2737e6fb56fSmrg  fi
2747e6fb56fSmrg  rm -f "$tmpdepfile"
2757e6fb56fSmrg  ;;
2767e6fb56fSmrg
277983b4bf2Smrgicc)
278983b4bf2Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
279983b4bf2Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
280983b4bf2Smrg  # ICC 7.0 will fill foo.d with something like
281983b4bf2Smrg  #    foo.o: sub/foo.c
282983b4bf2Smrg  #    foo.o: sub/foo.h
283983b4bf2Smrg  # which is wrong.  We want:
284983b4bf2Smrg  #    sub/foo.o: sub/foo.c
285983b4bf2Smrg  #    sub/foo.o: sub/foo.h
286983b4bf2Smrg  #    sub/foo.c:
287983b4bf2Smrg  #    sub/foo.h:
288983b4bf2Smrg  # ICC 7.1 will output
2897e6fb56fSmrg  #    foo.o: sub/foo.c sub/foo.h
290983b4bf2Smrg  # and will wrap long lines using \ :
2917e6fb56fSmrg  #    foo.o: sub/foo.c ... \
2927e6fb56fSmrg  #     sub/foo.h ... \
2937e6fb56fSmrg  #     ...
294963d66acSmrg
295983b4bf2Smrg  "$@" -MD -MF "$tmpdepfile"
296983b4bf2Smrg  stat=$?
297983b4bf2Smrg  if test $stat -eq 0; then :
298983b4bf2Smrg  else
2997e6fb56fSmrg    rm -f "$tmpdepfile"
3007e6fb56fSmrg    exit $stat
3017e6fb56fSmrg  fi
3027e6fb56fSmrg  rm -f "$depfile"
303963d66acSmrg  # Each line is of the form `foo.o: dependent.h',
304963d66acSmrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
3057e6fb56fSmrg  # Do two passes, one to just change these to
306963d66acSmrg  # `$object: dependent.h' and one to simply `dependent.h:'.
307963d66acSmrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
308963d66acSmrg  # Some versions of the HPUX 10.20 sed can't process this invocation
309963d66acSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
310983b4bf2Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
311983b4bf2Smrg    sed -e 's/$/ :/' >> "$depfile"
3127e6fb56fSmrg  rm -f "$tmpdepfile"
3137e6fb56fSmrg  ;;
3147e6fb56fSmrg
3157e6fb56fSmrghp2)
3167e6fb56fSmrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
3177e6fb56fSmrg  # compilers, which have integrated preprocessors.  The correct option
3187e6fb56fSmrg  # to use with these is +Maked; it writes dependencies to a file named
3197e6fb56fSmrg  # 'foo.d', which lands next to the object file, wherever that
3207e6fb56fSmrg  # happens to be.
3217e6fb56fSmrg  # Much of this is similar to the tru64 case; see comments there.
322983b4bf2Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
323983b4bf2Smrg  test "x$dir" = "x$object" && dir=
324983b4bf2Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3257e6fb56fSmrg  if test "$libtool" = yes; then
3267e6fb56fSmrg    tmpdepfile1=$dir$base.d
3277e6fb56fSmrg    tmpdepfile2=$dir.libs/$base.d
3287e6fb56fSmrg    "$@" -Wc,+Maked
3297e6fb56fSmrg  else
3307e6fb56fSmrg    tmpdepfile1=$dir$base.d
3317e6fb56fSmrg    tmpdepfile2=$dir$base.d
3327e6fb56fSmrg    "$@" +Maked
3337e6fb56fSmrg  fi
3347e6fb56fSmrg  stat=$?
335983b4bf2Smrg  if test $stat -eq 0; then :
336983b4bf2Smrg  else
3377e6fb56fSmrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
3387e6fb56fSmrg     exit $stat
3397e6fb56fSmrg  fi
3407e6fb56fSmrg
3417e6fb56fSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
3427e6fb56fSmrg  do
3437e6fb56fSmrg    test -f "$tmpdepfile" && break
3447e6fb56fSmrg  done
3457e6fb56fSmrg  if test -f "$tmpdepfile"; then
346983b4bf2Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
347983b4bf2Smrg    # Add `dependent.h:' lines.
3487e6fb56fSmrg    sed -ne '2,${
349983b4bf2Smrg	       s/^ *//
350983b4bf2Smrg	       s/ \\*$//
351983b4bf2Smrg	       s/$/:/
352983b4bf2Smrg	       p
353983b4bf2Smrg	     }' "$tmpdepfile" >> "$depfile"
3547e6fb56fSmrg  else
355983b4bf2Smrg    echo "#dummy" > "$depfile"
3567e6fb56fSmrg  fi
3577e6fb56fSmrg  rm -f "$tmpdepfile" "$tmpdepfile2"
3587e6fb56fSmrg  ;;
3597e6fb56fSmrg
3607e6fb56fSmrgtru64)
361983b4bf2Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
362983b4bf2Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
363983b4bf2Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
364983b4bf2Smrg   # dependencies in `foo.d' instead, so we check for that too.
365983b4bf2Smrg   # Subdirectories are respected.
366983b4bf2Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
367983b4bf2Smrg   test "x$dir" = "x$object" && dir=
368983b4bf2Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
369983b4bf2Smrg
370983b4bf2Smrg   if test "$libtool" = yes; then
371983b4bf2Smrg      # With Tru64 cc, shared objects can also be used to make a
372983b4bf2Smrg      # static library.  This mechanism is used in libtool 1.4 series to
373983b4bf2Smrg      # handle both shared and static libraries in a single compilation.
374983b4bf2Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
375983b4bf2Smrg      #
376983b4bf2Smrg      # With libtool 1.5 this exception was removed, and libtool now
377983b4bf2Smrg      # generates 2 separate objects for the 2 libraries.  These two
378983b4bf2Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
379983b4bf2Smrg      # in $dir$base.o.d.  We have to check for both files, because
380983b4bf2Smrg      # one of the two compilations can be disabled.  We should prefer
381983b4bf2Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
382983b4bf2Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
383983b4bf2Smrg      # the former would cause a distcleancheck panic.
384983b4bf2Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
385983b4bf2Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
386983b4bf2Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
387983b4bf2Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
388983b4bf2Smrg      "$@" -Wc,-MD
389983b4bf2Smrg   else
390983b4bf2Smrg      tmpdepfile1=$dir$base.o.d
391983b4bf2Smrg      tmpdepfile2=$dir$base.d
392983b4bf2Smrg      tmpdepfile3=$dir$base.d
393983b4bf2Smrg      tmpdepfile4=$dir$base.d
394983b4bf2Smrg      "$@" -MD
395983b4bf2Smrg   fi
396983b4bf2Smrg
397983b4bf2Smrg   stat=$?
398983b4bf2Smrg   if test $stat -eq 0; then :
399983b4bf2Smrg   else
400983b4bf2Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
401983b4bf2Smrg      exit $stat
402983b4bf2Smrg   fi
403983b4bf2Smrg
404983b4bf2Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
405983b4bf2Smrg   do
406983b4bf2Smrg     test -f "$tmpdepfile" && break
407983b4bf2Smrg   done
408983b4bf2Smrg   if test -f "$tmpdepfile"; then
409983b4bf2Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
410983b4bf2Smrg      # That's a tab and a space in the [].
411983b4bf2Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
412983b4bf2Smrg   else
413983b4bf2Smrg      echo "#dummy" > "$depfile"
414983b4bf2Smrg   fi
415983b4bf2Smrg   rm -f "$tmpdepfile"
416983b4bf2Smrg   ;;
4177e6fb56fSmrg
41890b17f1bSmrgmsvc7)
41990b17f1bSmrg  if test "$libtool" = yes; then
42090b17f1bSmrg    showIncludes=-Wc,-showIncludes
42190b17f1bSmrg  else
42290b17f1bSmrg    showIncludes=-showIncludes
42390b17f1bSmrg  fi
42490b17f1bSmrg  "$@" $showIncludes > "$tmpdepfile"
42590b17f1bSmrg  stat=$?
42690b17f1bSmrg  grep -v '^Note: including file: ' "$tmpdepfile"
427983b4bf2Smrg  if test "$stat" = 0; then :
428983b4bf2Smrg  else
42990b17f1bSmrg    rm -f "$tmpdepfile"
43090b17f1bSmrg    exit $stat
43190b17f1bSmrg  fi
43290b17f1bSmrg  rm -f "$depfile"
43390b17f1bSmrg  echo "$object : \\" > "$depfile"
43490b17f1bSmrg  # The first sed program below extracts the file names and escapes
43590b17f1bSmrg  # backslashes for cygpath.  The second sed program outputs the file
43690b17f1bSmrg  # name when reading, but also accumulates all include files in the
43790b17f1bSmrg  # hold buffer in order to output them again at the end.  This only
43890b17f1bSmrg  # works with sed implementations that can handle large buffers.
43990b17f1bSmrg  sed < "$tmpdepfile" -n '
44090b17f1bSmrg/^Note: including file:  *\(.*\)/ {
44190b17f1bSmrg  s//\1/
44290b17f1bSmrg  s/\\/\\\\/g
44390b17f1bSmrg  p
44490b17f1bSmrg}' | $cygpath_u | sort -u | sed -n '
44590b17f1bSmrgs/ /\\ /g
446983b4bf2Smrgs/\(.*\)/	\1 \\/p
44790b17f1bSmrgs/.\(.*\) \\/\1:/
44890b17f1bSmrgH
44990b17f1bSmrg$ {
450983b4bf2Smrg  s/.*/	/
45190b17f1bSmrg  G
45290b17f1bSmrg  p
45390b17f1bSmrg}' >> "$depfile"
45490b17f1bSmrg  rm -f "$tmpdepfile"
45590b17f1bSmrg  ;;
45690b17f1bSmrg
45790b17f1bSmrgmsvc7msys)
45890b17f1bSmrg  # This case exists only to let depend.m4 do its work.  It works by
45990b17f1bSmrg  # looking at the text of this script.  This case will never be run,
46090b17f1bSmrg  # since it is checked for above.
46190b17f1bSmrg  exit 1
46290b17f1bSmrg  ;;
46390b17f1bSmrg
4647e6fb56fSmrg#nosideeffect)
4657e6fb56fSmrg  # This comment above is used by automake to tell side-effect
4667e6fb56fSmrg  # dependency tracking mechanisms from slower ones.
4677e6fb56fSmrg
4687e6fb56fSmrgdashmstdout)
4697e6fb56fSmrg  # Important note: in order to support this mode, a compiler *must*
4707e6fb56fSmrg  # always write the preprocessed file to stdout, regardless of -o.
4717e6fb56fSmrg  "$@" || exit $?
4727e6fb56fSmrg
4737e6fb56fSmrg  # Remove the call to Libtool.
4747e6fb56fSmrg  if test "$libtool" = yes; then
4757e6fb56fSmrg    while test "X$1" != 'X--mode=compile'; do
4767e6fb56fSmrg      shift
4777e6fb56fSmrg    done
4787e6fb56fSmrg    shift
4797e6fb56fSmrg  fi
4807e6fb56fSmrg
481983b4bf2Smrg  # Remove `-o $object'.
4827e6fb56fSmrg  IFS=" "
4837e6fb56fSmrg  for arg
4847e6fb56fSmrg  do
4857e6fb56fSmrg    case $arg in
4867e6fb56fSmrg    -o)
4877e6fb56fSmrg      shift
4887e6fb56fSmrg      ;;
4897e6fb56fSmrg    $object)
4907e6fb56fSmrg      shift
4917e6fb56fSmrg      ;;
4927e6fb56fSmrg    *)
4937e6fb56fSmrg      set fnord "$@" "$arg"
4947e6fb56fSmrg      shift # fnord
4957e6fb56fSmrg      shift # $arg
4967e6fb56fSmrg      ;;
4977e6fb56fSmrg    esac
4987e6fb56fSmrg  done
4997e6fb56fSmrg
5007e6fb56fSmrg  test -z "$dashmflag" && dashmflag=-M
501983b4bf2Smrg  # Require at least two characters before searching for `:'
5027e6fb56fSmrg  # in the target name.  This is to cope with DOS-style filenames:
503983b4bf2Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
5047e6fb56fSmrg  "$@" $dashmflag |
505983b4bf2Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
5067e6fb56fSmrg  rm -f "$depfile"
5077e6fb56fSmrg  cat < "$tmpdepfile" > "$depfile"
508983b4bf2Smrg  tr ' ' '
509983b4bf2Smrg' < "$tmpdepfile" | \
510983b4bf2Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
511983b4bf2Smrg## correctly.  Breaking it into two sed invocations is a workaround.
512983b4bf2Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
5137e6fb56fSmrg  rm -f "$tmpdepfile"
5147e6fb56fSmrg  ;;
5157e6fb56fSmrg
5167e6fb56fSmrgdashXmstdout)
5177e6fb56fSmrg  # This case only exists to satisfy depend.m4.  It is never actually
5187e6fb56fSmrg  # run, as this mode is specially recognized in the preamble.
5197e6fb56fSmrg  exit 1
5207e6fb56fSmrg  ;;
5217e6fb56fSmrg
5227e6fb56fSmrgmakedepend)
5237e6fb56fSmrg  "$@" || exit $?
5247e6fb56fSmrg  # Remove any Libtool call
5257e6fb56fSmrg  if test "$libtool" = yes; then
5267e6fb56fSmrg    while test "X$1" != 'X--mode=compile'; do
5277e6fb56fSmrg      shift
5287e6fb56fSmrg    done
5297e6fb56fSmrg    shift
5307e6fb56fSmrg  fi
5317e6fb56fSmrg  # X makedepend
5327e6fb56fSmrg  shift
5337e6fb56fSmrg  cleared=no eat=no
5347e6fb56fSmrg  for arg
5357e6fb56fSmrg  do
5367e6fb56fSmrg    case $cleared in
5377e6fb56fSmrg    no)
5387e6fb56fSmrg      set ""; shift
5397e6fb56fSmrg      cleared=yes ;;
5407e6fb56fSmrg    esac
5417e6fb56fSmrg    if test $eat = yes; then
5427e6fb56fSmrg      eat=no
5437e6fb56fSmrg      continue
5447e6fb56fSmrg    fi
5457e6fb56fSmrg    case "$arg" in
5467e6fb56fSmrg    -D*|-I*)
5477e6fb56fSmrg      set fnord "$@" "$arg"; shift ;;
5487e6fb56fSmrg    # Strip any option that makedepend may not understand.  Remove
5497e6fb56fSmrg    # the object too, otherwise makedepend will parse it as a source file.
5507e6fb56fSmrg    -arch)
5517e6fb56fSmrg      eat=yes ;;
5527e6fb56fSmrg    -*|$object)
5537e6fb56fSmrg      ;;
5547e6fb56fSmrg    *)
5557e6fb56fSmrg      set fnord "$@" "$arg"; shift ;;
5567e6fb56fSmrg    esac
5577e6fb56fSmrg  done
5587e6fb56fSmrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
5597e6fb56fSmrg  touch "$tmpdepfile"
5607e6fb56fSmrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
5617e6fb56fSmrg  rm -f "$depfile"
56290b17f1bSmrg  # makedepend may prepend the VPATH from the source file name to the object.
56390b17f1bSmrg  # No need to regex-escape $object, excess matching of '.' is harmless.
56490b17f1bSmrg  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
565983b4bf2Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
566983b4bf2Smrg' | \
567983b4bf2Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
568983b4bf2Smrg## correctly.  Breaking it into two sed invocations is a workaround.
569983b4bf2Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
5707e6fb56fSmrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
5717e6fb56fSmrg  ;;
5727e6fb56fSmrg
5737e6fb56fSmrgcpp)
5747e6fb56fSmrg  # Important note: in order to support this mode, a compiler *must*
5757e6fb56fSmrg  # always write the preprocessed file to stdout.
5767e6fb56fSmrg  "$@" || exit $?
5777e6fb56fSmrg
5787e6fb56fSmrg  # Remove the call to Libtool.
5797e6fb56fSmrg  if test "$libtool" = yes; then
5807e6fb56fSmrg    while test "X$1" != 'X--mode=compile'; do
5817e6fb56fSmrg      shift
5827e6fb56fSmrg    done
5837e6fb56fSmrg    shift
5847e6fb56fSmrg  fi
5857e6fb56fSmrg
586983b4bf2Smrg  # Remove `-o $object'.
5877e6fb56fSmrg  IFS=" "
5887e6fb56fSmrg  for arg
5897e6fb56fSmrg  do
5907e6fb56fSmrg    case $arg in
5917e6fb56fSmrg    -o)
5927e6fb56fSmrg      shift
5937e6fb56fSmrg      ;;
5947e6fb56fSmrg    $object)
5957e6fb56fSmrg      shift
5967e6fb56fSmrg      ;;
5977e6fb56fSmrg    *)
5987e6fb56fSmrg      set fnord "$@" "$arg"
5997e6fb56fSmrg      shift # fnord
6007e6fb56fSmrg      shift # $arg
6017e6fb56fSmrg      ;;
6027e6fb56fSmrg    esac
6037e6fb56fSmrg  done
6047e6fb56fSmrg
605983b4bf2Smrg  "$@" -E |
606983b4bf2Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
607983b4bf2Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
608983b4bf2Smrg    sed '$ s: \\$::' > "$tmpdepfile"
6097e6fb56fSmrg  rm -f "$depfile"
6107e6fb56fSmrg  echo "$object : \\" > "$depfile"
6117e6fb56fSmrg  cat < "$tmpdepfile" >> "$depfile"
6127e6fb56fSmrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
6137e6fb56fSmrg  rm -f "$tmpdepfile"
6147e6fb56fSmrg  ;;
6157e6fb56fSmrg
6167e6fb56fSmrgmsvisualcpp)
6177e6fb56fSmrg  # Important note: in order to support this mode, a compiler *must*
6187e6fb56fSmrg  # always write the preprocessed file to stdout.
6197e6fb56fSmrg  "$@" || exit $?
6207e6fb56fSmrg
6217e6fb56fSmrg  # Remove the call to Libtool.
6227e6fb56fSmrg  if test "$libtool" = yes; then
6237e6fb56fSmrg    while test "X$1" != 'X--mode=compile'; do
6247e6fb56fSmrg      shift
6257e6fb56fSmrg    done
6267e6fb56fSmrg    shift
6277e6fb56fSmrg  fi
6287e6fb56fSmrg
6297e6fb56fSmrg  IFS=" "
6307e6fb56fSmrg  for arg
6317e6fb56fSmrg  do
6327e6fb56fSmrg    case "$arg" in
6337e6fb56fSmrg    -o)
6347e6fb56fSmrg      shift
6357e6fb56fSmrg      ;;
6367e6fb56fSmrg    $object)
6377e6fb56fSmrg      shift
6387e6fb56fSmrg      ;;
6397e6fb56fSmrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
640983b4bf2Smrg	set fnord "$@"
641983b4bf2Smrg	shift
642983b4bf2Smrg	shift
643983b4bf2Smrg	;;
6447e6fb56fSmrg    *)
645983b4bf2Smrg	set fnord "$@" "$arg"
646983b4bf2Smrg	shift
647983b4bf2Smrg	shift
648983b4bf2Smrg	;;
6497e6fb56fSmrg    esac
6507e6fb56fSmrg  done
6517e6fb56fSmrg  "$@" -E 2>/dev/null |
6527e6fb56fSmrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
6537e6fb56fSmrg  rm -f "$depfile"
6547e6fb56fSmrg  echo "$object : \\" > "$depfile"
655983b4bf2Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
656983b4bf2Smrg  echo "	" >> "$depfile"
6577e6fb56fSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
6587e6fb56fSmrg  rm -f "$tmpdepfile"
6597e6fb56fSmrg  ;;
6607e6fb56fSmrg
6617e6fb56fSmrgmsvcmsys)
6627e6fb56fSmrg  # This case exists only to let depend.m4 do its work.  It works by
6637e6fb56fSmrg  # looking at the text of this script.  This case will never be run,
6647e6fb56fSmrg  # since it is checked for above.
6657e6fb56fSmrg  exit 1
6667e6fb56fSmrg  ;;
6677e6fb56fSmrg
6687e6fb56fSmrgnone)
6697e6fb56fSmrg  exec "$@"
6707e6fb56fSmrg  ;;
6717e6fb56fSmrg
6727e6fb56fSmrg*)
6737e6fb56fSmrg  echo "Unknown depmode $depmode" 1>&2
6747e6fb56fSmrg  exit 1
6757e6fb56fSmrg  ;;
6767e6fb56fSmrgesac
6777e6fb56fSmrg
6787e6fb56fSmrgexit 0
6797e6fb56fSmrg
6807e6fb56fSmrg# Local Variables:
6817e6fb56fSmrg# mode: shell-script
6827e6fb56fSmrg# sh-indentation: 2
6837e6fb56fSmrg# eval: (add-hook 'write-file-hooks 'time-stamp)
6847e6fb56fSmrg# time-stamp-start: "scriptversion="
6857e6fb56fSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
6867e6fb56fSmrg# time-stamp-time-zone: "UTC"
6877e6fb56fSmrg# time-stamp-end: "; # UTC"
6887e6fb56fSmrg# End:
689