depcomp revision 4f6cd06f
1c35d236eSmrg#! /bin/sh
2c35d236eSmrg# depcomp - compile a program generating dependencies as side-effects
3c35d236eSmrg
44f6cd06fSmrgscriptversion=2006-10-15.18
5c35d236eSmrg
64f6cd06fSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software
74f6cd06fSmrg# Foundation, Inc.
8c35d236eSmrg
9c35d236eSmrg# This program is free software; you can redistribute it and/or modify
10c35d236eSmrg# it under the terms of the GNU General Public License as published by
11c35d236eSmrg# the Free Software Foundation; either version 2, or (at your option)
12c35d236eSmrg# any later version.
13c35d236eSmrg
14c35d236eSmrg# This program is distributed in the hope that it will be useful,
15c35d236eSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
16c35d236eSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17c35d236eSmrg# GNU General Public License for more details.
18c35d236eSmrg
19c35d236eSmrg# You should have received a copy of the GNU General Public License
20c35d236eSmrg# along with this program; if not, write to the Free Software
21c35d236eSmrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22c35d236eSmrg# 02110-1301, USA.
23c35d236eSmrg
24c35d236eSmrg# As a special exception to the GNU General Public License, if you
25c35d236eSmrg# distribute this file as part of a program that contains a
26c35d236eSmrg# configuration script generated by Autoconf, you may include it under
27c35d236eSmrg# the same distribution terms that you use for the rest of that program.
28c35d236eSmrg
29c35d236eSmrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
30c35d236eSmrg
31c35d236eSmrgcase $1 in
32c35d236eSmrg  '')
33c35d236eSmrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
34c35d236eSmrg     exit 1;
35c35d236eSmrg     ;;
36c35d236eSmrg  -h | --h*)
37c35d236eSmrg    cat <<\EOF
38c35d236eSmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
39c35d236eSmrg
40c35d236eSmrgRun PROGRAMS ARGS to compile a file, generating dependencies
41c35d236eSmrgas side-effects.
42c35d236eSmrg
43c35d236eSmrgEnvironment variables:
44c35d236eSmrg  depmode     Dependency tracking mode.
45c35d236eSmrg  source      Source file read by `PROGRAMS ARGS'.
46c35d236eSmrg  object      Object file output by `PROGRAMS ARGS'.
47c35d236eSmrg  DEPDIR      directory where to store dependencies.
48c35d236eSmrg  depfile     Dependency file to output.
49c35d236eSmrg  tmpdepfile  Temporary file to use when outputing dependencies.
50c35d236eSmrg  libtool     Whether libtool is used (yes/no).
51c35d236eSmrg
52c35d236eSmrgReport bugs to <bug-automake@gnu.org>.
53c35d236eSmrgEOF
54c35d236eSmrg    exit $?
55c35d236eSmrg    ;;
56c35d236eSmrg  -v | --v*)
57c35d236eSmrg    echo "depcomp $scriptversion"
58c35d236eSmrg    exit $?
59c35d236eSmrg    ;;
60c35d236eSmrgesac
61c35d236eSmrg
62c35d236eSmrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
63c35d236eSmrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
64c35d236eSmrg  exit 1
65c35d236eSmrgfi
66c35d236eSmrg
67c35d236eSmrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
68c35d236eSmrgdepfile=${depfile-`echo "$object" |
69c35d236eSmrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
70c35d236eSmrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
71c35d236eSmrg
72c35d236eSmrgrm -f "$tmpdepfile"
73c35d236eSmrg
74c35d236eSmrg# Some modes work just like other modes, but use different flags.  We
75c35d236eSmrg# parameterize here, but still list the modes in the big case below,
76c35d236eSmrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
77c35d236eSmrg# here, because this file can only contain one case statement.
78c35d236eSmrgif test "$depmode" = hp; then
79c35d236eSmrg  # HP compiler uses -M and no extra arg.
80c35d236eSmrg  gccflag=-M
81c35d236eSmrg  depmode=gcc
82c35d236eSmrgfi
83c35d236eSmrg
84c35d236eSmrgif test "$depmode" = dashXmstdout; then
85c35d236eSmrg   # This is just like dashmstdout with a different argument.
86c35d236eSmrg   dashmflag=-xM
87c35d236eSmrg   depmode=dashmstdout
88c35d236eSmrgfi
89c35d236eSmrg
90c35d236eSmrgcase "$depmode" in
91c35d236eSmrggcc3)
92c35d236eSmrg## gcc 3 implements dependency tracking that does exactly what
93c35d236eSmrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
94c35d236eSmrg## it if -MD -MP comes after the -MF stuff.  Hmm.
954f6cd06fSmrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
964f6cd06fSmrg## the command line argument order; so add the flags where they
974f6cd06fSmrg## appear in depend2.am.  Note that the slowdown incurred here
984f6cd06fSmrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
994f6cd06fSmrg  for arg
1004f6cd06fSmrg  do
1014f6cd06fSmrg    case $arg in
1024f6cd06fSmrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
1034f6cd06fSmrg    *)  set fnord "$@" "$arg" ;;
1044f6cd06fSmrg    esac
1054f6cd06fSmrg    shift # fnord
1064f6cd06fSmrg    shift # $arg
1074f6cd06fSmrg  done
1084f6cd06fSmrg  "$@"
109c35d236eSmrg  stat=$?
110c35d236eSmrg  if test $stat -eq 0; then :
111c35d236eSmrg  else
112c35d236eSmrg    rm -f "$tmpdepfile"
113c35d236eSmrg    exit $stat
114c35d236eSmrg  fi
115c35d236eSmrg  mv "$tmpdepfile" "$depfile"
116c35d236eSmrg  ;;
117c35d236eSmrg
118c35d236eSmrggcc)
119c35d236eSmrg## There are various ways to get dependency output from gcc.  Here's
120c35d236eSmrg## why we pick this rather obscure method:
121c35d236eSmrg## - Don't want to use -MD because we'd like the dependencies to end
122c35d236eSmrg##   up in a subdir.  Having to rename by hand is ugly.
123c35d236eSmrg##   (We might end up doing this anyway to support other compilers.)
124c35d236eSmrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
125c35d236eSmrg##   -MM, not -M (despite what the docs say).
126c35d236eSmrg## - Using -M directly means running the compiler twice (even worse
127c35d236eSmrg##   than renaming).
128c35d236eSmrg  if test -z "$gccflag"; then
129c35d236eSmrg    gccflag=-MD,
130c35d236eSmrg  fi
131c35d236eSmrg  "$@" -Wp,"$gccflag$tmpdepfile"
132c35d236eSmrg  stat=$?
133c35d236eSmrg  if test $stat -eq 0; then :
134c35d236eSmrg  else
135c35d236eSmrg    rm -f "$tmpdepfile"
136c35d236eSmrg    exit $stat
137c35d236eSmrg  fi
138c35d236eSmrg  rm -f "$depfile"
139c35d236eSmrg  echo "$object : \\" > "$depfile"
140c35d236eSmrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
141c35d236eSmrg## The second -e expression handles DOS-style file names with drive letters.
142c35d236eSmrg  sed -e 's/^[^:]*: / /' \
143c35d236eSmrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
144c35d236eSmrg## This next piece of magic avoids the `deleted header file' problem.
145c35d236eSmrg## The problem is that when a header file which appears in a .P file
146c35d236eSmrg## is deleted, the dependency causes make to die (because there is
147c35d236eSmrg## typically no way to rebuild the header).  We avoid this by adding
148c35d236eSmrg## dummy dependencies for each header file.  Too bad gcc doesn't do
149c35d236eSmrg## this for us directly.
150c35d236eSmrg  tr ' ' '
151c35d236eSmrg' < "$tmpdepfile" |
152c35d236eSmrg## Some versions of gcc put a space before the `:'.  On the theory
153c35d236eSmrg## that the space means something, we add a space to the output as
154c35d236eSmrg## well.
155c35d236eSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
156c35d236eSmrg## correctly.  Breaking it into two sed invocations is a workaround.
157c35d236eSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
158c35d236eSmrg  rm -f "$tmpdepfile"
159c35d236eSmrg  ;;
160c35d236eSmrg
161c35d236eSmrghp)
162c35d236eSmrg  # This case exists only to let depend.m4 do its work.  It works by
163c35d236eSmrg  # looking at the text of this script.  This case will never be run,
164c35d236eSmrg  # since it is checked for above.
165c35d236eSmrg  exit 1
166c35d236eSmrg  ;;
167c35d236eSmrg
168c35d236eSmrgsgi)
169c35d236eSmrg  if test "$libtool" = yes; then
170c35d236eSmrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
171c35d236eSmrg  else
172c35d236eSmrg    "$@" -MDupdate "$tmpdepfile"
173c35d236eSmrg  fi
174c35d236eSmrg  stat=$?
175c35d236eSmrg  if test $stat -eq 0; then :
176c35d236eSmrg  else
177c35d236eSmrg    rm -f "$tmpdepfile"
178c35d236eSmrg    exit $stat
179c35d236eSmrg  fi
180c35d236eSmrg  rm -f "$depfile"
181c35d236eSmrg
182c35d236eSmrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
183c35d236eSmrg    echo "$object : \\" > "$depfile"
184c35d236eSmrg
185c35d236eSmrg    # Clip off the initial element (the dependent).  Don't try to be
186c35d236eSmrg    # clever and replace this with sed code, as IRIX sed won't handle
187c35d236eSmrg    # lines with more than a fixed number of characters (4096 in
188c35d236eSmrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
189c35d236eSmrg    # the IRIX cc adds comments like `#:fec' to the end of the
190c35d236eSmrg    # dependency line.
191c35d236eSmrg    tr ' ' '
192c35d236eSmrg' < "$tmpdepfile" \
193c35d236eSmrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
194c35d236eSmrg    tr '
195c35d236eSmrg' ' ' >> $depfile
196c35d236eSmrg    echo >> $depfile
197c35d236eSmrg
198c35d236eSmrg    # The second pass generates a dummy entry for each header file.
199c35d236eSmrg    tr ' ' '
200c35d236eSmrg' < "$tmpdepfile" \
201c35d236eSmrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
202c35d236eSmrg   >> $depfile
203c35d236eSmrg  else
204c35d236eSmrg    # The sourcefile does not contain any dependencies, so just
205c35d236eSmrg    # store a dummy comment line, to avoid errors with the Makefile
206c35d236eSmrg    # "include basename.Plo" scheme.
207c35d236eSmrg    echo "#dummy" > "$depfile"
208c35d236eSmrg  fi
209c35d236eSmrg  rm -f "$tmpdepfile"
210c35d236eSmrg  ;;
211c35d236eSmrg
212c35d236eSmrgaix)
213c35d236eSmrg  # The C for AIX Compiler uses -M and outputs the dependencies
214c35d236eSmrg  # in a .u file.  In older versions, this file always lives in the
215c35d236eSmrg  # current directory.  Also, the AIX compiler puts `$object:' at the
216c35d236eSmrg  # start of each line; $object doesn't have directory information.
217c35d236eSmrg  # Version 6 uses the directory in both cases.
218c35d236eSmrg  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
219c35d236eSmrg  tmpdepfile="$stripped.u"
220c35d236eSmrg  if test "$libtool" = yes; then
221c35d236eSmrg    "$@" -Wc,-M
222c35d236eSmrg  else
223c35d236eSmrg    "$@" -M
224c35d236eSmrg  fi
225c35d236eSmrg  stat=$?
226c35d236eSmrg
227c35d236eSmrg  if test -f "$tmpdepfile"; then :
228c35d236eSmrg  else
229c35d236eSmrg    stripped=`echo "$stripped" | sed 's,^.*/,,'`
230c35d236eSmrg    tmpdepfile="$stripped.u"
231c35d236eSmrg  fi
232c35d236eSmrg
233c35d236eSmrg  if test $stat -eq 0; then :
234c35d236eSmrg  else
235c35d236eSmrg    rm -f "$tmpdepfile"
236c35d236eSmrg    exit $stat
237c35d236eSmrg  fi
238c35d236eSmrg
239c35d236eSmrg  if test -f "$tmpdepfile"; then
240c35d236eSmrg    outname="$stripped.o"
241c35d236eSmrg    # Each line is of the form `foo.o: dependent.h'.
242c35d236eSmrg    # Do two passes, one to just change these to
243c35d236eSmrg    # `$object: dependent.h' and one to simply `dependent.h:'.
244c35d236eSmrg    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
245c35d236eSmrg    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
246c35d236eSmrg  else
247c35d236eSmrg    # The sourcefile does not contain any dependencies, so just
248c35d236eSmrg    # store a dummy comment line, to avoid errors with the Makefile
249c35d236eSmrg    # "include basename.Plo" scheme.
250c35d236eSmrg    echo "#dummy" > "$depfile"
251c35d236eSmrg  fi
252c35d236eSmrg  rm -f "$tmpdepfile"
253c35d236eSmrg  ;;
254c35d236eSmrg
255c35d236eSmrgicc)
256c35d236eSmrg  # Intel's C compiler understands `-MD -MF file'.  However on
257c35d236eSmrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
258c35d236eSmrg  # ICC 7.0 will fill foo.d with something like
259c35d236eSmrg  #    foo.o: sub/foo.c
260c35d236eSmrg  #    foo.o: sub/foo.h
261c35d236eSmrg  # which is wrong.  We want:
262c35d236eSmrg  #    sub/foo.o: sub/foo.c
263c35d236eSmrg  #    sub/foo.o: sub/foo.h
264c35d236eSmrg  #    sub/foo.c:
265c35d236eSmrg  #    sub/foo.h:
266c35d236eSmrg  # ICC 7.1 will output
267c35d236eSmrg  #    foo.o: sub/foo.c sub/foo.h
268c35d236eSmrg  # and will wrap long lines using \ :
269c35d236eSmrg  #    foo.o: sub/foo.c ... \
270c35d236eSmrg  #     sub/foo.h ... \
271c35d236eSmrg  #     ...
272c35d236eSmrg
273c35d236eSmrg  "$@" -MD -MF "$tmpdepfile"
274c35d236eSmrg  stat=$?
275c35d236eSmrg  if test $stat -eq 0; then :
276c35d236eSmrg  else
277c35d236eSmrg    rm -f "$tmpdepfile"
278c35d236eSmrg    exit $stat
279c35d236eSmrg  fi
280c35d236eSmrg  rm -f "$depfile"
281c35d236eSmrg  # Each line is of the form `foo.o: dependent.h',
282c35d236eSmrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
283c35d236eSmrg  # Do two passes, one to just change these to
284c35d236eSmrg  # `$object: dependent.h' and one to simply `dependent.h:'.
285c35d236eSmrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
286c35d236eSmrg  # Some versions of the HPUX 10.20 sed can't process this invocation
287c35d236eSmrg  # correctly.  Breaking it into two sed invocations is a workaround.
288c35d236eSmrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
289c35d236eSmrg    sed -e 's/$/ :/' >> "$depfile"
290c35d236eSmrg  rm -f "$tmpdepfile"
291c35d236eSmrg  ;;
292c35d236eSmrg
2934f6cd06fSmrghp2)
2944f6cd06fSmrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
2954f6cd06fSmrg  # compilers, which have integrated preprocessors.  The correct option
2964f6cd06fSmrg  # to use with these is +Maked; it writes dependencies to a file named
2974f6cd06fSmrg  # 'foo.d', which lands next to the object file, wherever that
2984f6cd06fSmrg  # happens to be.
2994f6cd06fSmrg  # Much of this is similar to the tru64 case; see comments there.
3004f6cd06fSmrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
3014f6cd06fSmrg  test "x$dir" = "x$object" && dir=
3024f6cd06fSmrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
3034f6cd06fSmrg  if test "$libtool" = yes; then
3044f6cd06fSmrg    tmpdepfile1=$dir$base.d
3054f6cd06fSmrg    tmpdepfile2=$dir.libs/$base.d
3064f6cd06fSmrg    "$@" -Wc,+Maked
3074f6cd06fSmrg  else
3084f6cd06fSmrg    tmpdepfile1=$dir$base.d
3094f6cd06fSmrg    tmpdepfile2=$dir$base.d
3104f6cd06fSmrg    "$@" +Maked
3114f6cd06fSmrg  fi
3124f6cd06fSmrg  stat=$?
3134f6cd06fSmrg  if test $stat -eq 0; then :
3144f6cd06fSmrg  else
3154f6cd06fSmrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
3164f6cd06fSmrg     exit $stat
3174f6cd06fSmrg  fi
3184f6cd06fSmrg
3194f6cd06fSmrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
3204f6cd06fSmrg  do
3214f6cd06fSmrg    test -f "$tmpdepfile" && break
3224f6cd06fSmrg  done
3234f6cd06fSmrg  if test -f "$tmpdepfile"; then
3244f6cd06fSmrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
3254f6cd06fSmrg    # Add `dependent.h:' lines.
3264f6cd06fSmrg    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
3274f6cd06fSmrg  else
3284f6cd06fSmrg    echo "#dummy" > "$depfile"
3294f6cd06fSmrg  fi
3304f6cd06fSmrg  rm -f "$tmpdepfile" "$tmpdepfile2"
3314f6cd06fSmrg  ;;
3324f6cd06fSmrg
333c35d236eSmrgtru64)
334c35d236eSmrg   # The Tru64 compiler uses -MD to generate dependencies as a side
335c35d236eSmrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
336c35d236eSmrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
337c35d236eSmrg   # dependencies in `foo.d' instead, so we check for that too.
338c35d236eSmrg   # Subdirectories are respected.
339c35d236eSmrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
340c35d236eSmrg   test "x$dir" = "x$object" && dir=
341c35d236eSmrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
342c35d236eSmrg
343c35d236eSmrg   if test "$libtool" = yes; then
344c35d236eSmrg      # With Tru64 cc, shared objects can also be used to make a
3454f6cd06fSmrg      # static library.  This mechanism is used in libtool 1.4 series to
346c35d236eSmrg      # handle both shared and static libraries in a single compilation.
347c35d236eSmrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
348c35d236eSmrg      #
349c35d236eSmrg      # With libtool 1.5 this exception was removed, and libtool now
350c35d236eSmrg      # generates 2 separate objects for the 2 libraries.  These two
3514f6cd06fSmrg      # compilations output dependencies in $dir.libs/$base.o.d and
352c35d236eSmrg      # in $dir$base.o.d.  We have to check for both files, because
353c35d236eSmrg      # one of the two compilations can be disabled.  We should prefer
354c35d236eSmrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
355c35d236eSmrg      # automatically cleaned when .libs/ is deleted, while ignoring
356c35d236eSmrg      # the former would cause a distcleancheck panic.
357c35d236eSmrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
358c35d236eSmrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
359c35d236eSmrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
360c35d236eSmrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
361c35d236eSmrg      "$@" -Wc,-MD
362c35d236eSmrg   else
363c35d236eSmrg      tmpdepfile1=$dir$base.o.d
364c35d236eSmrg      tmpdepfile2=$dir$base.d
365c35d236eSmrg      tmpdepfile3=$dir$base.d
366c35d236eSmrg      tmpdepfile4=$dir$base.d
367c35d236eSmrg      "$@" -MD
368c35d236eSmrg   fi
369c35d236eSmrg
370c35d236eSmrg   stat=$?
371c35d236eSmrg   if test $stat -eq 0; then :
372c35d236eSmrg   else
373c35d236eSmrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
374c35d236eSmrg      exit $stat
375c35d236eSmrg   fi
376c35d236eSmrg
377c35d236eSmrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
378c35d236eSmrg   do
379c35d236eSmrg     test -f "$tmpdepfile" && break
380c35d236eSmrg   done
381c35d236eSmrg   if test -f "$tmpdepfile"; then
382c35d236eSmrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
383c35d236eSmrg      # That's a tab and a space in the [].
384c35d236eSmrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
385c35d236eSmrg   else
386c35d236eSmrg      echo "#dummy" > "$depfile"
387c35d236eSmrg   fi
388c35d236eSmrg   rm -f "$tmpdepfile"
389c35d236eSmrg   ;;
390c35d236eSmrg
391c35d236eSmrg#nosideeffect)
392c35d236eSmrg  # This comment above is used by automake to tell side-effect
393c35d236eSmrg  # dependency tracking mechanisms from slower ones.
394c35d236eSmrg
395c35d236eSmrgdashmstdout)
396c35d236eSmrg  # Important note: in order to support this mode, a compiler *must*
397c35d236eSmrg  # always write the preprocessed file to stdout, regardless of -o.
398c35d236eSmrg  "$@" || exit $?
399c35d236eSmrg
400c35d236eSmrg  # Remove the call to Libtool.
401c35d236eSmrg  if test "$libtool" = yes; then
402c35d236eSmrg    while test $1 != '--mode=compile'; do
403c35d236eSmrg      shift
404c35d236eSmrg    done
405c35d236eSmrg    shift
406c35d236eSmrg  fi
407c35d236eSmrg
408c35d236eSmrg  # Remove `-o $object'.
409c35d236eSmrg  IFS=" "
410c35d236eSmrg  for arg
411c35d236eSmrg  do
412c35d236eSmrg    case $arg in
413c35d236eSmrg    -o)
414c35d236eSmrg      shift
415c35d236eSmrg      ;;
416c35d236eSmrg    $object)
417c35d236eSmrg      shift
418c35d236eSmrg      ;;
419c35d236eSmrg    *)
420c35d236eSmrg      set fnord "$@" "$arg"
421c35d236eSmrg      shift # fnord
422c35d236eSmrg      shift # $arg
423c35d236eSmrg      ;;
424c35d236eSmrg    esac
425c35d236eSmrg  done
426c35d236eSmrg
427c35d236eSmrg  test -z "$dashmflag" && dashmflag=-M
428c35d236eSmrg  # Require at least two characters before searching for `:'
429c35d236eSmrg  # in the target name.  This is to cope with DOS-style filenames:
430c35d236eSmrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
431c35d236eSmrg  "$@" $dashmflag |
432c35d236eSmrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
433c35d236eSmrg  rm -f "$depfile"
434c35d236eSmrg  cat < "$tmpdepfile" > "$depfile"
435c35d236eSmrg  tr ' ' '
436c35d236eSmrg' < "$tmpdepfile" | \
437c35d236eSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
438c35d236eSmrg## correctly.  Breaking it into two sed invocations is a workaround.
439c35d236eSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
440c35d236eSmrg  rm -f "$tmpdepfile"
441c35d236eSmrg  ;;
442c35d236eSmrg
443c35d236eSmrgdashXmstdout)
444c35d236eSmrg  # This case only exists to satisfy depend.m4.  It is never actually
445c35d236eSmrg  # run, as this mode is specially recognized in the preamble.
446c35d236eSmrg  exit 1
447c35d236eSmrg  ;;
448c35d236eSmrg
449c35d236eSmrgmakedepend)
450c35d236eSmrg  "$@" || exit $?
451c35d236eSmrg  # Remove any Libtool call
452c35d236eSmrg  if test "$libtool" = yes; then
453c35d236eSmrg    while test $1 != '--mode=compile'; do
454c35d236eSmrg      shift
455c35d236eSmrg    done
456c35d236eSmrg    shift
457c35d236eSmrg  fi
458c35d236eSmrg  # X makedepend
459c35d236eSmrg  shift
460c35d236eSmrg  cleared=no
461c35d236eSmrg  for arg in "$@"; do
462c35d236eSmrg    case $cleared in
463c35d236eSmrg    no)
464c35d236eSmrg      set ""; shift
465c35d236eSmrg      cleared=yes ;;
466c35d236eSmrg    esac
467c35d236eSmrg    case "$arg" in
468c35d236eSmrg    -D*|-I*)
469c35d236eSmrg      set fnord "$@" "$arg"; shift ;;
470c35d236eSmrg    # Strip any option that makedepend may not understand.  Remove
471c35d236eSmrg    # the object too, otherwise makedepend will parse it as a source file.
472c35d236eSmrg    -*|$object)
473c35d236eSmrg      ;;
474c35d236eSmrg    *)
475c35d236eSmrg      set fnord "$@" "$arg"; shift ;;
476c35d236eSmrg    esac
477c35d236eSmrg  done
478c35d236eSmrg  obj_suffix="`echo $object | sed 's/^.*\././'`"
479c35d236eSmrg  touch "$tmpdepfile"
480c35d236eSmrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
481c35d236eSmrg  rm -f "$depfile"
482c35d236eSmrg  cat < "$tmpdepfile" > "$depfile"
483c35d236eSmrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
484c35d236eSmrg' | \
485c35d236eSmrg## Some versions of the HPUX 10.20 sed can't process this invocation
486c35d236eSmrg## correctly.  Breaking it into two sed invocations is a workaround.
487c35d236eSmrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
488c35d236eSmrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
489c35d236eSmrg  ;;
490c35d236eSmrg
491c35d236eSmrgcpp)
492c35d236eSmrg  # Important note: in order to support this mode, a compiler *must*
493c35d236eSmrg  # always write the preprocessed file to stdout.
494c35d236eSmrg  "$@" || exit $?
495c35d236eSmrg
496c35d236eSmrg  # Remove the call to Libtool.
497c35d236eSmrg  if test "$libtool" = yes; then
498c35d236eSmrg    while test $1 != '--mode=compile'; do
499c35d236eSmrg      shift
500c35d236eSmrg    done
501c35d236eSmrg    shift
502c35d236eSmrg  fi
503c35d236eSmrg
504c35d236eSmrg  # Remove `-o $object'.
505c35d236eSmrg  IFS=" "
506c35d236eSmrg  for arg
507c35d236eSmrg  do
508c35d236eSmrg    case $arg in
509c35d236eSmrg    -o)
510c35d236eSmrg      shift
511c35d236eSmrg      ;;
512c35d236eSmrg    $object)
513c35d236eSmrg      shift
514c35d236eSmrg      ;;
515c35d236eSmrg    *)
516c35d236eSmrg      set fnord "$@" "$arg"
517c35d236eSmrg      shift # fnord
518c35d236eSmrg      shift # $arg
519c35d236eSmrg      ;;
520c35d236eSmrg    esac
521c35d236eSmrg  done
522c35d236eSmrg
523c35d236eSmrg  "$@" -E |
524c35d236eSmrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
525c35d236eSmrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
526c35d236eSmrg    sed '$ s: \\$::' > "$tmpdepfile"
527c35d236eSmrg  rm -f "$depfile"
528c35d236eSmrg  echo "$object : \\" > "$depfile"
529c35d236eSmrg  cat < "$tmpdepfile" >> "$depfile"
530c35d236eSmrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
531c35d236eSmrg  rm -f "$tmpdepfile"
532c35d236eSmrg  ;;
533c35d236eSmrg
534c35d236eSmrgmsvisualcpp)
535c35d236eSmrg  # Important note: in order to support this mode, a compiler *must*
536c35d236eSmrg  # always write the preprocessed file to stdout, regardless of -o,
537c35d236eSmrg  # because we must use -o when running libtool.
538c35d236eSmrg  "$@" || exit $?
539c35d236eSmrg  IFS=" "
540c35d236eSmrg  for arg
541c35d236eSmrg  do
542c35d236eSmrg    case "$arg" in
543c35d236eSmrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
544c35d236eSmrg	set fnord "$@"
545c35d236eSmrg	shift
546c35d236eSmrg	shift
547c35d236eSmrg	;;
548c35d236eSmrg    *)
549c35d236eSmrg	set fnord "$@" "$arg"
550c35d236eSmrg	shift
551c35d236eSmrg	shift
552c35d236eSmrg	;;
553c35d236eSmrg    esac
554c35d236eSmrg  done
555c35d236eSmrg  "$@" -E |
556c35d236eSmrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
557c35d236eSmrg  rm -f "$depfile"
558c35d236eSmrg  echo "$object : \\" > "$depfile"
559c35d236eSmrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
560c35d236eSmrg  echo "	" >> "$depfile"
561c35d236eSmrg  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
562c35d236eSmrg  rm -f "$tmpdepfile"
563c35d236eSmrg  ;;
564c35d236eSmrg
565c35d236eSmrgnone)
566c35d236eSmrg  exec "$@"
567c35d236eSmrg  ;;
568c35d236eSmrg
569c35d236eSmrg*)
570c35d236eSmrg  echo "Unknown depmode $depmode" 1>&2
571c35d236eSmrg  exit 1
572c35d236eSmrg  ;;
573c35d236eSmrgesac
574c35d236eSmrg
575c35d236eSmrgexit 0
576c35d236eSmrg
577c35d236eSmrg# Local Variables:
578c35d236eSmrg# mode: shell-script
579c35d236eSmrg# sh-indentation: 2
580c35d236eSmrg# eval: (add-hook 'write-file-hooks 'time-stamp)
581c35d236eSmrg# time-stamp-start: "scriptversion="
582c35d236eSmrg# time-stamp-format: "%:y-%02m-%02d.%02H"
583c35d236eSmrg# time-stamp-end: "$"
584c35d236eSmrg# End:
585