depcomp revision ca08ab68
12c393a42Smrg#! /bin/sh
22c393a42Smrg# depcomp - compile a program generating dependencies as side-effects
32c393a42Smrg
4ca08ab68Smrgscriptversion=2012-03-27.16; # UTC
52c393a42Smrg
6ca08ab68Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
7ca08ab68Smrg# 2011, 2012 Free Software Foundation, Inc.
82c393a42Smrg
92c393a42Smrg# This program is free software; you can redistribute it and/or modify
102c393a42Smrg# it under the terms of the GNU General Public License as published by
112c393a42Smrg# the Free Software Foundation; either version 2, or (at your option)
122c393a42Smrg# any later version.
132c393a42Smrg
142c393a42Smrg# This program is distributed in the hope that it will be useful,
152c393a42Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
162c393a42Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
172c393a42Smrg# GNU General Public License for more details.
182c393a42Smrg
192c393a42Smrg# You should have received a copy of the GNU General Public License
20a6844aabSmrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
212c393a42Smrg
222c393a42Smrg# As a special exception to the GNU General Public License, if you
232c393a42Smrg# distribute this file as part of a program that contains a
242c393a42Smrg# configuration script generated by Autoconf, you may include it under
252c393a42Smrg# the same distribution terms that you use for the rest of that program.
262c393a42Smrg
272c393a42Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
282c393a42Smrg
292c393a42Smrgcase $1 in
302c393a42Smrg  '')
31ca08ab68Smrg     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
322c393a42Smrg     exit 1;
332c393a42Smrg     ;;
342c393a42Smrg  -h | --h*)
352c393a42Smrg    cat <<\EOF
362c393a42SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
372c393a42Smrg
382c393a42SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
392c393a42Smrgas side-effects.
402c393a42Smrg
412c393a42SmrgEnvironment variables:
422c393a42Smrg  depmode     Dependency tracking mode.
43ca08ab68Smrg  source      Source file read by 'PROGRAMS ARGS'.
44ca08ab68Smrg  object      Object file output by 'PROGRAMS ARGS'.
452c393a42Smrg  DEPDIR      directory where to store dependencies.
462c393a42Smrg  depfile     Dependency file to output.
47ca08ab68Smrg  tmpdepfile  Temporary file to use when outputting dependencies.
482c393a42Smrg  libtool     Whether libtool is used (yes/no).
492c393a42Smrg
502c393a42SmrgReport bugs to <bug-automake@gnu.org>.
512c393a42SmrgEOF
522c393a42Smrg    exit $?
532c393a42Smrg    ;;
542c393a42Smrg  -v | --v*)
552c393a42Smrg    echo "depcomp $scriptversion"
562c393a42Smrg    exit $?
572c393a42Smrg    ;;
582c393a42Smrgesac
592c393a42Smrg
60ca08ab68Smrg# A tabulation character.
61ca08ab68Smrgtab='	'
62ca08ab68Smrg# A newline character.
63ca08ab68Smrgnl='
64ca08ab68Smrg'
65ca08ab68Smrg
662c393a42Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
672c393a42Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
682c393a42Smrg  exit 1
692c393a42Smrgfi
702c393a42Smrg
712c393a42Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
722c393a42Smrgdepfile=${depfile-`echo "$object" |
732c393a42Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
742c393a42Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
752c393a42Smrg
762c393a42Smrgrm -f "$tmpdepfile"
772c393a42Smrg
782c393a42Smrg# Some modes work just like other modes, but use different flags.  We
792c393a42Smrg# parameterize here, but still list the modes in the big case below,
802c393a42Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
812c393a42Smrg# here, because this file can only contain one case statement.
822c393a42Smrgif test "$depmode" = hp; then
832c393a42Smrg  # HP compiler uses -M and no extra arg.
842c393a42Smrg  gccflag=-M
852c393a42Smrg  depmode=gcc
862c393a42Smrgfi
872c393a42Smrg
882c393a42Smrgif test "$depmode" = dashXmstdout; then
892c393a42Smrg   # This is just like dashmstdout with a different argument.
902c393a42Smrg   dashmflag=-xM
912c393a42Smrg   depmode=dashmstdout
922c393a42Smrgfi
932c393a42Smrg
94a6844aabSmrgcygpath_u="cygpath -u -f -"
95a6844aabSmrgif test "$depmode" = msvcmsys; then
96a6844aabSmrg   # This is just like msvisualcpp but w/o cygpath translation.
97a6844aabSmrg   # Just convert the backslash-escaped backslashes to single forward
98a6844aabSmrg   # slashes to satisfy depend.m4
99ca08ab68Smrg   cygpath_u='sed s,\\\\,/,g'
100a6844aabSmrg   depmode=msvisualcpp
101a6844aabSmrgfi
102a6844aabSmrg
103ca08ab68Smrgif test "$depmode" = msvc7msys; then
104ca08ab68Smrg   # This is just like msvc7 but w/o cygpath translation.
105ca08ab68Smrg   # Just convert the backslash-escaped backslashes to single forward
106ca08ab68Smrg   # slashes to satisfy depend.m4
107ca08ab68Smrg   cygpath_u='sed s,\\\\,/,g'
108ca08ab68Smrg   depmode=msvc7
109ca08ab68Smrgfi
110ca08ab68Smrg
111ca08ab68Smrgif test "$depmode" = xlc; then
112ca08ab68Smrg   # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations.
113ca08ab68Smrg   gccflag=-qmakedep=gcc,-MF
114ca08ab68Smrg   depmode=gcc
115ca08ab68Smrgfi
116ca08ab68Smrg
1172c393a42Smrgcase "$depmode" in
1182c393a42Smrggcc3)
1192c393a42Smrg## gcc 3 implements dependency tracking that does exactly what
1202c393a42Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
1212c393a42Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
122a6844aabSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
123a6844aabSmrg## the command line argument order; so add the flags where they
124a6844aabSmrg## appear in depend2.am.  Note that the slowdown incurred here
125a6844aabSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
126a6844aabSmrg  for arg
127a6844aabSmrg  do
128a6844aabSmrg    case $arg in
129a6844aabSmrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
130a6844aabSmrg    *)  set fnord "$@" "$arg" ;;
131a6844aabSmrg    esac
132a6844aabSmrg    shift # fnord
133a6844aabSmrg    shift # $arg
134a6844aabSmrg  done
135a6844aabSmrg  "$@"
1362c393a42Smrg  stat=$?
1372c393a42Smrg  if test $stat -eq 0; then :
1382c393a42Smrg  else
1392c393a42Smrg    rm -f "$tmpdepfile"
1402c393a42Smrg    exit $stat
1412c393a42Smrg  fi
1422c393a42Smrg  mv "$tmpdepfile" "$depfile"
1432c393a42Smrg  ;;
1442c393a42Smrg
1452c393a42Smrggcc)
1462c393a42Smrg## There are various ways to get dependency output from gcc.  Here's
1472c393a42Smrg## why we pick this rather obscure method:
1482c393a42Smrg## - Don't want to use -MD because we'd like the dependencies to end
1492c393a42Smrg##   up in a subdir.  Having to rename by hand is ugly.
1502c393a42Smrg##   (We might end up doing this anyway to support other compilers.)
1512c393a42Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
1522c393a42Smrg##   -MM, not -M (despite what the docs say).
1532c393a42Smrg## - Using -M directly means running the compiler twice (even worse
1542c393a42Smrg##   than renaming).
1552c393a42Smrg  if test -z "$gccflag"; then
1562c393a42Smrg    gccflag=-MD,
1572c393a42Smrg  fi
1582c393a42Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
1592c393a42Smrg  stat=$?
1602c393a42Smrg  if test $stat -eq 0; then :
1612c393a42Smrg  else
1622c393a42Smrg    rm -f "$tmpdepfile"
1632c393a42Smrg    exit $stat
1642c393a42Smrg  fi
1652c393a42Smrg  rm -f "$depfile"
1662c393a42Smrg  echo "$object : \\" > "$depfile"
1672c393a42Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
1682c393a42Smrg## The second -e expression handles DOS-style file names with drive letters.
1692c393a42Smrg  sed -e 's/^[^:]*: / /' \
1702c393a42Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
171ca08ab68Smrg## This next piece of magic avoids the "deleted header file" problem.
1722c393a42Smrg## The problem is that when a header file which appears in a .P file
1732c393a42Smrg## is deleted, the dependency causes make to die (because there is
1742c393a42Smrg## typically no way to rebuild the header).  We avoid this by adding
1752c393a42Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
1762c393a42Smrg## this for us directly.
177ca08ab68Smrg  tr ' ' "$nl" < "$tmpdepfile" |
178ca08ab68Smrg## Some versions of gcc put a space before the ':'.  On the theory
1792c393a42Smrg## that the space means something, we add a space to the output as
180ca08ab68Smrg## well.  hp depmode also adds that space, but also prefixes the VPATH
181ca08ab68Smrg## to the object.  Take care to not repeat it in the output.
1822c393a42Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
1832c393a42Smrg## correctly.  Breaking it into two sed invocations is a workaround.
184ca08ab68Smrg    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
185ca08ab68Smrg      | sed -e 's/$/ :/' >> "$depfile"
1862c393a42Smrg  rm -f "$tmpdepfile"
1872c393a42Smrg  ;;
1882c393a42Smrg
1892c393a42Smrghp)
1902c393a42Smrg  # This case exists only to let depend.m4 do its work.  It works by
1912c393a42Smrg  # looking at the text of this script.  This case will never be run,
1922c393a42Smrg  # since it is checked for above.
1932c393a42Smrg  exit 1
1942c393a42Smrg  ;;
1952c393a42Smrg
1962c393a42Smrgsgi)
1972c393a42Smrg  if test "$libtool" = yes; then
1982c393a42Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
1992c393a42Smrg  else
2002c393a42Smrg    "$@" -MDupdate "$tmpdepfile"
2012c393a42Smrg  fi
2022c393a42Smrg  stat=$?
2032c393a42Smrg  if test $stat -eq 0; then :
2042c393a42Smrg  else
2052c393a42Smrg    rm -f "$tmpdepfile"
2062c393a42Smrg    exit $stat
2072c393a42Smrg  fi
2082c393a42Smrg  rm -f "$depfile"
2092c393a42Smrg
2102c393a42Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
2112c393a42Smrg    echo "$object : \\" > "$depfile"
2122c393a42Smrg
2132c393a42Smrg    # Clip off the initial element (the dependent).  Don't try to be
2142c393a42Smrg    # clever and replace this with sed code, as IRIX sed won't handle
2152c393a42Smrg    # lines with more than a fixed number of characters (4096 in
2162c393a42Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
217ca08ab68Smrg    # the IRIX cc adds comments like '#:fec' to the end of the
2182c393a42Smrg    # dependency line.
219ca08ab68Smrg    tr ' ' "$nl" < "$tmpdepfile" \
2202c393a42Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
221ca08ab68Smrg    tr "$nl" ' ' >> "$depfile"
222a6844aabSmrg    echo >> "$depfile"
2232c393a42Smrg
2242c393a42Smrg    # The second pass generates a dummy entry for each header file.
225ca08ab68Smrg    tr ' ' "$nl" < "$tmpdepfile" \
2262c393a42Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
227a6844aabSmrg   >> "$depfile"
2282c393a42Smrg  else
2292c393a42Smrg    # The sourcefile does not contain any dependencies, so just
2302c393a42Smrg    # store a dummy comment line, to avoid errors with the Makefile
2312c393a42Smrg    # "include basename.Plo" scheme.
2322c393a42Smrg    echo "#dummy" > "$depfile"
2332c393a42Smrg  fi
2342c393a42Smrg  rm -f "$tmpdepfile"
2352c393a42Smrg  ;;
2362c393a42Smrg
237ca08ab68Smrgxlc)
238ca08ab68Smrg  # This case exists only to let depend.m4 do its work.  It works by
239ca08ab68Smrg  # looking at the text of this script.  This case will never be run,
240ca08ab68Smrg  # since it is checked for above.
241ca08ab68Smrg  exit 1
242ca08ab68Smrg  ;;
243ca08ab68Smrg
2442c393a42Smrgaix)
2452c393a42Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
2462c393a42Smrg  # in a .u file.  In older versions, this file always lives in the
247ca08ab68Smrg  # current directory.  Also, the AIX compiler puts '$object:' at the
2482c393a42Smrg  # start of each line; $object doesn't have directory information.
2492c393a42Smrg  # Version 6 uses the directory in both cases.
250a6844aabSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
251a6844aabSmrg  test "x$dir" = "x$object" && dir=
252a6844aabSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
2532c393a42Smrg  if test "$libtool" = yes; then
254a6844aabSmrg    tmpdepfile1=$dir$base.u
255a6844aabSmrg    tmpdepfile2=$base.u
256a6844aabSmrg    tmpdepfile3=$dir.libs/$base.u
2572c393a42Smrg    "$@" -Wc,-M
2582c393a42Smrg  else
259a6844aabSmrg    tmpdepfile1=$dir$base.u
260a6844aabSmrg    tmpdepfile2=$dir$base.u
261a6844aabSmrg    tmpdepfile3=$dir$base.u
2622c393a42Smrg    "$@" -M
2632c393a42Smrg  fi
2642c393a42Smrg  stat=$?
2652c393a42Smrg
2662c393a42Smrg  if test $stat -eq 0; then :
2672c393a42Smrg  else
268a6844aabSmrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2692c393a42Smrg    exit $stat
2702c393a42Smrg  fi
2712c393a42Smrg
272a6844aabSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
273a6844aabSmrg  do
274a6844aabSmrg    test -f "$tmpdepfile" && break
275a6844aabSmrg  done
2762c393a42Smrg  if test -f "$tmpdepfile"; then
277ca08ab68Smrg    # Each line is of the form 'foo.o: dependent.h'.
2782c393a42Smrg    # Do two passes, one to just change these to
279ca08ab68Smrg    # '$object: dependent.h' and one to simply 'dependent.h:'.
280a6844aabSmrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
281ca08ab68Smrg    sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
2822c393a42Smrg  else
2832c393a42Smrg    # The sourcefile does not contain any dependencies, so just
2842c393a42Smrg    # store a dummy comment line, to avoid errors with the Makefile
2852c393a42Smrg    # "include basename.Plo" scheme.
2862c393a42Smrg    echo "#dummy" > "$depfile"
2872c393a42Smrg  fi
2882c393a42Smrg  rm -f "$tmpdepfile"
2892c393a42Smrg  ;;
2902c393a42Smrg
2912c393a42Smrgicc)
292ca08ab68Smrg  # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'.
293ca08ab68Smrg  # However on
294ca08ab68Smrg  #    $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c
2952c393a42Smrg  # ICC 7.0 will fill foo.d with something like
2962c393a42Smrg  #    foo.o: sub/foo.c
2972c393a42Smrg  #    foo.o: sub/foo.h
298ca08ab68Smrg  # which is wrong.  We want
2992c393a42Smrg  #    sub/foo.o: sub/foo.c
3002c393a42Smrg  #    sub/foo.o: sub/foo.h
3012c393a42Smrg  #    sub/foo.c:
3022c393a42Smrg  #    sub/foo.h:
3032c393a42Smrg  # ICC 7.1 will output
3042c393a42Smrg  #    foo.o: sub/foo.c sub/foo.h
305ca08ab68Smrg  # and will wrap long lines using '\':
3062c393a42Smrg  #    foo.o: sub/foo.c ... \
3072c393a42Smrg  #     sub/foo.h ... \
3082c393a42Smrg  #     ...
309ca08ab68Smrg  # tcc 0.9.26 (FIXME still under development at the moment of writing)
310ca08ab68Smrg  # will emit a similar output, but also prepend the continuation lines
311ca08ab68Smrg  # with horizontal tabulation characters.
3122c393a42Smrg  "$@" -MD -MF "$tmpdepfile"
3132c393a42Smrg  stat=$?
3142c393a42Smrg  if test $stat -eq 0; then :
3152c393a42Smrg  else
3162c393a42Smrg    rm -f "$tmpdepfile"
3172c393a42Smrg    exit $stat
3182c393a42Smrg  fi
3192c393a42Smrg  rm -f "$depfile"
320ca08ab68Smrg  # Each line is of the form 'foo.o: dependent.h',
321ca08ab68Smrg  # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'.
3222c393a42Smrg  # Do two passes, one to just change these to
323ca08ab68Smrg  # '$object: dependent.h' and one to simply 'dependent.h:'.
324ca08ab68Smrg  sed -e "s/^[ $tab][ $tab]*/  /" -e "s,^[^:]*:,$object :," \
325ca08ab68Smrg    < "$tmpdepfile" > "$depfile"
326ca08ab68Smrg  sed '
327ca08ab68Smrg    s/[ '"$tab"'][ '"$tab"']*/ /g
328ca08ab68Smrg    s/^ *//
329ca08ab68Smrg    s/ *\\*$//
330ca08ab68Smrg    s/^[^:]*: *//
331ca08ab68Smrg    /^$/d
332ca08ab68Smrg    /:$/d
333ca08ab68Smrg    s/$/ :/
334ca08ab68Smrg  ' < "$tmpdepfile" >> "$depfile"
3352c393a42Smrg  rm -f "$tmpdepfile"
3362c393a42Smrg  ;;
3372c393a42Smrg
338a6844aabSmrghp2)
339a6844aabSmrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
340a6844aabSmrg  # compilers, which have integrated preprocessors.  The correct option
341a6844aabSmrg  # to use with these is +Maked; it writes dependencies to a file named
342a6844aabSmrg  # 'foo.d', which lands next to the object file, wherever that
343a6844aabSmrg  # happens to be.
344a6844aabSmrg  # Much of this is similar to the tru64 case; see comments there.
345a6844aabSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
346a6844aabSmrg  test "x$dir" = "x$object" && dir=
347a6844aabSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
348a6844aabSmrg  if test "$libtool" = yes; then
349a6844aabSmrg    tmpdepfile1=$dir$base.d
350a6844aabSmrg    tmpdepfile2=$dir.libs/$base.d
351a6844aabSmrg    "$@" -Wc,+Maked
352a6844aabSmrg  else
353a6844aabSmrg    tmpdepfile1=$dir$base.d
354a6844aabSmrg    tmpdepfile2=$dir$base.d
355a6844aabSmrg    "$@" +Maked
356a6844aabSmrg  fi
357a6844aabSmrg  stat=$?
358a6844aabSmrg  if test $stat -eq 0; then :
359a6844aabSmrg  else
360a6844aabSmrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
361a6844aabSmrg     exit $stat
362a6844aabSmrg  fi
363a6844aabSmrg
364a6844aabSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
365a6844aabSmrg  do
366a6844aabSmrg    test -f "$tmpdepfile" && break
367a6844aabSmrg  done
368a6844aabSmrg  if test -f "$tmpdepfile"; then
369a6844aabSmrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
370ca08ab68Smrg    # Add 'dependent.h:' lines.
371a6844aabSmrg    sed -ne '2,${
372a6844aabSmrg	       s/^ *//
373a6844aabSmrg	       s/ \\*$//
374a6844aabSmrg	       s/$/:/
375a6844aabSmrg	       p
376a6844aabSmrg	     }' "$tmpdepfile" >> "$depfile"
377a6844aabSmrg  else
378a6844aabSmrg    echo "#dummy" > "$depfile"
379a6844aabSmrg  fi
380a6844aabSmrg  rm -f "$tmpdepfile" "$tmpdepfile2"
381a6844aabSmrg  ;;
382a6844aabSmrg
3832c393a42Smrgtru64)
3842c393a42Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
385ca08ab68Smrg   # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
3862c393a42Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
387ca08ab68Smrg   # dependencies in 'foo.d' instead, so we check for that too.
3882c393a42Smrg   # Subdirectories are respected.
3892c393a42Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3902c393a42Smrg   test "x$dir" = "x$object" && dir=
3912c393a42Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3922c393a42Smrg
3932c393a42Smrg   if test "$libtool" = yes; then
3942c393a42Smrg      # With Tru64 cc, shared objects can also be used to make a
395a6844aabSmrg      # static library.  This mechanism is used in libtool 1.4 series to
3962c393a42Smrg      # handle both shared and static libraries in a single compilation.
3972c393a42Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
3982c393a42Smrg      #
3992c393a42Smrg      # With libtool 1.5 this exception was removed, and libtool now
4002c393a42Smrg      # generates 2 separate objects for the 2 libraries.  These two
401a6844aabSmrg      # compilations output dependencies in $dir.libs/$base.o.d and
4022c393a42Smrg      # in $dir$base.o.d.  We have to check for both files, because
4032c393a42Smrg      # one of the two compilations can be disabled.  We should prefer
4042c393a42Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
4052c393a42Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
4062c393a42Smrg      # the former would cause a distcleancheck panic.
4072c393a42Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
4082c393a42Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
4092c393a42Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
4102c393a42Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
4112c393a42Smrg      "$@" -Wc,-MD
4122c393a42Smrg   else
4132c393a42Smrg      tmpdepfile1=$dir$base.o.d
4142c393a42Smrg      tmpdepfile2=$dir$base.d
4152c393a42Smrg      tmpdepfile3=$dir$base.d
4162c393a42Smrg      tmpdepfile4=$dir$base.d
4172c393a42Smrg      "$@" -MD
4182c393a42Smrg   fi
4192c393a42Smrg
4202c393a42Smrg   stat=$?
4212c393a42Smrg   if test $stat -eq 0; then :
4222c393a42Smrg   else
4232c393a42Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
4242c393a42Smrg      exit $stat
4252c393a42Smrg   fi
4262c393a42Smrg
4272c393a42Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
4282c393a42Smrg   do
4292c393a42Smrg     test -f "$tmpdepfile" && break
4302c393a42Smrg   done
4312c393a42Smrg   if test -f "$tmpdepfile"; then
4322c393a42Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
433ca08ab68Smrg      sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
4342c393a42Smrg   else
4352c393a42Smrg      echo "#dummy" > "$depfile"
4362c393a42Smrg   fi
4372c393a42Smrg   rm -f "$tmpdepfile"
4382c393a42Smrg   ;;
4392c393a42Smrg
440ca08ab68Smrgmsvc7)
441ca08ab68Smrg  if test "$libtool" = yes; then
442ca08ab68Smrg    showIncludes=-Wc,-showIncludes
443ca08ab68Smrg  else
444ca08ab68Smrg    showIncludes=-showIncludes
445ca08ab68Smrg  fi
446ca08ab68Smrg  "$@" $showIncludes > "$tmpdepfile"
447ca08ab68Smrg  stat=$?
448ca08ab68Smrg  grep -v '^Note: including file: ' "$tmpdepfile"
449ca08ab68Smrg  if test "$stat" = 0; then :
450ca08ab68Smrg  else
451ca08ab68Smrg    rm -f "$tmpdepfile"
452ca08ab68Smrg    exit $stat
453ca08ab68Smrg  fi
454ca08ab68Smrg  rm -f "$depfile"
455ca08ab68Smrg  echo "$object : \\" > "$depfile"
456ca08ab68Smrg  # The first sed program below extracts the file names and escapes
457ca08ab68Smrg  # backslashes for cygpath.  The second sed program outputs the file
458ca08ab68Smrg  # name when reading, but also accumulates all include files in the
459ca08ab68Smrg  # hold buffer in order to output them again at the end.  This only
460ca08ab68Smrg  # works with sed implementations that can handle large buffers.
461ca08ab68Smrg  sed < "$tmpdepfile" -n '
462ca08ab68Smrg/^Note: including file:  *\(.*\)/ {
463ca08ab68Smrg  s//\1/
464ca08ab68Smrg  s/\\/\\\\/g
465ca08ab68Smrg  p
466ca08ab68Smrg}' | $cygpath_u | sort -u | sed -n '
467ca08ab68Smrgs/ /\\ /g
468ca08ab68Smrgs/\(.*\)/'"$tab"'\1 \\/p
469ca08ab68Smrgs/.\(.*\) \\/\1:/
470ca08ab68SmrgH
471ca08ab68Smrg$ {
472ca08ab68Smrg  s/.*/'"$tab"'/
473ca08ab68Smrg  G
474ca08ab68Smrg  p
475ca08ab68Smrg}' >> "$depfile"
476ca08ab68Smrg  rm -f "$tmpdepfile"
477ca08ab68Smrg  ;;
478ca08ab68Smrg
479ca08ab68Smrgmsvc7msys)
480ca08ab68Smrg  # This case exists only to let depend.m4 do its work.  It works by
481ca08ab68Smrg  # looking at the text of this script.  This case will never be run,
482ca08ab68Smrg  # since it is checked for above.
483ca08ab68Smrg  exit 1
484ca08ab68Smrg  ;;
485ca08ab68Smrg
4862c393a42Smrg#nosideeffect)
4872c393a42Smrg  # This comment above is used by automake to tell side-effect
4882c393a42Smrg  # dependency tracking mechanisms from slower ones.
4892c393a42Smrg
4902c393a42Smrgdashmstdout)
4912c393a42Smrg  # Important note: in order to support this mode, a compiler *must*
4922c393a42Smrg  # always write the preprocessed file to stdout, regardless of -o.
4932c393a42Smrg  "$@" || exit $?
4942c393a42Smrg
4952c393a42Smrg  # Remove the call to Libtool.
4962c393a42Smrg  if test "$libtool" = yes; then
497a6844aabSmrg    while test "X$1" != 'X--mode=compile'; do
4982c393a42Smrg      shift
4992c393a42Smrg    done
5002c393a42Smrg    shift
5012c393a42Smrg  fi
5022c393a42Smrg
503ca08ab68Smrg  # Remove '-o $object'.
5042c393a42Smrg  IFS=" "
5052c393a42Smrg  for arg
5062c393a42Smrg  do
5072c393a42Smrg    case $arg in
5082c393a42Smrg    -o)
5092c393a42Smrg      shift
5102c393a42Smrg      ;;
5112c393a42Smrg    $object)
5122c393a42Smrg      shift
5132c393a42Smrg      ;;
5142c393a42Smrg    *)
5152c393a42Smrg      set fnord "$@" "$arg"
5162c393a42Smrg      shift # fnord
5172c393a42Smrg      shift # $arg
5182c393a42Smrg      ;;
5192c393a42Smrg    esac
5202c393a42Smrg  done
5212c393a42Smrg
5222c393a42Smrg  test -z "$dashmflag" && dashmflag=-M
523ca08ab68Smrg  # Require at least two characters before searching for ':'
5242c393a42Smrg  # in the target name.  This is to cope with DOS-style filenames:
525ca08ab68Smrg  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
5262c393a42Smrg  "$@" $dashmflag |
527ca08ab68Smrg    sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile"
5282c393a42Smrg  rm -f "$depfile"
5292c393a42Smrg  cat < "$tmpdepfile" > "$depfile"
530ca08ab68Smrg  tr ' ' "$nl" < "$tmpdepfile" | \
5312c393a42Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
5322c393a42Smrg## correctly.  Breaking it into two sed invocations is a workaround.
5332c393a42Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
5342c393a42Smrg  rm -f "$tmpdepfile"
5352c393a42Smrg  ;;
5362c393a42Smrg
5372c393a42SmrgdashXmstdout)
5382c393a42Smrg  # This case only exists to satisfy depend.m4.  It is never actually
5392c393a42Smrg  # run, as this mode is specially recognized in the preamble.
5402c393a42Smrg  exit 1
5412c393a42Smrg  ;;
5422c393a42Smrg
5432c393a42Smrgmakedepend)
5442c393a42Smrg  "$@" || exit $?
5452c393a42Smrg  # Remove any Libtool call
5462c393a42Smrg  if test "$libtool" = yes; then
547a6844aabSmrg    while test "X$1" != 'X--mode=compile'; do
5482c393a42Smrg      shift
5492c393a42Smrg    done
5502c393a42Smrg    shift
5512c393a42Smrg  fi
5522c393a42Smrg  # X makedepend
5532c393a42Smrg  shift
554a6844aabSmrg  cleared=no eat=no
555a6844aabSmrg  for arg
556a6844aabSmrg  do
5572c393a42Smrg    case $cleared in
5582c393a42Smrg    no)
5592c393a42Smrg      set ""; shift
5602c393a42Smrg      cleared=yes ;;
5612c393a42Smrg    esac
562a6844aabSmrg    if test $eat = yes; then
563a6844aabSmrg      eat=no
564a6844aabSmrg      continue
565a6844aabSmrg    fi
5662c393a42Smrg    case "$arg" in
5672c393a42Smrg    -D*|-I*)
5682c393a42Smrg      set fnord "$@" "$arg"; shift ;;
5692c393a42Smrg    # Strip any option that makedepend may not understand.  Remove
5702c393a42Smrg    # the object too, otherwise makedepend will parse it as a source file.
571a6844aabSmrg    -arch)
572a6844aabSmrg      eat=yes ;;
5732c393a42Smrg    -*|$object)
5742c393a42Smrg      ;;
5752c393a42Smrg    *)
5762c393a42Smrg      set fnord "$@" "$arg"; shift ;;
5772c393a42Smrg    esac
5782c393a42Smrg  done
579a6844aabSmrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
5802c393a42Smrg  touch "$tmpdepfile"
5812c393a42Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
5822c393a42Smrg  rm -f "$depfile"
583ca08ab68Smrg  # makedepend may prepend the VPATH from the source file name to the object.
584ca08ab68Smrg  # No need to regex-escape $object, excess matching of '.' is harmless.
585ca08ab68Smrg  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
586ca08ab68Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \
5872c393a42Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
5882c393a42Smrg## correctly.  Breaking it into two sed invocations is a workaround.
5892c393a42Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
5902c393a42Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
5912c393a42Smrg  ;;
5922c393a42Smrg
5932c393a42Smrgcpp)
5942c393a42Smrg  # Important note: in order to support this mode, a compiler *must*
5952c393a42Smrg  # always write the preprocessed file to stdout.
5962c393a42Smrg  "$@" || exit $?
5972c393a42Smrg
5982c393a42Smrg  # Remove the call to Libtool.
5992c393a42Smrg  if test "$libtool" = yes; then
600a6844aabSmrg    while test "X$1" != 'X--mode=compile'; do
6012c393a42Smrg      shift
6022c393a42Smrg    done
6032c393a42Smrg    shift
6042c393a42Smrg  fi
6052c393a42Smrg
606ca08ab68Smrg  # Remove '-o $object'.
6072c393a42Smrg  IFS=" "
6082c393a42Smrg  for arg
6092c393a42Smrg  do
6102c393a42Smrg    case $arg in
6112c393a42Smrg    -o)
6122c393a42Smrg      shift
6132c393a42Smrg      ;;
6142c393a42Smrg    $object)
6152c393a42Smrg      shift
6162c393a42Smrg      ;;
6172c393a42Smrg    *)
6182c393a42Smrg      set fnord "$@" "$arg"
6192c393a42Smrg      shift # fnord
6202c393a42Smrg      shift # $arg
6212c393a42Smrg      ;;
6222c393a42Smrg    esac
6232c393a42Smrg  done
6242c393a42Smrg
6252c393a42Smrg  "$@" -E |
6262c393a42Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
6272c393a42Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
6282c393a42Smrg    sed '$ s: \\$::' > "$tmpdepfile"
6292c393a42Smrg  rm -f "$depfile"
6302c393a42Smrg  echo "$object : \\" > "$depfile"
6312c393a42Smrg  cat < "$tmpdepfile" >> "$depfile"
6322c393a42Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
6332c393a42Smrg  rm -f "$tmpdepfile"
6342c393a42Smrg  ;;
6352c393a42Smrg
6362c393a42Smrgmsvisualcpp)
6372c393a42Smrg  # Important note: in order to support this mode, a compiler *must*
638a6844aabSmrg  # always write the preprocessed file to stdout.
6392c393a42Smrg  "$@" || exit $?
640a6844aabSmrg
641a6844aabSmrg  # Remove the call to Libtool.
642a6844aabSmrg  if test "$libtool" = yes; then
643a6844aabSmrg    while test "X$1" != 'X--mode=compile'; do
644a6844aabSmrg      shift
645a6844aabSmrg    done
646a6844aabSmrg    shift
647a6844aabSmrg  fi
648a6844aabSmrg
6492c393a42Smrg  IFS=" "
6502c393a42Smrg  for arg
6512c393a42Smrg  do
6522c393a42Smrg    case "$arg" in
653a6844aabSmrg    -o)
654a6844aabSmrg      shift
655a6844aabSmrg      ;;
656a6844aabSmrg    $object)
657a6844aabSmrg      shift
658a6844aabSmrg      ;;
6592c393a42Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
6602c393a42Smrg	set fnord "$@"
6612c393a42Smrg	shift
6622c393a42Smrg	shift
6632c393a42Smrg	;;
6642c393a42Smrg    *)
6652c393a42Smrg	set fnord "$@" "$arg"
6662c393a42Smrg	shift
6672c393a42Smrg	shift
6682c393a42Smrg	;;
6692c393a42Smrg    esac
6702c393a42Smrg  done
671a6844aabSmrg  "$@" -E 2>/dev/null |
672a6844aabSmrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
6732c393a42Smrg  rm -f "$depfile"
6742c393a42Smrg  echo "$object : \\" > "$depfile"
675ca08ab68Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
676ca08ab68Smrg  echo "$tab" >> "$depfile"
677a6844aabSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
6782c393a42Smrg  rm -f "$tmpdepfile"
6792c393a42Smrg  ;;
6802c393a42Smrg
681a6844aabSmrgmsvcmsys)
682a6844aabSmrg  # This case exists only to let depend.m4 do its work.  It works by
683a6844aabSmrg  # looking at the text of this script.  This case will never be run,
684a6844aabSmrg  # since it is checked for above.
685a6844aabSmrg  exit 1
686a6844aabSmrg  ;;
687a6844aabSmrg
6882c393a42Smrgnone)
6892c393a42Smrg  exec "$@"
6902c393a42Smrg  ;;
6912c393a42Smrg
6922c393a42Smrg*)
6932c393a42Smrg  echo "Unknown depmode $depmode" 1>&2
6942c393a42Smrg  exit 1
6952c393a42Smrg  ;;
6962c393a42Smrgesac
6972c393a42Smrg
6982c393a42Smrgexit 0
6992c393a42Smrg
7002c393a42Smrg# Local Variables:
7012c393a42Smrg# mode: shell-script
7022c393a42Smrg# sh-indentation: 2
7032c393a42Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
7042c393a42Smrg# time-stamp-start: "scriptversion="
7052c393a42Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
706a6844aabSmrg# time-stamp-time-zone: "UTC"
707a6844aabSmrg# time-stamp-end: "; # UTC"
7082c393a42Smrg# End:
709