depcomp revision 75cbef56
13eed67faSmbalmer#! /bin/sh
23eed67faSmbalmer# depcomp - compile a program generating dependencies as side-effects
33eed67faSmbalmer
475cbef56Smrgscriptversion=2011-12-04.11; # UTC
53eed67faSmbalmer
675cbef56Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
775cbef56Smrg# 2011 Free Software Foundation, Inc.
83eed67faSmbalmer
93eed67faSmbalmer# This program is free software; you can redistribute it and/or modify
103eed67faSmbalmer# it under the terms of the GNU General Public License as published by
113eed67faSmbalmer# the Free Software Foundation; either version 2, or (at your option)
123eed67faSmbalmer# any later version.
133eed67faSmbalmer
143eed67faSmbalmer# This program is distributed in the hope that it will be useful,
153eed67faSmbalmer# but WITHOUT ANY WARRANTY; without even the implied warranty of
163eed67faSmbalmer# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
173eed67faSmbalmer# GNU General Public License for more details.
183eed67faSmbalmer
193eed67faSmbalmer# You should have received a copy of the GNU General Public License
20dc407927Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
213eed67faSmbalmer
223eed67faSmbalmer# As a special exception to the GNU General Public License, if you
233eed67faSmbalmer# distribute this file as part of a program that contains a
243eed67faSmbalmer# configuration script generated by Autoconf, you may include it under
253eed67faSmbalmer# the same distribution terms that you use for the rest of that program.
263eed67faSmbalmer
273eed67faSmbalmer# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
283eed67faSmbalmer
293eed67faSmbalmercase $1 in
303eed67faSmbalmer  '')
313eed67faSmbalmer     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
323eed67faSmbalmer     exit 1;
333eed67faSmbalmer     ;;
343eed67faSmbalmer  -h | --h*)
353eed67faSmbalmer    cat <<\EOF
363eed67faSmbalmerUsage: depcomp [--help] [--version] PROGRAM [ARGS]
373eed67faSmbalmer
383eed67faSmbalmerRun PROGRAMS ARGS to compile a file, generating dependencies
393eed67faSmbalmeras side-effects.
403eed67faSmbalmer
413eed67faSmbalmerEnvironment variables:
423eed67faSmbalmer  depmode     Dependency tracking mode.
433eed67faSmbalmer  source      Source file read by `PROGRAMS ARGS'.
443eed67faSmbalmer  object      Object file output by `PROGRAMS ARGS'.
453eed67faSmbalmer  DEPDIR      directory where to store dependencies.
463eed67faSmbalmer  depfile     Dependency file to output.
4775cbef56Smrg  tmpdepfile  Temporary file to use when outputting dependencies.
483eed67faSmbalmer  libtool     Whether libtool is used (yes/no).
493eed67faSmbalmer
503eed67faSmbalmerReport bugs to <bug-automake@gnu.org>.
513eed67faSmbalmerEOF
523eed67faSmbalmer    exit $?
533eed67faSmbalmer    ;;
543eed67faSmbalmer  -v | --v*)
553eed67faSmbalmer    echo "depcomp $scriptversion"
563eed67faSmbalmer    exit $?
573eed67faSmbalmer    ;;
583eed67faSmbalmeresac
593eed67faSmbalmer
603eed67faSmbalmerif test -z "$depmode" || test -z "$source" || test -z "$object"; then
613eed67faSmbalmer  echo "depcomp: Variables source, object and depmode must be set" 1>&2
623eed67faSmbalmer  exit 1
633eed67faSmbalmerfi
643eed67faSmbalmer
653eed67faSmbalmer# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
663eed67faSmbalmerdepfile=${depfile-`echo "$object" |
673eed67faSmbalmer  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
683eed67faSmbalmertmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
693eed67faSmbalmer
703eed67faSmbalmerrm -f "$tmpdepfile"
713eed67faSmbalmer
723eed67faSmbalmer# Some modes work just like other modes, but use different flags.  We
733eed67faSmbalmer# parameterize here, but still list the modes in the big case below,
743eed67faSmbalmer# to make depend.m4 easier to write.  Note that we *cannot* use a case
753eed67faSmbalmer# here, because this file can only contain one case statement.
763eed67faSmbalmerif test "$depmode" = hp; then
773eed67faSmbalmer  # HP compiler uses -M and no extra arg.
783eed67faSmbalmer  gccflag=-M
793eed67faSmbalmer  depmode=gcc
803eed67faSmbalmerfi
813eed67faSmbalmer
823eed67faSmbalmerif test "$depmode" = dashXmstdout; then
833eed67faSmbalmer   # This is just like dashmstdout with a different argument.
843eed67faSmbalmer   dashmflag=-xM
853eed67faSmbalmer   depmode=dashmstdout
863eed67faSmbalmerfi
873eed67faSmbalmer
88dc407927Smrgcygpath_u="cygpath -u -f -"
89dc407927Smrgif test "$depmode" = msvcmsys; then
90dc407927Smrg   # This is just like msvisualcpp but w/o cygpath translation.
91dc407927Smrg   # Just convert the backslash-escaped backslashes to single forward
92dc407927Smrg   # slashes to satisfy depend.m4
9375cbef56Smrg   cygpath_u='sed s,\\\\,/,g'
94dc407927Smrg   depmode=msvisualcpp
95dc407927Smrgfi
96dc407927Smrg
9775cbef56Smrgif test "$depmode" = msvc7msys; then
9875cbef56Smrg   # This is just like msvc7 but w/o cygpath translation.
9975cbef56Smrg   # Just convert the backslash-escaped backslashes to single forward
10075cbef56Smrg   # slashes to satisfy depend.m4
10175cbef56Smrg   cygpath_u='sed s,\\\\,/,g'
10275cbef56Smrg   depmode=msvc7
10375cbef56Smrgfi
10475cbef56Smrg
1053eed67faSmbalmercase "$depmode" in
1063eed67faSmbalmergcc3)
1073eed67faSmbalmer## gcc 3 implements dependency tracking that does exactly what
1083eed67faSmbalmer## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
1093eed67faSmbalmer## it if -MD -MP comes after the -MF stuff.  Hmm.
110dc407927Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
111dc407927Smrg## the command line argument order; so add the flags where they
112dc407927Smrg## appear in depend2.am.  Note that the slowdown incurred here
113dc407927Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
114dc407927Smrg  for arg
115dc407927Smrg  do
116dc407927Smrg    case $arg in
117dc407927Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
118dc407927Smrg    *)  set fnord "$@" "$arg" ;;
119dc407927Smrg    esac
120dc407927Smrg    shift # fnord
121dc407927Smrg    shift # $arg
122dc407927Smrg  done
123dc407927Smrg  "$@"
1243eed67faSmbalmer  stat=$?
1253eed67faSmbalmer  if test $stat -eq 0; then :
1263eed67faSmbalmer  else
1273eed67faSmbalmer    rm -f "$tmpdepfile"
1283eed67faSmbalmer    exit $stat
1293eed67faSmbalmer  fi
1303eed67faSmbalmer  mv "$tmpdepfile" "$depfile"
1313eed67faSmbalmer  ;;
1323eed67faSmbalmer
1333eed67faSmbalmergcc)
1343eed67faSmbalmer## There are various ways to get dependency output from gcc.  Here's
1353eed67faSmbalmer## why we pick this rather obscure method:
1363eed67faSmbalmer## - Don't want to use -MD because we'd like the dependencies to end
1373eed67faSmbalmer##   up in a subdir.  Having to rename by hand is ugly.
1383eed67faSmbalmer##   (We might end up doing this anyway to support other compilers.)
1393eed67faSmbalmer## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
1403eed67faSmbalmer##   -MM, not -M (despite what the docs say).
1413eed67faSmbalmer## - Using -M directly means running the compiler twice (even worse
1423eed67faSmbalmer##   than renaming).
1433eed67faSmbalmer  if test -z "$gccflag"; then
1443eed67faSmbalmer    gccflag=-MD,
1453eed67faSmbalmer  fi
1463eed67faSmbalmer  "$@" -Wp,"$gccflag$tmpdepfile"
1473eed67faSmbalmer  stat=$?
1483eed67faSmbalmer  if test $stat -eq 0; then :
1493eed67faSmbalmer  else
1503eed67faSmbalmer    rm -f "$tmpdepfile"
1513eed67faSmbalmer    exit $stat
1523eed67faSmbalmer  fi
1533eed67faSmbalmer  rm -f "$depfile"
1543eed67faSmbalmer  echo "$object : \\" > "$depfile"
1553eed67faSmbalmer  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
1563eed67faSmbalmer## The second -e expression handles DOS-style file names with drive letters.
1573eed67faSmbalmer  sed -e 's/^[^:]*: / /' \
1583eed67faSmbalmer      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
1593eed67faSmbalmer## This next piece of magic avoids the `deleted header file' problem.
1603eed67faSmbalmer## The problem is that when a header file which appears in a .P file
1613eed67faSmbalmer## is deleted, the dependency causes make to die (because there is
1623eed67faSmbalmer## typically no way to rebuild the header).  We avoid this by adding
1633eed67faSmbalmer## dummy dependencies for each header file.  Too bad gcc doesn't do
1643eed67faSmbalmer## this for us directly.
1653eed67faSmbalmer  tr ' ' '
1663eed67faSmbalmer' < "$tmpdepfile" |
1673eed67faSmbalmer## Some versions of gcc put a space before the `:'.  On the theory
1683eed67faSmbalmer## that the space means something, we add a space to the output as
16975cbef56Smrg## well.  hp depmode also adds that space, but also prefixes the VPATH
17075cbef56Smrg## to the object.  Take care to not repeat it in the output.
1713eed67faSmbalmer## Some versions of the HPUX 10.20 sed can't process this invocation
1723eed67faSmbalmer## correctly.  Breaking it into two sed invocations is a workaround.
17375cbef56Smrg    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
17475cbef56Smrg      | sed -e 's/$/ :/' >> "$depfile"
1753eed67faSmbalmer  rm -f "$tmpdepfile"
1763eed67faSmbalmer  ;;
1773eed67faSmbalmer
1783eed67faSmbalmerhp)
1793eed67faSmbalmer  # This case exists only to let depend.m4 do its work.  It works by
1803eed67faSmbalmer  # looking at the text of this script.  This case will never be run,
1813eed67faSmbalmer  # since it is checked for above.
1823eed67faSmbalmer  exit 1
1833eed67faSmbalmer  ;;
1843eed67faSmbalmer
1853eed67faSmbalmersgi)
1863eed67faSmbalmer  if test "$libtool" = yes; then
1873eed67faSmbalmer    "$@" "-Wp,-MDupdate,$tmpdepfile"
1883eed67faSmbalmer  else
1893eed67faSmbalmer    "$@" -MDupdate "$tmpdepfile"
1903eed67faSmbalmer  fi
1913eed67faSmbalmer  stat=$?
1923eed67faSmbalmer  if test $stat -eq 0; then :
1933eed67faSmbalmer  else
1943eed67faSmbalmer    rm -f "$tmpdepfile"
1953eed67faSmbalmer    exit $stat
1963eed67faSmbalmer  fi
1973eed67faSmbalmer  rm -f "$depfile"
1983eed67faSmbalmer
1993eed67faSmbalmer  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
2003eed67faSmbalmer    echo "$object : \\" > "$depfile"
2013eed67faSmbalmer
2023eed67faSmbalmer    # Clip off the initial element (the dependent).  Don't try to be
2033eed67faSmbalmer    # clever and replace this with sed code, as IRIX sed won't handle
2043eed67faSmbalmer    # lines with more than a fixed number of characters (4096 in
2053eed67faSmbalmer    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
2063eed67faSmbalmer    # the IRIX cc adds comments like `#:fec' to the end of the
2073eed67faSmbalmer    # dependency line.
2083eed67faSmbalmer    tr ' ' '
2093eed67faSmbalmer' < "$tmpdepfile" \
2103eed67faSmbalmer    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
2113eed67faSmbalmer    tr '
212dc407927Smrg' ' ' >> "$depfile"
213dc407927Smrg    echo >> "$depfile"
2143eed67faSmbalmer
2153eed67faSmbalmer    # The second pass generates a dummy entry for each header file.
2163eed67faSmbalmer    tr ' ' '
2173eed67faSmbalmer' < "$tmpdepfile" \
2183eed67faSmbalmer   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
219dc407927Smrg   >> "$depfile"
2203eed67faSmbalmer  else
2213eed67faSmbalmer    # The sourcefile does not contain any dependencies, so just
2223eed67faSmbalmer    # store a dummy comment line, to avoid errors with the Makefile
2233eed67faSmbalmer    # "include basename.Plo" scheme.
2243eed67faSmbalmer    echo "#dummy" > "$depfile"
2253eed67faSmbalmer  fi
2263eed67faSmbalmer  rm -f "$tmpdepfile"
2273eed67faSmbalmer  ;;
2283eed67faSmbalmer
2293eed67faSmbalmeraix)
2303eed67faSmbalmer  # The C for AIX Compiler uses -M and outputs the dependencies
2313eed67faSmbalmer  # in a .u file.  In older versions, this file always lives in the
2323eed67faSmbalmer  # current directory.  Also, the AIX compiler puts `$object:' at the
2333eed67faSmbalmer  # start of each line; $object doesn't have directory information.
2343eed67faSmbalmer  # Version 6 uses the directory in both cases.
235dc407927Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
236dc407927Smrg  test "x$dir" = "x$object" && dir=
237dc407927Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
2383eed67faSmbalmer  if test "$libtool" = yes; then
239dc407927Smrg    tmpdepfile1=$dir$base.u
240dc407927Smrg    tmpdepfile2=$base.u
241dc407927Smrg    tmpdepfile3=$dir.libs/$base.u
2423eed67faSmbalmer    "$@" -Wc,-M
2433eed67faSmbalmer  else
244dc407927Smrg    tmpdepfile1=$dir$base.u
245dc407927Smrg    tmpdepfile2=$dir$base.u
246dc407927Smrg    tmpdepfile3=$dir$base.u
2473eed67faSmbalmer    "$@" -M
2483eed67faSmbalmer  fi
2493eed67faSmbalmer  stat=$?
2503eed67faSmbalmer
2513eed67faSmbalmer  if test $stat -eq 0; then :
2523eed67faSmbalmer  else
253dc407927Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2543eed67faSmbalmer    exit $stat
2553eed67faSmbalmer  fi
2563eed67faSmbalmer
257dc407927Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
258dc407927Smrg  do
259dc407927Smrg    test -f "$tmpdepfile" && break
260dc407927Smrg  done
2613eed67faSmbalmer  if test -f "$tmpdepfile"; then
2623eed67faSmbalmer    # Each line is of the form `foo.o: dependent.h'.
2633eed67faSmbalmer    # Do two passes, one to just change these to
2643eed67faSmbalmer    # `$object: dependent.h' and one to simply `dependent.h:'.
265dc407927Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
266dc407927Smrg    # That's a tab and a space in the [].
267dc407927Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
2683eed67faSmbalmer  else
2693eed67faSmbalmer    # The sourcefile does not contain any dependencies, so just
2703eed67faSmbalmer    # store a dummy comment line, to avoid errors with the Makefile
2713eed67faSmbalmer    # "include basename.Plo" scheme.
2723eed67faSmbalmer    echo "#dummy" > "$depfile"
2733eed67faSmbalmer  fi
2743eed67faSmbalmer  rm -f "$tmpdepfile"
2753eed67faSmbalmer  ;;
2763eed67faSmbalmer
2773eed67faSmbalmericc)
2783eed67faSmbalmer  # Intel's C compiler understands `-MD -MF file'.  However on
2793eed67faSmbalmer  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
2803eed67faSmbalmer  # ICC 7.0 will fill foo.d with something like
2813eed67faSmbalmer  #    foo.o: sub/foo.c
2823eed67faSmbalmer  #    foo.o: sub/foo.h
2833eed67faSmbalmer  # which is wrong.  We want:
2843eed67faSmbalmer  #    sub/foo.o: sub/foo.c
2853eed67faSmbalmer  #    sub/foo.o: sub/foo.h
2863eed67faSmbalmer  #    sub/foo.c:
2873eed67faSmbalmer  #    sub/foo.h:
2883eed67faSmbalmer  # ICC 7.1 will output
2893eed67faSmbalmer  #    foo.o: sub/foo.c sub/foo.h
2903eed67faSmbalmer  # and will wrap long lines using \ :
2913eed67faSmbalmer  #    foo.o: sub/foo.c ... \
2923eed67faSmbalmer  #     sub/foo.h ... \
2933eed67faSmbalmer  #     ...
2943eed67faSmbalmer
2953eed67faSmbalmer  "$@" -MD -MF "$tmpdepfile"
2963eed67faSmbalmer  stat=$?
2973eed67faSmbalmer  if test $stat -eq 0; then :
2983eed67faSmbalmer  else
2993eed67faSmbalmer    rm -f "$tmpdepfile"
3003eed67faSmbalmer    exit $stat
3013eed67faSmbalmer  fi
3023eed67faSmbalmer  rm -f "$depfile"
3033eed67faSmbalmer  # Each line is of the form `foo.o: dependent.h',
3043eed67faSmbalmer  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
3053eed67faSmbalmer  # Do two passes, one to just change these to
3063eed67faSmbalmer  # `$object: dependent.h' and one to simply `dependent.h:'.
3073eed67faSmbalmer  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
3083eed67faSmbalmer  # Some versions of the HPUX 10.20 sed can't process this invocation
3093eed67faSmbalmer  # correctly.  Breaking it into two sed invocations is a workaround.
3103eed67faSmbalmer  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
3113eed67faSmbalmer    sed -e 's/$/ :/' >> "$depfile"
3123eed67faSmbalmer  rm -f "$tmpdepfile"
3133eed67faSmbalmer  ;;
3143eed67faSmbalmer
315dc407927Smrghp2)
316dc407927Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
317dc407927Smrg  # compilers, which have integrated preprocessors.  The correct option
318dc407927Smrg  # to use with these is +Maked; it writes dependencies to a file named
319dc407927Smrg  # 'foo.d', which lands next to the object file, wherever that
320dc407927Smrg  # happens to be.
321dc407927Smrg  # Much of this is similar to the tru64 case; see comments there.
322dc407927Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
323dc407927Smrg  test "x$dir" = "x$object" && dir=
324dc407927Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
325dc407927Smrg  if test "$libtool" = yes; then
326dc407927Smrg    tmpdepfile1=$dir$base.d
327dc407927Smrg    tmpdepfile2=$dir.libs/$base.d
328dc407927Smrg    "$@" -Wc,+Maked
329dc407927Smrg  else
330dc407927Smrg    tmpdepfile1=$dir$base.d
331dc407927Smrg    tmpdepfile2=$dir$base.d
332dc407927Smrg    "$@" +Maked
333dc407927Smrg  fi
334dc407927Smrg  stat=$?
335dc407927Smrg  if test $stat -eq 0; then :
336dc407927Smrg  else
337dc407927Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
338dc407927Smrg     exit $stat
339dc407927Smrg  fi
340dc407927Smrg
341dc407927Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
342dc407927Smrg  do
343dc407927Smrg    test -f "$tmpdepfile" && break
344dc407927Smrg  done
345dc407927Smrg  if test -f "$tmpdepfile"; then
346dc407927Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
347dc407927Smrg    # Add `dependent.h:' lines.
348dc407927Smrg    sed -ne '2,${
349dc407927Smrg	       s/^ *//
350dc407927Smrg	       s/ \\*$//
351dc407927Smrg	       s/$/:/
352dc407927Smrg	       p
353dc407927Smrg	     }' "$tmpdepfile" >> "$depfile"
354dc407927Smrg  else
355dc407927Smrg    echo "#dummy" > "$depfile"
356dc407927Smrg  fi
357dc407927Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
358dc407927Smrg  ;;
359dc407927Smrg
3603eed67faSmbalmertru64)
3613eed67faSmbalmer   # The Tru64 compiler uses -MD to generate dependencies as a side
3623eed67faSmbalmer   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
3633eed67faSmbalmer   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
3643eed67faSmbalmer   # dependencies in `foo.d' instead, so we check for that too.
3653eed67faSmbalmer   # Subdirectories are respected.
3663eed67faSmbalmer   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3673eed67faSmbalmer   test "x$dir" = "x$object" && dir=
3683eed67faSmbalmer   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3693eed67faSmbalmer
3703eed67faSmbalmer   if test "$libtool" = yes; then
3713eed67faSmbalmer      # With Tru64 cc, shared objects can also be used to make a
372dc407927Smrg      # static library.  This mechanism is used in libtool 1.4 series to
3733eed67faSmbalmer      # handle both shared and static libraries in a single compilation.
3743eed67faSmbalmer      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
3753eed67faSmbalmer      #
3763eed67faSmbalmer      # With libtool 1.5 this exception was removed, and libtool now
3773eed67faSmbalmer      # generates 2 separate objects for the 2 libraries.  These two
378dc407927Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
3793eed67faSmbalmer      # in $dir$base.o.d.  We have to check for both files, because
3803eed67faSmbalmer      # one of the two compilations can be disabled.  We should prefer
3813eed67faSmbalmer      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
3823eed67faSmbalmer      # automatically cleaned when .libs/ is deleted, while ignoring
3833eed67faSmbalmer      # the former would cause a distcleancheck panic.
3843eed67faSmbalmer      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
3853eed67faSmbalmer      tmpdepfile2=$dir$base.o.d          # libtool 1.5
3863eed67faSmbalmer      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
3873eed67faSmbalmer      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
3883eed67faSmbalmer      "$@" -Wc,-MD
3893eed67faSmbalmer   else
3903eed67faSmbalmer      tmpdepfile1=$dir$base.o.d
3913eed67faSmbalmer      tmpdepfile2=$dir$base.d
3923eed67faSmbalmer      tmpdepfile3=$dir$base.d
3933eed67faSmbalmer      tmpdepfile4=$dir$base.d
3943eed67faSmbalmer      "$@" -MD
3953eed67faSmbalmer   fi
3963eed67faSmbalmer
3973eed67faSmbalmer   stat=$?
3983eed67faSmbalmer   if test $stat -eq 0; then :
3993eed67faSmbalmer   else
4003eed67faSmbalmer      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
4013eed67faSmbalmer      exit $stat
4023eed67faSmbalmer   fi
4033eed67faSmbalmer
4043eed67faSmbalmer   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
4053eed67faSmbalmer   do
4063eed67faSmbalmer     test -f "$tmpdepfile" && break
4073eed67faSmbalmer   done
4083eed67faSmbalmer   if test -f "$tmpdepfile"; then
4093eed67faSmbalmer      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
4103eed67faSmbalmer      # That's a tab and a space in the [].
4113eed67faSmbalmer      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
4123eed67faSmbalmer   else
4133eed67faSmbalmer      echo "#dummy" > "$depfile"
4143eed67faSmbalmer   fi
4153eed67faSmbalmer   rm -f "$tmpdepfile"
4163eed67faSmbalmer   ;;
4173eed67faSmbalmer
41875cbef56Smrgmsvc7)
41975cbef56Smrg  if test "$libtool" = yes; then
42075cbef56Smrg    showIncludes=-Wc,-showIncludes
42175cbef56Smrg  else
42275cbef56Smrg    showIncludes=-showIncludes
42375cbef56Smrg  fi
42475cbef56Smrg  "$@" $showIncludes > "$tmpdepfile"
42575cbef56Smrg  stat=$?
42675cbef56Smrg  grep -v '^Note: including file: ' "$tmpdepfile"
42775cbef56Smrg  if test "$stat" = 0; then :
42875cbef56Smrg  else
42975cbef56Smrg    rm -f "$tmpdepfile"
43075cbef56Smrg    exit $stat
43175cbef56Smrg  fi
43275cbef56Smrg  rm -f "$depfile"
43375cbef56Smrg  echo "$object : \\" > "$depfile"
43475cbef56Smrg  # The first sed program below extracts the file names and escapes
43575cbef56Smrg  # backslashes for cygpath.  The second sed program outputs the file
43675cbef56Smrg  # name when reading, but also accumulates all include files in the
43775cbef56Smrg  # hold buffer in order to output them again at the end.  This only
43875cbef56Smrg  # works with sed implementations that can handle large buffers.
43975cbef56Smrg  sed < "$tmpdepfile" -n '
44075cbef56Smrg/^Note: including file:  *\(.*\)/ {
44175cbef56Smrg  s//\1/
44275cbef56Smrg  s/\\/\\\\/g
44375cbef56Smrg  p
44475cbef56Smrg}' | $cygpath_u | sort -u | sed -n '
44575cbef56Smrgs/ /\\ /g
44675cbef56Smrgs/\(.*\)/	\1 \\/p
44775cbef56Smrgs/.\(.*\) \\/\1:/
44875cbef56SmrgH
44975cbef56Smrg$ {
45075cbef56Smrg  s/.*/	/
45175cbef56Smrg  G
45275cbef56Smrg  p
45375cbef56Smrg}' >> "$depfile"
45475cbef56Smrg  rm -f "$tmpdepfile"
45575cbef56Smrg  ;;
45675cbef56Smrg
45775cbef56Smrgmsvc7msys)
45875cbef56Smrg  # This case exists only to let depend.m4 do its work.  It works by
45975cbef56Smrg  # looking at the text of this script.  This case will never be run,
46075cbef56Smrg  # since it is checked for above.
46175cbef56Smrg  exit 1
46275cbef56Smrg  ;;
46375cbef56Smrg
4643eed67faSmbalmer#nosideeffect)
4653eed67faSmbalmer  # This comment above is used by automake to tell side-effect
4663eed67faSmbalmer  # dependency tracking mechanisms from slower ones.
4673eed67faSmbalmer
4683eed67faSmbalmerdashmstdout)
4693eed67faSmbalmer  # Important note: in order to support this mode, a compiler *must*
4703eed67faSmbalmer  # always write the preprocessed file to stdout, regardless of -o.
4713eed67faSmbalmer  "$@" || exit $?
4723eed67faSmbalmer
4733eed67faSmbalmer  # Remove the call to Libtool.
4743eed67faSmbalmer  if test "$libtool" = yes; then
475dc407927Smrg    while test "X$1" != 'X--mode=compile'; do
4763eed67faSmbalmer      shift
4773eed67faSmbalmer    done
4783eed67faSmbalmer    shift
4793eed67faSmbalmer  fi
4803eed67faSmbalmer
4813eed67faSmbalmer  # Remove `-o $object'.
4823eed67faSmbalmer  IFS=" "
4833eed67faSmbalmer  for arg
4843eed67faSmbalmer  do
4853eed67faSmbalmer    case $arg in
4863eed67faSmbalmer    -o)
4873eed67faSmbalmer      shift
4883eed67faSmbalmer      ;;
4893eed67faSmbalmer    $object)
4903eed67faSmbalmer      shift
4913eed67faSmbalmer      ;;
4923eed67faSmbalmer    *)
4933eed67faSmbalmer      set fnord "$@" "$arg"
4943eed67faSmbalmer      shift # fnord
4953eed67faSmbalmer      shift # $arg
4963eed67faSmbalmer      ;;
4973eed67faSmbalmer    esac
4983eed67faSmbalmer  done
4993eed67faSmbalmer
5003eed67faSmbalmer  test -z "$dashmflag" && dashmflag=-M
5013eed67faSmbalmer  # Require at least two characters before searching for `:'
5023eed67faSmbalmer  # in the target name.  This is to cope with DOS-style filenames:
5033eed67faSmbalmer  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
5043eed67faSmbalmer  "$@" $dashmflag |
5053eed67faSmbalmer    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
5063eed67faSmbalmer  rm -f "$depfile"
5073eed67faSmbalmer  cat < "$tmpdepfile" > "$depfile"
5083eed67faSmbalmer  tr ' ' '
5093eed67faSmbalmer' < "$tmpdepfile" | \
5103eed67faSmbalmer## Some versions of the HPUX 10.20 sed can't process this invocation
5113eed67faSmbalmer## correctly.  Breaking it into two sed invocations is a workaround.
5123eed67faSmbalmer    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
5133eed67faSmbalmer  rm -f "$tmpdepfile"
5143eed67faSmbalmer  ;;
5153eed67faSmbalmer
5163eed67faSmbalmerdashXmstdout)
5173eed67faSmbalmer  # This case only exists to satisfy depend.m4.  It is never actually
5183eed67faSmbalmer  # run, as this mode is specially recognized in the preamble.
5193eed67faSmbalmer  exit 1
5203eed67faSmbalmer  ;;
5213eed67faSmbalmer
5223eed67faSmbalmermakedepend)
5233eed67faSmbalmer  "$@" || exit $?
5243eed67faSmbalmer  # Remove any Libtool call
5253eed67faSmbalmer  if test "$libtool" = yes; then
526dc407927Smrg    while test "X$1" != 'X--mode=compile'; do
5273eed67faSmbalmer      shift
5283eed67faSmbalmer    done
5293eed67faSmbalmer    shift
5303eed67faSmbalmer  fi
5313eed67faSmbalmer  # X makedepend
5323eed67faSmbalmer  shift
533dc407927Smrg  cleared=no eat=no
534dc407927Smrg  for arg
535dc407927Smrg  do
5363eed67faSmbalmer    case $cleared in
5373eed67faSmbalmer    no)
5383eed67faSmbalmer      set ""; shift
5393eed67faSmbalmer      cleared=yes ;;
5403eed67faSmbalmer    esac
541dc407927Smrg    if test $eat = yes; then
542dc407927Smrg      eat=no
543dc407927Smrg      continue
544dc407927Smrg    fi
5453eed67faSmbalmer    case "$arg" in
5463eed67faSmbalmer    -D*|-I*)
5473eed67faSmbalmer      set fnord "$@" "$arg"; shift ;;
5483eed67faSmbalmer    # Strip any option that makedepend may not understand.  Remove
5493eed67faSmbalmer    # the object too, otherwise makedepend will parse it as a source file.
550dc407927Smrg    -arch)
551dc407927Smrg      eat=yes ;;
5523eed67faSmbalmer    -*|$object)
5533eed67faSmbalmer      ;;
5543eed67faSmbalmer    *)
5553eed67faSmbalmer      set fnord "$@" "$arg"; shift ;;
5563eed67faSmbalmer    esac
5573eed67faSmbalmer  done
558dc407927Smrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
5593eed67faSmbalmer  touch "$tmpdepfile"
5603eed67faSmbalmer  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
5613eed67faSmbalmer  rm -f "$depfile"
56275cbef56Smrg  # makedepend may prepend the VPATH from the source file name to the object.
56375cbef56Smrg  # No need to regex-escape $object, excess matching of '.' is harmless.
56475cbef56Smrg  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
5653eed67faSmbalmer  sed '1,2d' "$tmpdepfile" | tr ' ' '
5663eed67faSmbalmer' | \
5673eed67faSmbalmer## Some versions of the HPUX 10.20 sed can't process this invocation
5683eed67faSmbalmer## correctly.  Breaking it into two sed invocations is a workaround.
5693eed67faSmbalmer    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
5703eed67faSmbalmer  rm -f "$tmpdepfile" "$tmpdepfile".bak
5713eed67faSmbalmer  ;;
5723eed67faSmbalmer
5733eed67faSmbalmercpp)
5743eed67faSmbalmer  # Important note: in order to support this mode, a compiler *must*
5753eed67faSmbalmer  # always write the preprocessed file to stdout.
5763eed67faSmbalmer  "$@" || exit $?
5773eed67faSmbalmer
5783eed67faSmbalmer  # Remove the call to Libtool.
5793eed67faSmbalmer  if test "$libtool" = yes; then
580dc407927Smrg    while test "X$1" != 'X--mode=compile'; do
5813eed67faSmbalmer      shift
5823eed67faSmbalmer    done
5833eed67faSmbalmer    shift
5843eed67faSmbalmer  fi
5853eed67faSmbalmer
5863eed67faSmbalmer  # Remove `-o $object'.
5873eed67faSmbalmer  IFS=" "
5883eed67faSmbalmer  for arg
5893eed67faSmbalmer  do
5903eed67faSmbalmer    case $arg in
5913eed67faSmbalmer    -o)
5923eed67faSmbalmer      shift
5933eed67faSmbalmer      ;;
5943eed67faSmbalmer    $object)
5953eed67faSmbalmer      shift
5963eed67faSmbalmer      ;;
5973eed67faSmbalmer    *)
5983eed67faSmbalmer      set fnord "$@" "$arg"
5993eed67faSmbalmer      shift # fnord
6003eed67faSmbalmer      shift # $arg
6013eed67faSmbalmer      ;;
6023eed67faSmbalmer    esac
6033eed67faSmbalmer  done
6043eed67faSmbalmer
6053eed67faSmbalmer  "$@" -E |
6063eed67faSmbalmer    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
6073eed67faSmbalmer       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
6083eed67faSmbalmer    sed '$ s: \\$::' > "$tmpdepfile"
6093eed67faSmbalmer  rm -f "$depfile"
6103eed67faSmbalmer  echo "$object : \\" > "$depfile"
6113eed67faSmbalmer  cat < "$tmpdepfile" >> "$depfile"
6123eed67faSmbalmer  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
6133eed67faSmbalmer  rm -f "$tmpdepfile"
6143eed67faSmbalmer  ;;
6153eed67faSmbalmer
6163eed67faSmbalmermsvisualcpp)
6173eed67faSmbalmer  # Important note: in order to support this mode, a compiler *must*
618dc407927Smrg  # always write the preprocessed file to stdout.
6193eed67faSmbalmer  "$@" || exit $?
620dc407927Smrg
621dc407927Smrg  # Remove the call to Libtool.
622dc407927Smrg  if test "$libtool" = yes; then
623dc407927Smrg    while test "X$1" != 'X--mode=compile'; do
624dc407927Smrg      shift
625dc407927Smrg    done
626dc407927Smrg    shift
627dc407927Smrg  fi
628dc407927Smrg
6293eed67faSmbalmer  IFS=" "
6303eed67faSmbalmer  for arg
6313eed67faSmbalmer  do
6323eed67faSmbalmer    case "$arg" in
633dc407927Smrg    -o)
634dc407927Smrg      shift
635dc407927Smrg      ;;
636dc407927Smrg    $object)
637dc407927Smrg      shift
638dc407927Smrg      ;;
6393eed67faSmbalmer    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
6403eed67faSmbalmer	set fnord "$@"
6413eed67faSmbalmer	shift
6423eed67faSmbalmer	shift
6433eed67faSmbalmer	;;
6443eed67faSmbalmer    *)
6453eed67faSmbalmer	set fnord "$@" "$arg"
6463eed67faSmbalmer	shift
6473eed67faSmbalmer	shift
6483eed67faSmbalmer	;;
6493eed67faSmbalmer    esac
6503eed67faSmbalmer  done
651dc407927Smrg  "$@" -E 2>/dev/null |
652dc407927Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
6533eed67faSmbalmer  rm -f "$depfile"
6543eed67faSmbalmer  echo "$object : \\" > "$depfile"
655dc407927Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
6563eed67faSmbalmer  echo "	" >> "$depfile"
657dc407927Smrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
6583eed67faSmbalmer  rm -f "$tmpdepfile"
6593eed67faSmbalmer  ;;
6603eed67faSmbalmer
661dc407927Smrgmsvcmsys)
662dc407927Smrg  # This case exists only to let depend.m4 do its work.  It works by
663dc407927Smrg  # looking at the text of this script.  This case will never be run,
664dc407927Smrg  # since it is checked for above.
665dc407927Smrg  exit 1
666dc407927Smrg  ;;
667dc407927Smrg
6683eed67faSmbalmernone)
6693eed67faSmbalmer  exec "$@"
6703eed67faSmbalmer  ;;
6713eed67faSmbalmer
6723eed67faSmbalmer*)
6733eed67faSmbalmer  echo "Unknown depmode $depmode" 1>&2
6743eed67faSmbalmer  exit 1
6753eed67faSmbalmer  ;;
6763eed67faSmbalmeresac
6773eed67faSmbalmer
6783eed67faSmbalmerexit 0
6793eed67faSmbalmer
6803eed67faSmbalmer# Local Variables:
6813eed67faSmbalmer# mode: shell-script
6823eed67faSmbalmer# sh-indentation: 2
6833eed67faSmbalmer# eval: (add-hook 'write-file-hooks 'time-stamp)
6843eed67faSmbalmer# time-stamp-start: "scriptversion="
6853eed67faSmbalmer# time-stamp-format: "%:y-%02m-%02d.%02H"
686dc407927Smrg# time-stamp-time-zone: "UTC"
687dc407927Smrg# time-stamp-end: "; # UTC"
6883eed67faSmbalmer# End:
689