depcomp revision d7accfef
197e8a2e8Smrg#! /bin/sh
297e8a2e8Smrg# depcomp - compile a program generating dependencies as side-effects
3d7accfefSmrg
4d7accfefSmrgscriptversion=2009-04-28.21; # UTC
5d7accfefSmrg
6d7accfefSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
7d7accfefSmrg# Software Foundation, Inc.
897e8a2e8Smrg
997e8a2e8Smrg# This program is free software; you can redistribute it and/or modify
1097e8a2e8Smrg# it under the terms of the GNU General Public License as published by
1197e8a2e8Smrg# the Free Software Foundation; either version 2, or (at your option)
1297e8a2e8Smrg# any later version.
1397e8a2e8Smrg
1497e8a2e8Smrg# This program is distributed in the hope that it will be useful,
1597e8a2e8Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
1697e8a2e8Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1797e8a2e8Smrg# GNU General Public License for more details.
1897e8a2e8Smrg
1997e8a2e8Smrg# You should have received a copy of the GNU General Public License
20d7accfefSmrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
2197e8a2e8Smrg
2297e8a2e8Smrg# As a special exception to the GNU General Public License, if you
2397e8a2e8Smrg# distribute this file as part of a program that contains a
2497e8a2e8Smrg# configuration script generated by Autoconf, you may include it under
2597e8a2e8Smrg# the same distribution terms that you use for the rest of that program.
2697e8a2e8Smrg
2797e8a2e8Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
2897e8a2e8Smrg
29d7accfefSmrgcase $1 in
30d7accfefSmrg  '')
31d7accfefSmrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
32d7accfefSmrg     exit 1;
33d7accfefSmrg     ;;
34d7accfefSmrg  -h | --h*)
35d7accfefSmrg    cat <<\EOF
36d7accfefSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
37d7accfefSmrg
38d7accfefSmrgRun PROGRAMS ARGS to compile a file, generating dependencies
39d7accfefSmrgas side-effects.
40d7accfefSmrg
41d7accfefSmrgEnvironment variables:
42d7accfefSmrg  depmode     Dependency tracking mode.
43d7accfefSmrg  source      Source file read by `PROGRAMS ARGS'.
44d7accfefSmrg  object      Object file output by `PROGRAMS ARGS'.
45d7accfefSmrg  DEPDIR      directory where to store dependencies.
46d7accfefSmrg  depfile     Dependency file to output.
47d7accfefSmrg  tmpdepfile  Temporary file to use when outputing dependencies.
48d7accfefSmrg  libtool     Whether libtool is used (yes/no).
49d7accfefSmrg
50d7accfefSmrgReport bugs to <bug-automake@gnu.org>.
51d7accfefSmrgEOF
52d7accfefSmrg    exit $?
53d7accfefSmrg    ;;
54d7accfefSmrg  -v | --v*)
55d7accfefSmrg    echo "depcomp $scriptversion"
56d7accfefSmrg    exit $?
57d7accfefSmrg    ;;
58d7accfefSmrgesac
59d7accfefSmrg
6097e8a2e8Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
6197e8a2e8Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
6297e8a2e8Smrg  exit 1
6397e8a2e8Smrgfi
6497e8a2e8Smrg
65d7accfefSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
66d7accfefSmrgdepfile=${depfile-`echo "$object" |
67d7accfefSmrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
6897e8a2e8Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
6997e8a2e8Smrg
7097e8a2e8Smrgrm -f "$tmpdepfile"
7197e8a2e8Smrg
7297e8a2e8Smrg# Some modes work just like other modes, but use different flags.  We
7397e8a2e8Smrg# parameterize here, but still list the modes in the big case below,
7497e8a2e8Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
7597e8a2e8Smrg# here, because this file can only contain one case statement.
7697e8a2e8Smrgif test "$depmode" = hp; then
7797e8a2e8Smrg  # HP compiler uses -M and no extra arg.
7897e8a2e8Smrg  gccflag=-M
7997e8a2e8Smrg  depmode=gcc
8097e8a2e8Smrgfi
8197e8a2e8Smrg
8297e8a2e8Smrgif test "$depmode" = dashXmstdout; then
8397e8a2e8Smrg   # This is just like dashmstdout with a different argument.
8497e8a2e8Smrg   dashmflag=-xM
8597e8a2e8Smrg   depmode=dashmstdout
8697e8a2e8Smrgfi
8797e8a2e8Smrg
88d7accfefSmrgcygpath_u="cygpath -u -f -"
89d7accfefSmrgif test "$depmode" = msvcmsys; then
90d7accfefSmrg   # This is just like msvisualcpp but w/o cygpath translation.
91d7accfefSmrg   # Just convert the backslash-escaped backslashes to single forward
92d7accfefSmrg   # slashes to satisfy depend.m4
93d7accfefSmrg   cygpath_u="sed s,\\\\\\\\,/,g"
94d7accfefSmrg   depmode=msvisualcpp
95d7accfefSmrgfi
96d7accfefSmrg
9797e8a2e8Smrgcase "$depmode" in
9897e8a2e8Smrggcc3)
9997e8a2e8Smrg## gcc 3 implements dependency tracking that does exactly what
10097e8a2e8Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
10197e8a2e8Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
102d7accfefSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
103d7accfefSmrg## the command line argument order; so add the flags where they
104d7accfefSmrg## appear in depend2.am.  Note that the slowdown incurred here
105d7accfefSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
106d7accfefSmrg  for arg
107d7accfefSmrg  do
108d7accfefSmrg    case $arg in
109d7accfefSmrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
110d7accfefSmrg    *)  set fnord "$@" "$arg" ;;
111d7accfefSmrg    esac
112d7accfefSmrg    shift # fnord
113d7accfefSmrg    shift # $arg
114d7accfefSmrg  done
115d7accfefSmrg  "$@"
11697e8a2e8Smrg  stat=$?
11797e8a2e8Smrg  if test $stat -eq 0; then :
11897e8a2e8Smrg  else
11997e8a2e8Smrg    rm -f "$tmpdepfile"
12097e8a2e8Smrg    exit $stat
12197e8a2e8Smrg  fi
12297e8a2e8Smrg  mv "$tmpdepfile" "$depfile"
12397e8a2e8Smrg  ;;
12497e8a2e8Smrg
12597e8a2e8Smrggcc)
12697e8a2e8Smrg## There are various ways to get dependency output from gcc.  Here's
12797e8a2e8Smrg## why we pick this rather obscure method:
12897e8a2e8Smrg## - Don't want to use -MD because we'd like the dependencies to end
12997e8a2e8Smrg##   up in a subdir.  Having to rename by hand is ugly.
13097e8a2e8Smrg##   (We might end up doing this anyway to support other compilers.)
13197e8a2e8Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
13297e8a2e8Smrg##   -MM, not -M (despite what the docs say).
13397e8a2e8Smrg## - Using -M directly means running the compiler twice (even worse
13497e8a2e8Smrg##   than renaming).
13597e8a2e8Smrg  if test -z "$gccflag"; then
13697e8a2e8Smrg    gccflag=-MD,
13797e8a2e8Smrg  fi
13897e8a2e8Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
13997e8a2e8Smrg  stat=$?
14097e8a2e8Smrg  if test $stat -eq 0; then :
14197e8a2e8Smrg  else
14297e8a2e8Smrg    rm -f "$tmpdepfile"
14397e8a2e8Smrg    exit $stat
14497e8a2e8Smrg  fi
14597e8a2e8Smrg  rm -f "$depfile"
14697e8a2e8Smrg  echo "$object : \\" > "$depfile"
14797e8a2e8Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
14897e8a2e8Smrg## The second -e expression handles DOS-style file names with drive letters.
14997e8a2e8Smrg  sed -e 's/^[^:]*: / /' \
15097e8a2e8Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
15197e8a2e8Smrg## This next piece of magic avoids the `deleted header file' problem.
15297e8a2e8Smrg## The problem is that when a header file which appears in a .P file
15397e8a2e8Smrg## is deleted, the dependency causes make to die (because there is
15497e8a2e8Smrg## typically no way to rebuild the header).  We avoid this by adding
15597e8a2e8Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
15697e8a2e8Smrg## this for us directly.
15797e8a2e8Smrg  tr ' ' '
15897e8a2e8Smrg' < "$tmpdepfile" |
15997e8a2e8Smrg## Some versions of gcc put a space before the `:'.  On the theory
16097e8a2e8Smrg## that the space means something, we add a space to the output as
16197e8a2e8Smrg## well.
16297e8a2e8Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
16397e8a2e8Smrg## correctly.  Breaking it into two sed invocations is a workaround.
16497e8a2e8Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
16597e8a2e8Smrg  rm -f "$tmpdepfile"
16697e8a2e8Smrg  ;;
16797e8a2e8Smrg
16897e8a2e8Smrghp)
16997e8a2e8Smrg  # This case exists only to let depend.m4 do its work.  It works by
17097e8a2e8Smrg  # looking at the text of this script.  This case will never be run,
17197e8a2e8Smrg  # since it is checked for above.
17297e8a2e8Smrg  exit 1
17397e8a2e8Smrg  ;;
17497e8a2e8Smrg
17597e8a2e8Smrgsgi)
17697e8a2e8Smrg  if test "$libtool" = yes; then
17797e8a2e8Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
17897e8a2e8Smrg  else
17997e8a2e8Smrg    "$@" -MDupdate "$tmpdepfile"
18097e8a2e8Smrg  fi
18197e8a2e8Smrg  stat=$?
18297e8a2e8Smrg  if test $stat -eq 0; then :
18397e8a2e8Smrg  else
18497e8a2e8Smrg    rm -f "$tmpdepfile"
18597e8a2e8Smrg    exit $stat
18697e8a2e8Smrg  fi
18797e8a2e8Smrg  rm -f "$depfile"
18897e8a2e8Smrg
18997e8a2e8Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
19097e8a2e8Smrg    echo "$object : \\" > "$depfile"
19197e8a2e8Smrg
19297e8a2e8Smrg    # Clip off the initial element (the dependent).  Don't try to be
19397e8a2e8Smrg    # clever and replace this with sed code, as IRIX sed won't handle
19497e8a2e8Smrg    # lines with more than a fixed number of characters (4096 in
19597e8a2e8Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
19697e8a2e8Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
19797e8a2e8Smrg    # dependency line.
19897e8a2e8Smrg    tr ' ' '
19997e8a2e8Smrg' < "$tmpdepfile" \
20097e8a2e8Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
20197e8a2e8Smrg    tr '
202d7accfefSmrg' ' ' >> "$depfile"
203d7accfefSmrg    echo >> "$depfile"
20497e8a2e8Smrg
20597e8a2e8Smrg    # The second pass generates a dummy entry for each header file.
20697e8a2e8Smrg    tr ' ' '
20797e8a2e8Smrg' < "$tmpdepfile" \
20897e8a2e8Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
209d7accfefSmrg   >> "$depfile"
21097e8a2e8Smrg  else
21197e8a2e8Smrg    # The sourcefile does not contain any dependencies, so just
21297e8a2e8Smrg    # store a dummy comment line, to avoid errors with the Makefile
21397e8a2e8Smrg    # "include basename.Plo" scheme.
21497e8a2e8Smrg    echo "#dummy" > "$depfile"
21597e8a2e8Smrg  fi
21697e8a2e8Smrg  rm -f "$tmpdepfile"
21797e8a2e8Smrg  ;;
21897e8a2e8Smrg
21997e8a2e8Smrgaix)
22097e8a2e8Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
22197e8a2e8Smrg  # in a .u file.  In older versions, this file always lives in the
22297e8a2e8Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
22397e8a2e8Smrg  # start of each line; $object doesn't have directory information.
22497e8a2e8Smrg  # Version 6 uses the directory in both cases.
225d7accfefSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
226d7accfefSmrg  test "x$dir" = "x$object" && dir=
227d7accfefSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
22897e8a2e8Smrg  if test "$libtool" = yes; then
229d7accfefSmrg    tmpdepfile1=$dir$base.u
230d7accfefSmrg    tmpdepfile2=$base.u
231d7accfefSmrg    tmpdepfile3=$dir.libs/$base.u
23297e8a2e8Smrg    "$@" -Wc,-M
23397e8a2e8Smrg  else
234d7accfefSmrg    tmpdepfile1=$dir$base.u
235d7accfefSmrg    tmpdepfile2=$dir$base.u
236d7accfefSmrg    tmpdepfile3=$dir$base.u
23797e8a2e8Smrg    "$@" -M
23897e8a2e8Smrg  fi
23997e8a2e8Smrg  stat=$?
24097e8a2e8Smrg
24197e8a2e8Smrg  if test $stat -eq 0; then :
24297e8a2e8Smrg  else
243d7accfefSmrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
24497e8a2e8Smrg    exit $stat
24597e8a2e8Smrg  fi
24697e8a2e8Smrg
247d7accfefSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
248d7accfefSmrg  do
249d7accfefSmrg    test -f "$tmpdepfile" && break
250d7accfefSmrg  done
25197e8a2e8Smrg  if test -f "$tmpdepfile"; then
25297e8a2e8Smrg    # Each line is of the form `foo.o: dependent.h'.
25397e8a2e8Smrg    # Do two passes, one to just change these to
25497e8a2e8Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
255d7accfefSmrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
256d7accfefSmrg    # That's a tab and a space in the [].
257d7accfefSmrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
25897e8a2e8Smrg  else
25997e8a2e8Smrg    # The sourcefile does not contain any dependencies, so just
26097e8a2e8Smrg    # store a dummy comment line, to avoid errors with the Makefile
26197e8a2e8Smrg    # "include basename.Plo" scheme.
26297e8a2e8Smrg    echo "#dummy" > "$depfile"
26397e8a2e8Smrg  fi
26497e8a2e8Smrg  rm -f "$tmpdepfile"
26597e8a2e8Smrg  ;;
26697e8a2e8Smrg
26797e8a2e8Smrgicc)
26897e8a2e8Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
26997e8a2e8Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
27097e8a2e8Smrg  # ICC 7.0 will fill foo.d with something like
27197e8a2e8Smrg  #    foo.o: sub/foo.c
27297e8a2e8Smrg  #    foo.o: sub/foo.h
27397e8a2e8Smrg  # which is wrong.  We want:
27497e8a2e8Smrg  #    sub/foo.o: sub/foo.c
27597e8a2e8Smrg  #    sub/foo.o: sub/foo.h
27697e8a2e8Smrg  #    sub/foo.c:
27797e8a2e8Smrg  #    sub/foo.h:
27897e8a2e8Smrg  # ICC 7.1 will output
27997e8a2e8Smrg  #    foo.o: sub/foo.c sub/foo.h
28097e8a2e8Smrg  # and will wrap long lines using \ :
28197e8a2e8Smrg  #    foo.o: sub/foo.c ... \
28297e8a2e8Smrg  #     sub/foo.h ... \
28397e8a2e8Smrg  #     ...
28497e8a2e8Smrg
28597e8a2e8Smrg  "$@" -MD -MF "$tmpdepfile"
28697e8a2e8Smrg  stat=$?
28797e8a2e8Smrg  if test $stat -eq 0; then :
28897e8a2e8Smrg  else
28997e8a2e8Smrg    rm -f "$tmpdepfile"
29097e8a2e8Smrg    exit $stat
29197e8a2e8Smrg  fi
29297e8a2e8Smrg  rm -f "$depfile"
29397e8a2e8Smrg  # Each line is of the form `foo.o: dependent.h',
29497e8a2e8Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
29597e8a2e8Smrg  # Do two passes, one to just change these to
29697e8a2e8Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
29797e8a2e8Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
29897e8a2e8Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
29997e8a2e8Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
30097e8a2e8Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
30197e8a2e8Smrg    sed -e 's/$/ :/' >> "$depfile"
30297e8a2e8Smrg  rm -f "$tmpdepfile"
30397e8a2e8Smrg  ;;
30497e8a2e8Smrg
305d7accfefSmrghp2)
306d7accfefSmrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
307d7accfefSmrg  # compilers, which have integrated preprocessors.  The correct option
308d7accfefSmrg  # to use with these is +Maked; it writes dependencies to a file named
309d7accfefSmrg  # 'foo.d', which lands next to the object file, wherever that
310d7accfefSmrg  # happens to be.
311d7accfefSmrg  # Much of this is similar to the tru64 case; see comments there.
312d7accfefSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
313d7accfefSmrg  test "x$dir" = "x$object" && dir=
314d7accfefSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
315d7accfefSmrg  if test "$libtool" = yes; then
316d7accfefSmrg    tmpdepfile1=$dir$base.d
317d7accfefSmrg    tmpdepfile2=$dir.libs/$base.d
318d7accfefSmrg    "$@" -Wc,+Maked
319d7accfefSmrg  else
320d7accfefSmrg    tmpdepfile1=$dir$base.d
321d7accfefSmrg    tmpdepfile2=$dir$base.d
322d7accfefSmrg    "$@" +Maked
323d7accfefSmrg  fi
324d7accfefSmrg  stat=$?
325d7accfefSmrg  if test $stat -eq 0; then :
326d7accfefSmrg  else
327d7accfefSmrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
328d7accfefSmrg     exit $stat
329d7accfefSmrg  fi
330d7accfefSmrg
331d7accfefSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
332d7accfefSmrg  do
333d7accfefSmrg    test -f "$tmpdepfile" && break
334d7accfefSmrg  done
335d7accfefSmrg  if test -f "$tmpdepfile"; then
336d7accfefSmrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
337d7accfefSmrg    # Add `dependent.h:' lines.
338d7accfefSmrg    sed -ne '2,${
339d7accfefSmrg	       s/^ *//
340d7accfefSmrg	       s/ \\*$//
341d7accfefSmrg	       s/$/:/
342d7accfefSmrg	       p
343d7accfefSmrg	     }' "$tmpdepfile" >> "$depfile"
344d7accfefSmrg  else
345d7accfefSmrg    echo "#dummy" > "$depfile"
346d7accfefSmrg  fi
347d7accfefSmrg  rm -f "$tmpdepfile" "$tmpdepfile2"
348d7accfefSmrg  ;;
349d7accfefSmrg
35097e8a2e8Smrgtru64)
35197e8a2e8Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
35297e8a2e8Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
35397e8a2e8Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
35497e8a2e8Smrg   # dependencies in `foo.d' instead, so we check for that too.
35597e8a2e8Smrg   # Subdirectories are respected.
35697e8a2e8Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
35797e8a2e8Smrg   test "x$dir" = "x$object" && dir=
35897e8a2e8Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
35997e8a2e8Smrg
36097e8a2e8Smrg   if test "$libtool" = yes; then
361d7accfefSmrg      # With Tru64 cc, shared objects can also be used to make a
362d7accfefSmrg      # static library.  This mechanism is used in libtool 1.4 series to
363d7accfefSmrg      # handle both shared and static libraries in a single compilation.
364d7accfefSmrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
365d7accfefSmrg      #
366d7accfefSmrg      # With libtool 1.5 this exception was removed, and libtool now
367d7accfefSmrg      # generates 2 separate objects for the 2 libraries.  These two
368d7accfefSmrg      # compilations output dependencies in $dir.libs/$base.o.d and
369d7accfefSmrg      # in $dir$base.o.d.  We have to check for both files, because
370d7accfefSmrg      # one of the two compilations can be disabled.  We should prefer
371d7accfefSmrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
372d7accfefSmrg      # automatically cleaned when .libs/ is deleted, while ignoring
373d7accfefSmrg      # the former would cause a distcleancheck panic.
374d7accfefSmrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
375d7accfefSmrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
376d7accfefSmrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
377d7accfefSmrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
37897e8a2e8Smrg      "$@" -Wc,-MD
37997e8a2e8Smrg   else
380d7accfefSmrg      tmpdepfile1=$dir$base.o.d
381d7accfefSmrg      tmpdepfile2=$dir$base.d
382d7accfefSmrg      tmpdepfile3=$dir$base.d
383d7accfefSmrg      tmpdepfile4=$dir$base.d
38497e8a2e8Smrg      "$@" -MD
38597e8a2e8Smrg   fi
38697e8a2e8Smrg
38797e8a2e8Smrg   stat=$?
38897e8a2e8Smrg   if test $stat -eq 0; then :
38997e8a2e8Smrg   else
390d7accfefSmrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
39197e8a2e8Smrg      exit $stat
39297e8a2e8Smrg   fi
39397e8a2e8Smrg
394d7accfefSmrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
395d7accfefSmrg   do
396d7accfefSmrg     test -f "$tmpdepfile" && break
397d7accfefSmrg   done
39897e8a2e8Smrg   if test -f "$tmpdepfile"; then
39997e8a2e8Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
40097e8a2e8Smrg      # That's a tab and a space in the [].
40197e8a2e8Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
40297e8a2e8Smrg   else
40397e8a2e8Smrg      echo "#dummy" > "$depfile"
40497e8a2e8Smrg   fi
40597e8a2e8Smrg   rm -f "$tmpdepfile"
40697e8a2e8Smrg   ;;
40797e8a2e8Smrg
40897e8a2e8Smrg#nosideeffect)
40997e8a2e8Smrg  # This comment above is used by automake to tell side-effect
41097e8a2e8Smrg  # dependency tracking mechanisms from slower ones.
41197e8a2e8Smrg
41297e8a2e8Smrgdashmstdout)
41397e8a2e8Smrg  # Important note: in order to support this mode, a compiler *must*
41497e8a2e8Smrg  # always write the preprocessed file to stdout, regardless of -o.
41597e8a2e8Smrg  "$@" || exit $?
41697e8a2e8Smrg
41797e8a2e8Smrg  # Remove the call to Libtool.
41897e8a2e8Smrg  if test "$libtool" = yes; then
419d7accfefSmrg    while test "X$1" != 'X--mode=compile'; do
42097e8a2e8Smrg      shift
42197e8a2e8Smrg    done
42297e8a2e8Smrg    shift
42397e8a2e8Smrg  fi
42497e8a2e8Smrg
42597e8a2e8Smrg  # Remove `-o $object'.
42697e8a2e8Smrg  IFS=" "
42797e8a2e8Smrg  for arg
42897e8a2e8Smrg  do
42997e8a2e8Smrg    case $arg in
43097e8a2e8Smrg    -o)
43197e8a2e8Smrg      shift
43297e8a2e8Smrg      ;;
43397e8a2e8Smrg    $object)
43497e8a2e8Smrg      shift
43597e8a2e8Smrg      ;;
43697e8a2e8Smrg    *)
43797e8a2e8Smrg      set fnord "$@" "$arg"
43897e8a2e8Smrg      shift # fnord
43997e8a2e8Smrg      shift # $arg
44097e8a2e8Smrg      ;;
44197e8a2e8Smrg    esac
44297e8a2e8Smrg  done
44397e8a2e8Smrg
44497e8a2e8Smrg  test -z "$dashmflag" && dashmflag=-M
44597e8a2e8Smrg  # Require at least two characters before searching for `:'
44697e8a2e8Smrg  # in the target name.  This is to cope with DOS-style filenames:
44797e8a2e8Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
44897e8a2e8Smrg  "$@" $dashmflag |
44997e8a2e8Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
45097e8a2e8Smrg  rm -f "$depfile"
45197e8a2e8Smrg  cat < "$tmpdepfile" > "$depfile"
45297e8a2e8Smrg  tr ' ' '
45397e8a2e8Smrg' < "$tmpdepfile" | \
45497e8a2e8Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
45597e8a2e8Smrg## correctly.  Breaking it into two sed invocations is a workaround.
45697e8a2e8Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
45797e8a2e8Smrg  rm -f "$tmpdepfile"
45897e8a2e8Smrg  ;;
45997e8a2e8Smrg
46097e8a2e8SmrgdashXmstdout)
46197e8a2e8Smrg  # This case only exists to satisfy depend.m4.  It is never actually
46297e8a2e8Smrg  # run, as this mode is specially recognized in the preamble.
46397e8a2e8Smrg  exit 1
46497e8a2e8Smrg  ;;
46597e8a2e8Smrg
46697e8a2e8Smrgmakedepend)
46797e8a2e8Smrg  "$@" || exit $?
46897e8a2e8Smrg  # Remove any Libtool call
46997e8a2e8Smrg  if test "$libtool" = yes; then
470d7accfefSmrg    while test "X$1" != 'X--mode=compile'; do
47197e8a2e8Smrg      shift
47297e8a2e8Smrg    done
47397e8a2e8Smrg    shift
47497e8a2e8Smrg  fi
47597e8a2e8Smrg  # X makedepend
47697e8a2e8Smrg  shift
477d7accfefSmrg  cleared=no eat=no
478d7accfefSmrg  for arg
479d7accfefSmrg  do
48097e8a2e8Smrg    case $cleared in
48197e8a2e8Smrg    no)
48297e8a2e8Smrg      set ""; shift
48397e8a2e8Smrg      cleared=yes ;;
48497e8a2e8Smrg    esac
485d7accfefSmrg    if test $eat = yes; then
486d7accfefSmrg      eat=no
487d7accfefSmrg      continue
488d7accfefSmrg    fi
48997e8a2e8Smrg    case "$arg" in
49097e8a2e8Smrg    -D*|-I*)
49197e8a2e8Smrg      set fnord "$@" "$arg"; shift ;;
49297e8a2e8Smrg    # Strip any option that makedepend may not understand.  Remove
49397e8a2e8Smrg    # the object too, otherwise makedepend will parse it as a source file.
494d7accfefSmrg    -arch)
495d7accfefSmrg      eat=yes ;;
49697e8a2e8Smrg    -*|$object)
49797e8a2e8Smrg      ;;
49897e8a2e8Smrg    *)
49997e8a2e8Smrg      set fnord "$@" "$arg"; shift ;;
50097e8a2e8Smrg    esac
50197e8a2e8Smrg  done
502d7accfefSmrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
50397e8a2e8Smrg  touch "$tmpdepfile"
50497e8a2e8Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
50597e8a2e8Smrg  rm -f "$depfile"
50697e8a2e8Smrg  cat < "$tmpdepfile" > "$depfile"
50797e8a2e8Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
50897e8a2e8Smrg' | \
50997e8a2e8Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
51097e8a2e8Smrg## correctly.  Breaking it into two sed invocations is a workaround.
51197e8a2e8Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
51297e8a2e8Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
51397e8a2e8Smrg  ;;
51497e8a2e8Smrg
51597e8a2e8Smrgcpp)
51697e8a2e8Smrg  # Important note: in order to support this mode, a compiler *must*
51797e8a2e8Smrg  # always write the preprocessed file to stdout.
51897e8a2e8Smrg  "$@" || exit $?
51997e8a2e8Smrg
52097e8a2e8Smrg  # Remove the call to Libtool.
52197e8a2e8Smrg  if test "$libtool" = yes; then
522d7accfefSmrg    while test "X$1" != 'X--mode=compile'; do
52397e8a2e8Smrg      shift
52497e8a2e8Smrg    done
52597e8a2e8Smrg    shift
52697e8a2e8Smrg  fi
52797e8a2e8Smrg
52897e8a2e8Smrg  # Remove `-o $object'.
52997e8a2e8Smrg  IFS=" "
53097e8a2e8Smrg  for arg
53197e8a2e8Smrg  do
53297e8a2e8Smrg    case $arg in
53397e8a2e8Smrg    -o)
53497e8a2e8Smrg      shift
53597e8a2e8Smrg      ;;
53697e8a2e8Smrg    $object)
53797e8a2e8Smrg      shift
53897e8a2e8Smrg      ;;
53997e8a2e8Smrg    *)
54097e8a2e8Smrg      set fnord "$@" "$arg"
54197e8a2e8Smrg      shift # fnord
54297e8a2e8Smrg      shift # $arg
54397e8a2e8Smrg      ;;
54497e8a2e8Smrg    esac
54597e8a2e8Smrg  done
54697e8a2e8Smrg
54797e8a2e8Smrg  "$@" -E |
548d7accfefSmrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
549d7accfefSmrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
55097e8a2e8Smrg    sed '$ s: \\$::' > "$tmpdepfile"
55197e8a2e8Smrg  rm -f "$depfile"
55297e8a2e8Smrg  echo "$object : \\" > "$depfile"
55397e8a2e8Smrg  cat < "$tmpdepfile" >> "$depfile"
55497e8a2e8Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
55597e8a2e8Smrg  rm -f "$tmpdepfile"
55697e8a2e8Smrg  ;;
55797e8a2e8Smrg
55897e8a2e8Smrgmsvisualcpp)
55997e8a2e8Smrg  # Important note: in order to support this mode, a compiler *must*
560d7accfefSmrg  # always write the preprocessed file to stdout.
56197e8a2e8Smrg  "$@" || exit $?
562d7accfefSmrg
563d7accfefSmrg  # Remove the call to Libtool.
564d7accfefSmrg  if test "$libtool" = yes; then
565d7accfefSmrg    while test "X$1" != 'X--mode=compile'; do
566d7accfefSmrg      shift
567d7accfefSmrg    done
568d7accfefSmrg    shift
569d7accfefSmrg  fi
570d7accfefSmrg
57197e8a2e8Smrg  IFS=" "
57297e8a2e8Smrg  for arg
57397e8a2e8Smrg  do
57497e8a2e8Smrg    case "$arg" in
575d7accfefSmrg    -o)
576d7accfefSmrg      shift
577d7accfefSmrg      ;;
578d7accfefSmrg    $object)
579d7accfefSmrg      shift
580d7accfefSmrg      ;;
58197e8a2e8Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
58297e8a2e8Smrg	set fnord "$@"
58397e8a2e8Smrg	shift
58497e8a2e8Smrg	shift
58597e8a2e8Smrg	;;
58697e8a2e8Smrg    *)
58797e8a2e8Smrg	set fnord "$@" "$arg"
58897e8a2e8Smrg	shift
58997e8a2e8Smrg	shift
59097e8a2e8Smrg	;;
59197e8a2e8Smrg    esac
59297e8a2e8Smrg  done
593d7accfefSmrg  "$@" -E 2>/dev/null |
594d7accfefSmrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
59597e8a2e8Smrg  rm -f "$depfile"
59697e8a2e8Smrg  echo "$object : \\" > "$depfile"
597d7accfefSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
59897e8a2e8Smrg  echo "	" >> "$depfile"
599d7accfefSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
60097e8a2e8Smrg  rm -f "$tmpdepfile"
60197e8a2e8Smrg  ;;
60297e8a2e8Smrg
603d7accfefSmrgmsvcmsys)
604d7accfefSmrg  # This case exists only to let depend.m4 do its work.  It works by
605d7accfefSmrg  # looking at the text of this script.  This case will never be run,
606d7accfefSmrg  # since it is checked for above.
607d7accfefSmrg  exit 1
608d7accfefSmrg  ;;
609d7accfefSmrg
61097e8a2e8Smrgnone)
61197e8a2e8Smrg  exec "$@"
61297e8a2e8Smrg  ;;
61397e8a2e8Smrg
61497e8a2e8Smrg*)
61597e8a2e8Smrg  echo "Unknown depmode $depmode" 1>&2
61697e8a2e8Smrg  exit 1
61797e8a2e8Smrg  ;;
61897e8a2e8Smrgesac
61997e8a2e8Smrg
62097e8a2e8Smrgexit 0
621d7accfefSmrg
622d7accfefSmrg# Local Variables:
623d7accfefSmrg# mode: shell-script
624d7accfefSmrg# sh-indentation: 2
625d7accfefSmrg# eval: (add-hook 'write-file-hooks 'time-stamp)
626d7accfefSmrg# time-stamp-start: "scriptversion="
627d7accfefSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
628d7accfefSmrg# time-stamp-time-zone: "UTC"
629d7accfefSmrg# time-stamp-end: "; # UTC"
630d7accfefSmrg# End:
631