depcomp revision f14f4646
15dfecf96Smrg#! /bin/sh
25dfecf96Smrg# depcomp - compile a program generating dependencies as side-effects
35dfecf96Smrg
4f14f4646Smrgscriptversion=2007-03-29.01
55dfecf96Smrg
6f14f4646Smrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software
7f14f4646Smrg# Foundation, Inc.
85dfecf96Smrg
95dfecf96Smrg# This program is free software; you can redistribute it and/or modify
105dfecf96Smrg# it under the terms of the GNU General Public License as published by
115dfecf96Smrg# the Free Software Foundation; either version 2, or (at your option)
125dfecf96Smrg# any later version.
135dfecf96Smrg
145dfecf96Smrg# This program is distributed in the hope that it will be useful,
155dfecf96Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
165dfecf96Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
175dfecf96Smrg# GNU General Public License for more details.
185dfecf96Smrg
195dfecf96Smrg# You should have received a copy of the GNU General Public License
205dfecf96Smrg# along with this program; if not, write to the Free Software
215dfecf96Smrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
225dfecf96Smrg# 02110-1301, USA.
235dfecf96Smrg
245dfecf96Smrg# As a special exception to the GNU General Public License, if you
255dfecf96Smrg# distribute this file as part of a program that contains a
265dfecf96Smrg# configuration script generated by Autoconf, you may include it under
275dfecf96Smrg# the same distribution terms that you use for the rest of that program.
285dfecf96Smrg
295dfecf96Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
305dfecf96Smrg
315dfecf96Smrgcase $1 in
325dfecf96Smrg  '')
335dfecf96Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
345dfecf96Smrg     exit 1;
355dfecf96Smrg     ;;
365dfecf96Smrg  -h | --h*)
375dfecf96Smrg    cat <<\EOF
385dfecf96SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
395dfecf96Smrg
405dfecf96SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
415dfecf96Smrgas side-effects.
425dfecf96Smrg
435dfecf96SmrgEnvironment variables:
445dfecf96Smrg  depmode     Dependency tracking mode.
455dfecf96Smrg  source      Source file read by `PROGRAMS ARGS'.
465dfecf96Smrg  object      Object file output by `PROGRAMS ARGS'.
475dfecf96Smrg  DEPDIR      directory where to store dependencies.
485dfecf96Smrg  depfile     Dependency file to output.
495dfecf96Smrg  tmpdepfile  Temporary file to use when outputing dependencies.
505dfecf96Smrg  libtool     Whether libtool is used (yes/no).
515dfecf96Smrg
525dfecf96SmrgReport bugs to <bug-automake@gnu.org>.
535dfecf96SmrgEOF
545dfecf96Smrg    exit $?
555dfecf96Smrg    ;;
565dfecf96Smrg  -v | --v*)
575dfecf96Smrg    echo "depcomp $scriptversion"
585dfecf96Smrg    exit $?
595dfecf96Smrg    ;;
605dfecf96Smrgesac
615dfecf96Smrg
625dfecf96Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
635dfecf96Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
645dfecf96Smrg  exit 1
655dfecf96Smrgfi
665dfecf96Smrg
675dfecf96Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
685dfecf96Smrgdepfile=${depfile-`echo "$object" |
695dfecf96Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
705dfecf96Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
715dfecf96Smrg
725dfecf96Smrgrm -f "$tmpdepfile"
735dfecf96Smrg
745dfecf96Smrg# Some modes work just like other modes, but use different flags.  We
755dfecf96Smrg# parameterize here, but still list the modes in the big case below,
765dfecf96Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
775dfecf96Smrg# here, because this file can only contain one case statement.
785dfecf96Smrgif test "$depmode" = hp; then
795dfecf96Smrg  # HP compiler uses -M and no extra arg.
805dfecf96Smrg  gccflag=-M
815dfecf96Smrg  depmode=gcc
825dfecf96Smrgfi
835dfecf96Smrg
845dfecf96Smrgif test "$depmode" = dashXmstdout; then
855dfecf96Smrg   # This is just like dashmstdout with a different argument.
865dfecf96Smrg   dashmflag=-xM
875dfecf96Smrg   depmode=dashmstdout
885dfecf96Smrgfi
895dfecf96Smrg
905dfecf96Smrgcase "$depmode" in
915dfecf96Smrggcc3)
925dfecf96Smrg## gcc 3 implements dependency tracking that does exactly what
935dfecf96Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
945dfecf96Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
95f14f4646Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
96f14f4646Smrg## the command line argument order; so add the flags where they
97f14f4646Smrg## appear in depend2.am.  Note that the slowdown incurred here
98f14f4646Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
99f14f4646Smrg  for arg
100f14f4646Smrg  do
101f14f4646Smrg    case $arg in
102f14f4646Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
103f14f4646Smrg    *)  set fnord "$@" "$arg" ;;
104f14f4646Smrg    esac
105f14f4646Smrg    shift # fnord
106f14f4646Smrg    shift # $arg
107f14f4646Smrg  done
108f14f4646Smrg  "$@"
1095dfecf96Smrg  stat=$?
1105dfecf96Smrg  if test $stat -eq 0; then :
1115dfecf96Smrg  else
1125dfecf96Smrg    rm -f "$tmpdepfile"
1135dfecf96Smrg    exit $stat
1145dfecf96Smrg  fi
1155dfecf96Smrg  mv "$tmpdepfile" "$depfile"
1165dfecf96Smrg  ;;
1175dfecf96Smrg
1185dfecf96Smrggcc)
1195dfecf96Smrg## There are various ways to get dependency output from gcc.  Here's
1205dfecf96Smrg## why we pick this rather obscure method:
1215dfecf96Smrg## - Don't want to use -MD because we'd like the dependencies to end
1225dfecf96Smrg##   up in a subdir.  Having to rename by hand is ugly.
1235dfecf96Smrg##   (We might end up doing this anyway to support other compilers.)
1245dfecf96Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
1255dfecf96Smrg##   -MM, not -M (despite what the docs say).
1265dfecf96Smrg## - Using -M directly means running the compiler twice (even worse
1275dfecf96Smrg##   than renaming).
1285dfecf96Smrg  if test -z "$gccflag"; then
1295dfecf96Smrg    gccflag=-MD,
1305dfecf96Smrg  fi
1315dfecf96Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
1325dfecf96Smrg  stat=$?
1335dfecf96Smrg  if test $stat -eq 0; then :
1345dfecf96Smrg  else
1355dfecf96Smrg    rm -f "$tmpdepfile"
1365dfecf96Smrg    exit $stat
1375dfecf96Smrg  fi
1385dfecf96Smrg  rm -f "$depfile"
1395dfecf96Smrg  echo "$object : \\" > "$depfile"
1405dfecf96Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
1415dfecf96Smrg## The second -e expression handles DOS-style file names with drive letters.
1425dfecf96Smrg  sed -e 's/^[^:]*: / /' \
1435dfecf96Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
1445dfecf96Smrg## This next piece of magic avoids the `deleted header file' problem.
1455dfecf96Smrg## The problem is that when a header file which appears in a .P file
1465dfecf96Smrg## is deleted, the dependency causes make to die (because there is
1475dfecf96Smrg## typically no way to rebuild the header).  We avoid this by adding
1485dfecf96Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
1495dfecf96Smrg## this for us directly.
1505dfecf96Smrg  tr ' ' '
1515dfecf96Smrg' < "$tmpdepfile" |
1525dfecf96Smrg## Some versions of gcc put a space before the `:'.  On the theory
1535dfecf96Smrg## that the space means something, we add a space to the output as
1545dfecf96Smrg## well.
1555dfecf96Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
1565dfecf96Smrg## correctly.  Breaking it into two sed invocations is a workaround.
1575dfecf96Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
1585dfecf96Smrg  rm -f "$tmpdepfile"
1595dfecf96Smrg  ;;
1605dfecf96Smrg
1615dfecf96Smrghp)
1625dfecf96Smrg  # This case exists only to let depend.m4 do its work.  It works by
1635dfecf96Smrg  # looking at the text of this script.  This case will never be run,
1645dfecf96Smrg  # since it is checked for above.
1655dfecf96Smrg  exit 1
1665dfecf96Smrg  ;;
1675dfecf96Smrg
1685dfecf96Smrgsgi)
1695dfecf96Smrg  if test "$libtool" = yes; then
1705dfecf96Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
1715dfecf96Smrg  else
1725dfecf96Smrg    "$@" -MDupdate "$tmpdepfile"
1735dfecf96Smrg  fi
1745dfecf96Smrg  stat=$?
1755dfecf96Smrg  if test $stat -eq 0; then :
1765dfecf96Smrg  else
1775dfecf96Smrg    rm -f "$tmpdepfile"
1785dfecf96Smrg    exit $stat
1795dfecf96Smrg  fi
1805dfecf96Smrg  rm -f "$depfile"
1815dfecf96Smrg
1825dfecf96Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
1835dfecf96Smrg    echo "$object : \\" > "$depfile"
1845dfecf96Smrg
1855dfecf96Smrg    # Clip off the initial element (the dependent).  Don't try to be
1865dfecf96Smrg    # clever and replace this with sed code, as IRIX sed won't handle
1875dfecf96Smrg    # lines with more than a fixed number of characters (4096 in
1885dfecf96Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
1895dfecf96Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
1905dfecf96Smrg    # dependency line.
1915dfecf96Smrg    tr ' ' '
1925dfecf96Smrg' < "$tmpdepfile" \
1935dfecf96Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
1945dfecf96Smrg    tr '
1955dfecf96Smrg' ' ' >> $depfile
1965dfecf96Smrg    echo >> $depfile
1975dfecf96Smrg
1985dfecf96Smrg    # The second pass generates a dummy entry for each header file.
1995dfecf96Smrg    tr ' ' '
2005dfecf96Smrg' < "$tmpdepfile" \
2015dfecf96Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
2025dfecf96Smrg   >> $depfile
2035dfecf96Smrg  else
2045dfecf96Smrg    # The sourcefile does not contain any dependencies, so just
2055dfecf96Smrg    # store a dummy comment line, to avoid errors with the Makefile
2065dfecf96Smrg    # "include basename.Plo" scheme.
2075dfecf96Smrg    echo "#dummy" > "$depfile"
2085dfecf96Smrg  fi
2095dfecf96Smrg  rm -f "$tmpdepfile"
2105dfecf96Smrg  ;;
2115dfecf96Smrg
2125dfecf96Smrgaix)
2135dfecf96Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
2145dfecf96Smrg  # in a .u file.  In older versions, this file always lives in the
2155dfecf96Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
2165dfecf96Smrg  # start of each line; $object doesn't have directory information.
2175dfecf96Smrg  # Version 6 uses the directory in both cases.
218f14f4646Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
219f14f4646Smrg  test "x$dir" = "x$object" && dir=
220f14f4646Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
2215dfecf96Smrg  if test "$libtool" = yes; then
222f14f4646Smrg    tmpdepfile1=$dir$base.u
223f14f4646Smrg    tmpdepfile2=$base.u
224f14f4646Smrg    tmpdepfile3=$dir.libs/$base.u
2255dfecf96Smrg    "$@" -Wc,-M
2265dfecf96Smrg  else
227f14f4646Smrg    tmpdepfile1=$dir$base.u
228f14f4646Smrg    tmpdepfile2=$dir$base.u
229f14f4646Smrg    tmpdepfile3=$dir$base.u
2305dfecf96Smrg    "$@" -M
2315dfecf96Smrg  fi
2325dfecf96Smrg  stat=$?
2335dfecf96Smrg
2345dfecf96Smrg  if test $stat -eq 0; then :
2355dfecf96Smrg  else
236f14f4646Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
2375dfecf96Smrg    exit $stat
2385dfecf96Smrg  fi
2395dfecf96Smrg
240f14f4646Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
241f14f4646Smrg  do
242f14f4646Smrg    test -f "$tmpdepfile" && break
243f14f4646Smrg  done
2445dfecf96Smrg  if test -f "$tmpdepfile"; then
2455dfecf96Smrg    # Each line is of the form `foo.o: dependent.h'.
2465dfecf96Smrg    # Do two passes, one to just change these to
2475dfecf96Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
248f14f4646Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
249f14f4646Smrg    # That's a tab and a space in the [].
250f14f4646Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
2515dfecf96Smrg  else
2525dfecf96Smrg    # The sourcefile does not contain any dependencies, so just
2535dfecf96Smrg    # store a dummy comment line, to avoid errors with the Makefile
2545dfecf96Smrg    # "include basename.Plo" scheme.
2555dfecf96Smrg    echo "#dummy" > "$depfile"
2565dfecf96Smrg  fi
2575dfecf96Smrg  rm -f "$tmpdepfile"
2585dfecf96Smrg  ;;
2595dfecf96Smrg
2605dfecf96Smrgicc)
2615dfecf96Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
2625dfecf96Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
2635dfecf96Smrg  # ICC 7.0 will fill foo.d with something like
2645dfecf96Smrg  #    foo.o: sub/foo.c
2655dfecf96Smrg  #    foo.o: sub/foo.h
2665dfecf96Smrg  # which is wrong.  We want:
2675dfecf96Smrg  #    sub/foo.o: sub/foo.c
2685dfecf96Smrg  #    sub/foo.o: sub/foo.h
2695dfecf96Smrg  #    sub/foo.c:
2705dfecf96Smrg  #    sub/foo.h:
2715dfecf96Smrg  # ICC 7.1 will output
2725dfecf96Smrg  #    foo.o: sub/foo.c sub/foo.h
2735dfecf96Smrg  # and will wrap long lines using \ :
2745dfecf96Smrg  #    foo.o: sub/foo.c ... \
2755dfecf96Smrg  #     sub/foo.h ... \
2765dfecf96Smrg  #     ...
2775dfecf96Smrg
2785dfecf96Smrg  "$@" -MD -MF "$tmpdepfile"
2795dfecf96Smrg  stat=$?
2805dfecf96Smrg  if test $stat -eq 0; then :
2815dfecf96Smrg  else
2825dfecf96Smrg    rm -f "$tmpdepfile"
2835dfecf96Smrg    exit $stat
2845dfecf96Smrg  fi
2855dfecf96Smrg  rm -f "$depfile"
2865dfecf96Smrg  # Each line is of the form `foo.o: dependent.h',
2875dfecf96Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
2885dfecf96Smrg  # Do two passes, one to just change these to
2895dfecf96Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
2905dfecf96Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
2915dfecf96Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
2925dfecf96Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
2935dfecf96Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
2945dfecf96Smrg    sed -e 's/$/ :/' >> "$depfile"
2955dfecf96Smrg  rm -f "$tmpdepfile"
2965dfecf96Smrg  ;;
2975dfecf96Smrg
298f14f4646Smrghp2)
299f14f4646Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
300f14f4646Smrg  # compilers, which have integrated preprocessors.  The correct option
301f14f4646Smrg  # to use with these is +Maked; it writes dependencies to a file named
302f14f4646Smrg  # 'foo.d', which lands next to the object file, wherever that
303f14f4646Smrg  # happens to be.
304f14f4646Smrg  # Much of this is similar to the tru64 case; see comments there.
305f14f4646Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
306f14f4646Smrg  test "x$dir" = "x$object" && dir=
307f14f4646Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
308f14f4646Smrg  if test "$libtool" = yes; then
309f14f4646Smrg    tmpdepfile1=$dir$base.d
310f14f4646Smrg    tmpdepfile2=$dir.libs/$base.d
311f14f4646Smrg    "$@" -Wc,+Maked
312f14f4646Smrg  else
313f14f4646Smrg    tmpdepfile1=$dir$base.d
314f14f4646Smrg    tmpdepfile2=$dir$base.d
315f14f4646Smrg    "$@" +Maked
316f14f4646Smrg  fi
317f14f4646Smrg  stat=$?
318f14f4646Smrg  if test $stat -eq 0; then :
319f14f4646Smrg  else
320f14f4646Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
321f14f4646Smrg     exit $stat
322f14f4646Smrg  fi
323f14f4646Smrg
324f14f4646Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
325f14f4646Smrg  do
326f14f4646Smrg    test -f "$tmpdepfile" && break
327f14f4646Smrg  done
328f14f4646Smrg  if test -f "$tmpdepfile"; then
329f14f4646Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
330f14f4646Smrg    # Add `dependent.h:' lines.
331f14f4646Smrg    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
332f14f4646Smrg  else
333f14f4646Smrg    echo "#dummy" > "$depfile"
334f14f4646Smrg  fi
335f14f4646Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
336f14f4646Smrg  ;;
337f14f4646Smrg
3385dfecf96Smrgtru64)
3395dfecf96Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
3405dfecf96Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
3415dfecf96Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
3425dfecf96Smrg   # dependencies in `foo.d' instead, so we check for that too.
3435dfecf96Smrg   # Subdirectories are respected.
3445dfecf96Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3455dfecf96Smrg   test "x$dir" = "x$object" && dir=
3465dfecf96Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3475dfecf96Smrg
3485dfecf96Smrg   if test "$libtool" = yes; then
3495dfecf96Smrg      # With Tru64 cc, shared objects can also be used to make a
350f14f4646Smrg      # static library.  This mechanism is used in libtool 1.4 series to
3515dfecf96Smrg      # handle both shared and static libraries in a single compilation.
3525dfecf96Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
3535dfecf96Smrg      #
3545dfecf96Smrg      # With libtool 1.5 this exception was removed, and libtool now
3555dfecf96Smrg      # generates 2 separate objects for the 2 libraries.  These two
356f14f4646Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
3575dfecf96Smrg      # in $dir$base.o.d.  We have to check for both files, because
3585dfecf96Smrg      # one of the two compilations can be disabled.  We should prefer
3595dfecf96Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
3605dfecf96Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
3615dfecf96Smrg      # the former would cause a distcleancheck panic.
3625dfecf96Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
3635dfecf96Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
3645dfecf96Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
3655dfecf96Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
3665dfecf96Smrg      "$@" -Wc,-MD
3675dfecf96Smrg   else
3685dfecf96Smrg      tmpdepfile1=$dir$base.o.d
3695dfecf96Smrg      tmpdepfile2=$dir$base.d
3705dfecf96Smrg      tmpdepfile3=$dir$base.d
3715dfecf96Smrg      tmpdepfile4=$dir$base.d
3725dfecf96Smrg      "$@" -MD
3735dfecf96Smrg   fi
3745dfecf96Smrg
3755dfecf96Smrg   stat=$?
3765dfecf96Smrg   if test $stat -eq 0; then :
3775dfecf96Smrg   else
3785dfecf96Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3795dfecf96Smrg      exit $stat
3805dfecf96Smrg   fi
3815dfecf96Smrg
3825dfecf96Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
3835dfecf96Smrg   do
3845dfecf96Smrg     test -f "$tmpdepfile" && break
3855dfecf96Smrg   done
3865dfecf96Smrg   if test -f "$tmpdepfile"; then
3875dfecf96Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
3885dfecf96Smrg      # That's a tab and a space in the [].
3895dfecf96Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
3905dfecf96Smrg   else
3915dfecf96Smrg      echo "#dummy" > "$depfile"
3925dfecf96Smrg   fi
3935dfecf96Smrg   rm -f "$tmpdepfile"
3945dfecf96Smrg   ;;
3955dfecf96Smrg
3965dfecf96Smrg#nosideeffect)
3975dfecf96Smrg  # This comment above is used by automake to tell side-effect
3985dfecf96Smrg  # dependency tracking mechanisms from slower ones.
3995dfecf96Smrg
4005dfecf96Smrgdashmstdout)
4015dfecf96Smrg  # Important note: in order to support this mode, a compiler *must*
4025dfecf96Smrg  # always write the preprocessed file to stdout, regardless of -o.
4035dfecf96Smrg  "$@" || exit $?
4045dfecf96Smrg
4055dfecf96Smrg  # Remove the call to Libtool.
4065dfecf96Smrg  if test "$libtool" = yes; then
4075dfecf96Smrg    while test $1 != '--mode=compile'; do
4085dfecf96Smrg      shift
4095dfecf96Smrg    done
4105dfecf96Smrg    shift
4115dfecf96Smrg  fi
4125dfecf96Smrg
4135dfecf96Smrg  # Remove `-o $object'.
4145dfecf96Smrg  IFS=" "
4155dfecf96Smrg  for arg
4165dfecf96Smrg  do
4175dfecf96Smrg    case $arg in
4185dfecf96Smrg    -o)
4195dfecf96Smrg      shift
4205dfecf96Smrg      ;;
4215dfecf96Smrg    $object)
4225dfecf96Smrg      shift
4235dfecf96Smrg      ;;
4245dfecf96Smrg    *)
4255dfecf96Smrg      set fnord "$@" "$arg"
4265dfecf96Smrg      shift # fnord
4275dfecf96Smrg      shift # $arg
4285dfecf96Smrg      ;;
4295dfecf96Smrg    esac
4305dfecf96Smrg  done
4315dfecf96Smrg
4325dfecf96Smrg  test -z "$dashmflag" && dashmflag=-M
4335dfecf96Smrg  # Require at least two characters before searching for `:'
4345dfecf96Smrg  # in the target name.  This is to cope with DOS-style filenames:
4355dfecf96Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
4365dfecf96Smrg  "$@" $dashmflag |
4375dfecf96Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
4385dfecf96Smrg  rm -f "$depfile"
4395dfecf96Smrg  cat < "$tmpdepfile" > "$depfile"
4405dfecf96Smrg  tr ' ' '
4415dfecf96Smrg' < "$tmpdepfile" | \
4425dfecf96Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
4435dfecf96Smrg## correctly.  Breaking it into two sed invocations is a workaround.
4445dfecf96Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
4455dfecf96Smrg  rm -f "$tmpdepfile"
4465dfecf96Smrg  ;;
4475dfecf96Smrg
4485dfecf96SmrgdashXmstdout)
4495dfecf96Smrg  # This case only exists to satisfy depend.m4.  It is never actually
4505dfecf96Smrg  # run, as this mode is specially recognized in the preamble.
4515dfecf96Smrg  exit 1
4525dfecf96Smrg  ;;
4535dfecf96Smrg
4545dfecf96Smrgmakedepend)
4555dfecf96Smrg  "$@" || exit $?
4565dfecf96Smrg  # Remove any Libtool call
4575dfecf96Smrg  if test "$libtool" = yes; then
4585dfecf96Smrg    while test $1 != '--mode=compile'; do
4595dfecf96Smrg      shift
4605dfecf96Smrg    done
4615dfecf96Smrg    shift
4625dfecf96Smrg  fi
4635dfecf96Smrg  # X makedepend
4645dfecf96Smrg  shift
4655dfecf96Smrg  cleared=no
4665dfecf96Smrg  for arg in "$@"; do
4675dfecf96Smrg    case $cleared in
4685dfecf96Smrg    no)
4695dfecf96Smrg      set ""; shift
4705dfecf96Smrg      cleared=yes ;;
4715dfecf96Smrg    esac
4725dfecf96Smrg    case "$arg" in
4735dfecf96Smrg    -D*|-I*)
4745dfecf96Smrg      set fnord "$@" "$arg"; shift ;;
4755dfecf96Smrg    # Strip any option that makedepend may not understand.  Remove
4765dfecf96Smrg    # the object too, otherwise makedepend will parse it as a source file.
4775dfecf96Smrg    -*|$object)
4785dfecf96Smrg      ;;
4795dfecf96Smrg    *)
4805dfecf96Smrg      set fnord "$@" "$arg"; shift ;;
4815dfecf96Smrg    esac
4825dfecf96Smrg  done
4835dfecf96Smrg  obj_suffix="`echo $object | sed 's/^.*\././'`"
4845dfecf96Smrg  touch "$tmpdepfile"
4855dfecf96Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
4865dfecf96Smrg  rm -f "$depfile"
4875dfecf96Smrg  cat < "$tmpdepfile" > "$depfile"
4885dfecf96Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
4895dfecf96Smrg' | \
4905dfecf96Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
4915dfecf96Smrg## correctly.  Breaking it into two sed invocations is a workaround.
4925dfecf96Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
4935dfecf96Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
4945dfecf96Smrg  ;;
4955dfecf96Smrg
4965dfecf96Smrgcpp)
4975dfecf96Smrg  # Important note: in order to support this mode, a compiler *must*
4985dfecf96Smrg  # always write the preprocessed file to stdout.
4995dfecf96Smrg  "$@" || exit $?
5005dfecf96Smrg
5015dfecf96Smrg  # Remove the call to Libtool.
5025dfecf96Smrg  if test "$libtool" = yes; then
5035dfecf96Smrg    while test $1 != '--mode=compile'; do
5045dfecf96Smrg      shift
5055dfecf96Smrg    done
5065dfecf96Smrg    shift
5075dfecf96Smrg  fi
5085dfecf96Smrg
5095dfecf96Smrg  # Remove `-o $object'.
5105dfecf96Smrg  IFS=" "
5115dfecf96Smrg  for arg
5125dfecf96Smrg  do
5135dfecf96Smrg    case $arg in
5145dfecf96Smrg    -o)
5155dfecf96Smrg      shift
5165dfecf96Smrg      ;;
5175dfecf96Smrg    $object)
5185dfecf96Smrg      shift
5195dfecf96Smrg      ;;
5205dfecf96Smrg    *)
5215dfecf96Smrg      set fnord "$@" "$arg"
5225dfecf96Smrg      shift # fnord
5235dfecf96Smrg      shift # $arg
5245dfecf96Smrg      ;;
5255dfecf96Smrg    esac
5265dfecf96Smrg  done
5275dfecf96Smrg
5285dfecf96Smrg  "$@" -E |
5295dfecf96Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
5305dfecf96Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
5315dfecf96Smrg    sed '$ s: \\$::' > "$tmpdepfile"
5325dfecf96Smrg  rm -f "$depfile"
5335dfecf96Smrg  echo "$object : \\" > "$depfile"
5345dfecf96Smrg  cat < "$tmpdepfile" >> "$depfile"
5355dfecf96Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
5365dfecf96Smrg  rm -f "$tmpdepfile"
5375dfecf96Smrg  ;;
5385dfecf96Smrg
5395dfecf96Smrgmsvisualcpp)
5405dfecf96Smrg  # Important note: in order to support this mode, a compiler *must*
5415dfecf96Smrg  # always write the preprocessed file to stdout, regardless of -o,
5425dfecf96Smrg  # because we must use -o when running libtool.
5435dfecf96Smrg  "$@" || exit $?
5445dfecf96Smrg  IFS=" "
5455dfecf96Smrg  for arg
5465dfecf96Smrg  do
5475dfecf96Smrg    case "$arg" in
5485dfecf96Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
5495dfecf96Smrg	set fnord "$@"
5505dfecf96Smrg	shift
5515dfecf96Smrg	shift
5525dfecf96Smrg	;;
5535dfecf96Smrg    *)
5545dfecf96Smrg	set fnord "$@" "$arg"
5555dfecf96Smrg	shift
5565dfecf96Smrg	shift
5575dfecf96Smrg	;;
5585dfecf96Smrg    esac
5595dfecf96Smrg  done
5605dfecf96Smrg  "$@" -E |
5615dfecf96Smrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
5625dfecf96Smrg  rm -f "$depfile"
5635dfecf96Smrg  echo "$object : \\" > "$depfile"
5645dfecf96Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
5655dfecf96Smrg  echo "	" >> "$depfile"
5665dfecf96Smrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
5675dfecf96Smrg  rm -f "$tmpdepfile"
5685dfecf96Smrg  ;;
5695dfecf96Smrg
5705dfecf96Smrgnone)
5715dfecf96Smrg  exec "$@"
5725dfecf96Smrg  ;;
5735dfecf96Smrg
5745dfecf96Smrg*)
5755dfecf96Smrg  echo "Unknown depmode $depmode" 1>&2
5765dfecf96Smrg  exit 1
5775dfecf96Smrg  ;;
5785dfecf96Smrgesac
5795dfecf96Smrg
5805dfecf96Smrgexit 0
5815dfecf96Smrg
5825dfecf96Smrg# Local Variables:
5835dfecf96Smrg# mode: shell-script
5845dfecf96Smrg# sh-indentation: 2
5855dfecf96Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
5865dfecf96Smrg# time-stamp-start: "scriptversion="
5875dfecf96Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
5885dfecf96Smrg# time-stamp-end: "$"
5895dfecf96Smrg# End:
590