depcomp revision ba064abe
1191cded7Smrg#! /bin/sh
2191cded7Smrg# depcomp - compile a program generating dependencies as side-effects
3191cded7Smrg
4ba064abeSmrgscriptversion=2009-04-28.21; # UTC
5191cded7Smrg
6ba064abeSmrg# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
7ba064abeSmrg# Software Foundation, Inc.
8191cded7Smrg
9191cded7Smrg# This program is free software; you can redistribute it and/or modify
10191cded7Smrg# it under the terms of the GNU General Public License as published by
11191cded7Smrg# the Free Software Foundation; either version 2, or (at your option)
12191cded7Smrg# any later version.
13191cded7Smrg
14191cded7Smrg# This program is distributed in the hope that it will be useful,
15191cded7Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
16191cded7Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17191cded7Smrg# GNU General Public License for more details.
18191cded7Smrg
19191cded7Smrg# You should have received a copy of the GNU General Public License
20ba064abeSmrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
21191cded7Smrg
22191cded7Smrg# As a special exception to the GNU General Public License, if you
23191cded7Smrg# distribute this file as part of a program that contains a
24191cded7Smrg# configuration script generated by Autoconf, you may include it under
25191cded7Smrg# the same distribution terms that you use for the rest of that program.
26191cded7Smrg
27191cded7Smrg# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
28191cded7Smrg
29191cded7Smrgcase $1 in
30191cded7Smrg  '')
31191cded7Smrg     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
32191cded7Smrg     exit 1;
33191cded7Smrg     ;;
34191cded7Smrg  -h | --h*)
35191cded7Smrg    cat <<\EOF
36191cded7SmrgUsage: depcomp [--help] [--version] PROGRAM [ARGS]
37191cded7Smrg
38191cded7SmrgRun PROGRAMS ARGS to compile a file, generating dependencies
39191cded7Smrgas side-effects.
40191cded7Smrg
41191cded7SmrgEnvironment variables:
42191cded7Smrg  depmode     Dependency tracking mode.
43191cded7Smrg  source      Source file read by `PROGRAMS ARGS'.
44191cded7Smrg  object      Object file output by `PROGRAMS ARGS'.
45191cded7Smrg  DEPDIR      directory where to store dependencies.
46191cded7Smrg  depfile     Dependency file to output.
47191cded7Smrg  tmpdepfile  Temporary file to use when outputing dependencies.
48191cded7Smrg  libtool     Whether libtool is used (yes/no).
49191cded7Smrg
50191cded7SmrgReport bugs to <bug-automake@gnu.org>.
51191cded7SmrgEOF
52191cded7Smrg    exit $?
53191cded7Smrg    ;;
54191cded7Smrg  -v | --v*)
55191cded7Smrg    echo "depcomp $scriptversion"
56191cded7Smrg    exit $?
57191cded7Smrg    ;;
58191cded7Smrgesac
59191cded7Smrg
60191cded7Smrgif test -z "$depmode" || test -z "$source" || test -z "$object"; then
61191cded7Smrg  echo "depcomp: Variables source, object and depmode must be set" 1>&2
62191cded7Smrg  exit 1
63191cded7Smrgfi
64191cded7Smrg
65191cded7Smrg# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
66191cded7Smrgdepfile=${depfile-`echo "$object" |
67191cded7Smrg  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
68191cded7Smrgtmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
69191cded7Smrg
70191cded7Smrgrm -f "$tmpdepfile"
71191cded7Smrg
72191cded7Smrg# Some modes work just like other modes, but use different flags.  We
73191cded7Smrg# parameterize here, but still list the modes in the big case below,
74191cded7Smrg# to make depend.m4 easier to write.  Note that we *cannot* use a case
75191cded7Smrg# here, because this file can only contain one case statement.
76191cded7Smrgif test "$depmode" = hp; then
77191cded7Smrg  # HP compiler uses -M and no extra arg.
78191cded7Smrg  gccflag=-M
79191cded7Smrg  depmode=gcc
80191cded7Smrgfi
81191cded7Smrg
82191cded7Smrgif test "$depmode" = dashXmstdout; then
83191cded7Smrg   # This is just like dashmstdout with a different argument.
84191cded7Smrg   dashmflag=-xM
85191cded7Smrg   depmode=dashmstdout
86191cded7Smrgfi
87191cded7Smrg
88ba064abeSmrgcygpath_u="cygpath -u -f -"
89ba064abeSmrgif test "$depmode" = msvcmsys; then
90ba064abeSmrg   # This is just like msvisualcpp but w/o cygpath translation.
91ba064abeSmrg   # Just convert the backslash-escaped backslashes to single forward
92ba064abeSmrg   # slashes to satisfy depend.m4
93ba064abeSmrg   cygpath_u="sed s,\\\\\\\\,/,g"
94ba064abeSmrg   depmode=msvisualcpp
95ba064abeSmrgfi
96ba064abeSmrg
97191cded7Smrgcase "$depmode" in
98191cded7Smrggcc3)
99191cded7Smrg## gcc 3 implements dependency tracking that does exactly what
100191cded7Smrg## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
101191cded7Smrg## it if -MD -MP comes after the -MF stuff.  Hmm.
102b290cf36Smrg## Unfortunately, FreeBSD c89 acceptance of flags depends upon
103b290cf36Smrg## the command line argument order; so add the flags where they
104b290cf36Smrg## appear in depend2.am.  Note that the slowdown incurred here
105b290cf36Smrg## affects only configure: in makefiles, %FASTDEP% shortcuts this.
106b290cf36Smrg  for arg
107b290cf36Smrg  do
108b290cf36Smrg    case $arg in
109b290cf36Smrg    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
110b290cf36Smrg    *)  set fnord "$@" "$arg" ;;
111b290cf36Smrg    esac
112b290cf36Smrg    shift # fnord
113b290cf36Smrg    shift # $arg
114b290cf36Smrg  done
115b290cf36Smrg  "$@"
116191cded7Smrg  stat=$?
117191cded7Smrg  if test $stat -eq 0; then :
118191cded7Smrg  else
119191cded7Smrg    rm -f "$tmpdepfile"
120191cded7Smrg    exit $stat
121191cded7Smrg  fi
122191cded7Smrg  mv "$tmpdepfile" "$depfile"
123191cded7Smrg  ;;
124191cded7Smrg
125191cded7Smrggcc)
126191cded7Smrg## There are various ways to get dependency output from gcc.  Here's
127191cded7Smrg## why we pick this rather obscure method:
128191cded7Smrg## - Don't want to use -MD because we'd like the dependencies to end
129191cded7Smrg##   up in a subdir.  Having to rename by hand is ugly.
130191cded7Smrg##   (We might end up doing this anyway to support other compilers.)
131191cded7Smrg## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
132191cded7Smrg##   -MM, not -M (despite what the docs say).
133191cded7Smrg## - Using -M directly means running the compiler twice (even worse
134191cded7Smrg##   than renaming).
135191cded7Smrg  if test -z "$gccflag"; then
136191cded7Smrg    gccflag=-MD,
137191cded7Smrg  fi
138191cded7Smrg  "$@" -Wp,"$gccflag$tmpdepfile"
139191cded7Smrg  stat=$?
140191cded7Smrg  if test $stat -eq 0; then :
141191cded7Smrg  else
142191cded7Smrg    rm -f "$tmpdepfile"
143191cded7Smrg    exit $stat
144191cded7Smrg  fi
145191cded7Smrg  rm -f "$depfile"
146191cded7Smrg  echo "$object : \\" > "$depfile"
147191cded7Smrg  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
148191cded7Smrg## The second -e expression handles DOS-style file names with drive letters.
149191cded7Smrg  sed -e 's/^[^:]*: / /' \
150191cded7Smrg      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
151191cded7Smrg## This next piece of magic avoids the `deleted header file' problem.
152191cded7Smrg## The problem is that when a header file which appears in a .P file
153191cded7Smrg## is deleted, the dependency causes make to die (because there is
154191cded7Smrg## typically no way to rebuild the header).  We avoid this by adding
155191cded7Smrg## dummy dependencies for each header file.  Too bad gcc doesn't do
156191cded7Smrg## this for us directly.
157191cded7Smrg  tr ' ' '
158191cded7Smrg' < "$tmpdepfile" |
159191cded7Smrg## Some versions of gcc put a space before the `:'.  On the theory
160191cded7Smrg## that the space means something, we add a space to the output as
161191cded7Smrg## well.
162191cded7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
163191cded7Smrg## correctly.  Breaking it into two sed invocations is a workaround.
164191cded7Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
165191cded7Smrg  rm -f "$tmpdepfile"
166191cded7Smrg  ;;
167191cded7Smrg
168191cded7Smrghp)
169191cded7Smrg  # This case exists only to let depend.m4 do its work.  It works by
170191cded7Smrg  # looking at the text of this script.  This case will never be run,
171191cded7Smrg  # since it is checked for above.
172191cded7Smrg  exit 1
173191cded7Smrg  ;;
174191cded7Smrg
175191cded7Smrgsgi)
176191cded7Smrg  if test "$libtool" = yes; then
177191cded7Smrg    "$@" "-Wp,-MDupdate,$tmpdepfile"
178191cded7Smrg  else
179191cded7Smrg    "$@" -MDupdate "$tmpdepfile"
180191cded7Smrg  fi
181191cded7Smrg  stat=$?
182191cded7Smrg  if test $stat -eq 0; then :
183191cded7Smrg  else
184191cded7Smrg    rm -f "$tmpdepfile"
185191cded7Smrg    exit $stat
186191cded7Smrg  fi
187191cded7Smrg  rm -f "$depfile"
188191cded7Smrg
189191cded7Smrg  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
190191cded7Smrg    echo "$object : \\" > "$depfile"
191191cded7Smrg
192191cded7Smrg    # Clip off the initial element (the dependent).  Don't try to be
193191cded7Smrg    # clever and replace this with sed code, as IRIX sed won't handle
194191cded7Smrg    # lines with more than a fixed number of characters (4096 in
195191cded7Smrg    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
196191cded7Smrg    # the IRIX cc adds comments like `#:fec' to the end of the
197191cded7Smrg    # dependency line.
198191cded7Smrg    tr ' ' '
199191cded7Smrg' < "$tmpdepfile" \
200191cded7Smrg    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
201191cded7Smrg    tr '
202ba064abeSmrg' ' ' >> "$depfile"
203ba064abeSmrg    echo >> "$depfile"
204191cded7Smrg
205191cded7Smrg    # The second pass generates a dummy entry for each header file.
206191cded7Smrg    tr ' ' '
207191cded7Smrg' < "$tmpdepfile" \
208191cded7Smrg   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
209ba064abeSmrg   >> "$depfile"
210191cded7Smrg  else
211191cded7Smrg    # The sourcefile does not contain any dependencies, so just
212191cded7Smrg    # store a dummy comment line, to avoid errors with the Makefile
213191cded7Smrg    # "include basename.Plo" scheme.
214191cded7Smrg    echo "#dummy" > "$depfile"
215191cded7Smrg  fi
216191cded7Smrg  rm -f "$tmpdepfile"
217191cded7Smrg  ;;
218191cded7Smrg
219191cded7Smrgaix)
220191cded7Smrg  # The C for AIX Compiler uses -M and outputs the dependencies
221191cded7Smrg  # in a .u file.  In older versions, this file always lives in the
222191cded7Smrg  # current directory.  Also, the AIX compiler puts `$object:' at the
223191cded7Smrg  # start of each line; $object doesn't have directory information.
224191cded7Smrg  # Version 6 uses the directory in both cases.
225b290cf36Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
226b290cf36Smrg  test "x$dir" = "x$object" && dir=
227b290cf36Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
228191cded7Smrg  if test "$libtool" = yes; then
229b290cf36Smrg    tmpdepfile1=$dir$base.u
230b290cf36Smrg    tmpdepfile2=$base.u
231b290cf36Smrg    tmpdepfile3=$dir.libs/$base.u
232191cded7Smrg    "$@" -Wc,-M
233191cded7Smrg  else
234b290cf36Smrg    tmpdepfile1=$dir$base.u
235b290cf36Smrg    tmpdepfile2=$dir$base.u
236b290cf36Smrg    tmpdepfile3=$dir$base.u
237191cded7Smrg    "$@" -M
238191cded7Smrg  fi
239191cded7Smrg  stat=$?
240191cded7Smrg
241191cded7Smrg  if test $stat -eq 0; then :
242191cded7Smrg  else
243b290cf36Smrg    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
244191cded7Smrg    exit $stat
245191cded7Smrg  fi
246191cded7Smrg
247b290cf36Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
248b290cf36Smrg  do
249b290cf36Smrg    test -f "$tmpdepfile" && break
250b290cf36Smrg  done
251191cded7Smrg  if test -f "$tmpdepfile"; then
252191cded7Smrg    # Each line is of the form `foo.o: dependent.h'.
253191cded7Smrg    # Do two passes, one to just change these to
254191cded7Smrg    # `$object: dependent.h' and one to simply `dependent.h:'.
255b290cf36Smrg    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
256b290cf36Smrg    # That's a tab and a space in the [].
257b290cf36Smrg    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
258191cded7Smrg  else
259191cded7Smrg    # The sourcefile does not contain any dependencies, so just
260191cded7Smrg    # store a dummy comment line, to avoid errors with the Makefile
261191cded7Smrg    # "include basename.Plo" scheme.
262191cded7Smrg    echo "#dummy" > "$depfile"
263191cded7Smrg  fi
264191cded7Smrg  rm -f "$tmpdepfile"
265191cded7Smrg  ;;
266191cded7Smrg
267191cded7Smrgicc)
268191cded7Smrg  # Intel's C compiler understands `-MD -MF file'.  However on
269191cded7Smrg  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
270191cded7Smrg  # ICC 7.0 will fill foo.d with something like
271191cded7Smrg  #    foo.o: sub/foo.c
272191cded7Smrg  #    foo.o: sub/foo.h
273191cded7Smrg  # which is wrong.  We want:
274191cded7Smrg  #    sub/foo.o: sub/foo.c
275191cded7Smrg  #    sub/foo.o: sub/foo.h
276191cded7Smrg  #    sub/foo.c:
277191cded7Smrg  #    sub/foo.h:
278191cded7Smrg  # ICC 7.1 will output
279191cded7Smrg  #    foo.o: sub/foo.c sub/foo.h
280191cded7Smrg  # and will wrap long lines using \ :
281191cded7Smrg  #    foo.o: sub/foo.c ... \
282191cded7Smrg  #     sub/foo.h ... \
283191cded7Smrg  #     ...
284191cded7Smrg
285191cded7Smrg  "$@" -MD -MF "$tmpdepfile"
286191cded7Smrg  stat=$?
287191cded7Smrg  if test $stat -eq 0; then :
288191cded7Smrg  else
289191cded7Smrg    rm -f "$tmpdepfile"
290191cded7Smrg    exit $stat
291191cded7Smrg  fi
292191cded7Smrg  rm -f "$depfile"
293191cded7Smrg  # Each line is of the form `foo.o: dependent.h',
294191cded7Smrg  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
295191cded7Smrg  # Do two passes, one to just change these to
296191cded7Smrg  # `$object: dependent.h' and one to simply `dependent.h:'.
297191cded7Smrg  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
298191cded7Smrg  # Some versions of the HPUX 10.20 sed can't process this invocation
299191cded7Smrg  # correctly.  Breaking it into two sed invocations is a workaround.
300191cded7Smrg  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
301191cded7Smrg    sed -e 's/$/ :/' >> "$depfile"
302191cded7Smrg  rm -f "$tmpdepfile"
303191cded7Smrg  ;;
304191cded7Smrg
305b290cf36Smrghp2)
306b290cf36Smrg  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
307b290cf36Smrg  # compilers, which have integrated preprocessors.  The correct option
308b290cf36Smrg  # to use with these is +Maked; it writes dependencies to a file named
309b290cf36Smrg  # 'foo.d', which lands next to the object file, wherever that
310b290cf36Smrg  # happens to be.
311b290cf36Smrg  # Much of this is similar to the tru64 case; see comments there.
312b290cf36Smrg  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
313b290cf36Smrg  test "x$dir" = "x$object" && dir=
314b290cf36Smrg  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
315b290cf36Smrg  if test "$libtool" = yes; then
316b290cf36Smrg    tmpdepfile1=$dir$base.d
317b290cf36Smrg    tmpdepfile2=$dir.libs/$base.d
318b290cf36Smrg    "$@" -Wc,+Maked
319b290cf36Smrg  else
320b290cf36Smrg    tmpdepfile1=$dir$base.d
321b290cf36Smrg    tmpdepfile2=$dir$base.d
322b290cf36Smrg    "$@" +Maked
323b290cf36Smrg  fi
324b290cf36Smrg  stat=$?
325b290cf36Smrg  if test $stat -eq 0; then :
326b290cf36Smrg  else
327b290cf36Smrg     rm -f "$tmpdepfile1" "$tmpdepfile2"
328b290cf36Smrg     exit $stat
329b290cf36Smrg  fi
330b290cf36Smrg
331b290cf36Smrg  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
332b290cf36Smrg  do
333b290cf36Smrg    test -f "$tmpdepfile" && break
334b290cf36Smrg  done
335b290cf36Smrg  if test -f "$tmpdepfile"; then
336b290cf36Smrg    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
337b290cf36Smrg    # Add `dependent.h:' lines.
338ba064abeSmrg    sed -ne '2,${
339ba064abeSmrg	       s/^ *//
340ba064abeSmrg	       s/ \\*$//
341ba064abeSmrg	       s/$/:/
342ba064abeSmrg	       p
343ba064abeSmrg	     }' "$tmpdepfile" >> "$depfile"
344b290cf36Smrg  else
345b290cf36Smrg    echo "#dummy" > "$depfile"
346b290cf36Smrg  fi
347b290cf36Smrg  rm -f "$tmpdepfile" "$tmpdepfile2"
348b290cf36Smrg  ;;
349b290cf36Smrg
350191cded7Smrgtru64)
351191cded7Smrg   # The Tru64 compiler uses -MD to generate dependencies as a side
352191cded7Smrg   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
353191cded7Smrg   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
354191cded7Smrg   # dependencies in `foo.d' instead, so we check for that too.
355191cded7Smrg   # Subdirectories are respected.
356191cded7Smrg   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
357191cded7Smrg   test "x$dir" = "x$object" && dir=
358191cded7Smrg   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
359191cded7Smrg
360191cded7Smrg   if test "$libtool" = yes; then
361191cded7Smrg      # With Tru64 cc, shared objects can also be used to make a
362b290cf36Smrg      # static library.  This mechanism is used in libtool 1.4 series to
363191cded7Smrg      # handle both shared and static libraries in a single compilation.
364191cded7Smrg      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
365191cded7Smrg      #
366191cded7Smrg      # With libtool 1.5 this exception was removed, and libtool now
367191cded7Smrg      # generates 2 separate objects for the 2 libraries.  These two
368b290cf36Smrg      # compilations output dependencies in $dir.libs/$base.o.d and
369191cded7Smrg      # in $dir$base.o.d.  We have to check for both files, because
370191cded7Smrg      # one of the two compilations can be disabled.  We should prefer
371191cded7Smrg      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
372191cded7Smrg      # automatically cleaned when .libs/ is deleted, while ignoring
373191cded7Smrg      # the former would cause a distcleancheck panic.
374191cded7Smrg      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
375191cded7Smrg      tmpdepfile2=$dir$base.o.d          # libtool 1.5
376191cded7Smrg      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
377191cded7Smrg      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
378191cded7Smrg      "$@" -Wc,-MD
379191cded7Smrg   else
380191cded7Smrg      tmpdepfile1=$dir$base.o.d
381191cded7Smrg      tmpdepfile2=$dir$base.d
382191cded7Smrg      tmpdepfile3=$dir$base.d
383191cded7Smrg      tmpdepfile4=$dir$base.d
384191cded7Smrg      "$@" -MD
385191cded7Smrg   fi
386191cded7Smrg
387191cded7Smrg   stat=$?
388191cded7Smrg   if test $stat -eq 0; then :
389191cded7Smrg   else
390191cded7Smrg      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
391191cded7Smrg      exit $stat
392191cded7Smrg   fi
393191cded7Smrg
394191cded7Smrg   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
395191cded7Smrg   do
396191cded7Smrg     test -f "$tmpdepfile" && break
397191cded7Smrg   done
398191cded7Smrg   if test -f "$tmpdepfile"; then
399191cded7Smrg      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
400191cded7Smrg      # That's a tab and a space in the [].
401191cded7Smrg      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
402191cded7Smrg   else
403191cded7Smrg      echo "#dummy" > "$depfile"
404191cded7Smrg   fi
405191cded7Smrg   rm -f "$tmpdepfile"
406191cded7Smrg   ;;
407191cded7Smrg
408191cded7Smrg#nosideeffect)
409191cded7Smrg  # This comment above is used by automake to tell side-effect
410191cded7Smrg  # dependency tracking mechanisms from slower ones.
411191cded7Smrg
412191cded7Smrgdashmstdout)
413191cded7Smrg  # Important note: in order to support this mode, a compiler *must*
414191cded7Smrg  # always write the preprocessed file to stdout, regardless of -o.
415191cded7Smrg  "$@" || exit $?
416191cded7Smrg
417191cded7Smrg  # Remove the call to Libtool.
418191cded7Smrg  if test "$libtool" = yes; then
419ba064abeSmrg    while test "X$1" != 'X--mode=compile'; do
420191cded7Smrg      shift
421191cded7Smrg    done
422191cded7Smrg    shift
423191cded7Smrg  fi
424191cded7Smrg
425191cded7Smrg  # Remove `-o $object'.
426191cded7Smrg  IFS=" "
427191cded7Smrg  for arg
428191cded7Smrg  do
429191cded7Smrg    case $arg in
430191cded7Smrg    -o)
431191cded7Smrg      shift
432191cded7Smrg      ;;
433191cded7Smrg    $object)
434191cded7Smrg      shift
435191cded7Smrg      ;;
436191cded7Smrg    *)
437191cded7Smrg      set fnord "$@" "$arg"
438191cded7Smrg      shift # fnord
439191cded7Smrg      shift # $arg
440191cded7Smrg      ;;
441191cded7Smrg    esac
442191cded7Smrg  done
443191cded7Smrg
444191cded7Smrg  test -z "$dashmflag" && dashmflag=-M
445191cded7Smrg  # Require at least two characters before searching for `:'
446191cded7Smrg  # in the target name.  This is to cope with DOS-style filenames:
447191cded7Smrg  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
448191cded7Smrg  "$@" $dashmflag |
449191cded7Smrg    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
450191cded7Smrg  rm -f "$depfile"
451191cded7Smrg  cat < "$tmpdepfile" > "$depfile"
452191cded7Smrg  tr ' ' '
453191cded7Smrg' < "$tmpdepfile" | \
454191cded7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
455191cded7Smrg## correctly.  Breaking it into two sed invocations is a workaround.
456191cded7Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
457191cded7Smrg  rm -f "$tmpdepfile"
458191cded7Smrg  ;;
459191cded7Smrg
460191cded7SmrgdashXmstdout)
461191cded7Smrg  # This case only exists to satisfy depend.m4.  It is never actually
462191cded7Smrg  # run, as this mode is specially recognized in the preamble.
463191cded7Smrg  exit 1
464191cded7Smrg  ;;
465191cded7Smrg
466191cded7Smrgmakedepend)
467191cded7Smrg  "$@" || exit $?
468191cded7Smrg  # Remove any Libtool call
469191cded7Smrg  if test "$libtool" = yes; then
470ba064abeSmrg    while test "X$1" != 'X--mode=compile'; do
471191cded7Smrg      shift
472191cded7Smrg    done
473191cded7Smrg    shift
474191cded7Smrg  fi
475191cded7Smrg  # X makedepend
476191cded7Smrg  shift
477ba064abeSmrg  cleared=no eat=no
478ba064abeSmrg  for arg
479ba064abeSmrg  do
480191cded7Smrg    case $cleared in
481191cded7Smrg    no)
482191cded7Smrg      set ""; shift
483191cded7Smrg      cleared=yes ;;
484191cded7Smrg    esac
485ba064abeSmrg    if test $eat = yes; then
486ba064abeSmrg      eat=no
487ba064abeSmrg      continue
488ba064abeSmrg    fi
489191cded7Smrg    case "$arg" in
490191cded7Smrg    -D*|-I*)
491191cded7Smrg      set fnord "$@" "$arg"; shift ;;
492191cded7Smrg    # Strip any option that makedepend may not understand.  Remove
493191cded7Smrg    # the object too, otherwise makedepend will parse it as a source file.
494ba064abeSmrg    -arch)
495ba064abeSmrg      eat=yes ;;
496191cded7Smrg    -*|$object)
497191cded7Smrg      ;;
498191cded7Smrg    *)
499191cded7Smrg      set fnord "$@" "$arg"; shift ;;
500191cded7Smrg    esac
501191cded7Smrg  done
502ba064abeSmrg  obj_suffix=`echo "$object" | sed 's/^.*\././'`
503191cded7Smrg  touch "$tmpdepfile"
504191cded7Smrg  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
505191cded7Smrg  rm -f "$depfile"
506191cded7Smrg  cat < "$tmpdepfile" > "$depfile"
507191cded7Smrg  sed '1,2d' "$tmpdepfile" | tr ' ' '
508191cded7Smrg' | \
509191cded7Smrg## Some versions of the HPUX 10.20 sed can't process this invocation
510191cded7Smrg## correctly.  Breaking it into two sed invocations is a workaround.
511191cded7Smrg    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
512191cded7Smrg  rm -f "$tmpdepfile" "$tmpdepfile".bak
513191cded7Smrg  ;;
514191cded7Smrg
515191cded7Smrgcpp)
516191cded7Smrg  # Important note: in order to support this mode, a compiler *must*
517191cded7Smrg  # always write the preprocessed file to stdout.
518191cded7Smrg  "$@" || exit $?
519191cded7Smrg
520191cded7Smrg  # Remove the call to Libtool.
521191cded7Smrg  if test "$libtool" = yes; then
522ba064abeSmrg    while test "X$1" != 'X--mode=compile'; do
523191cded7Smrg      shift
524191cded7Smrg    done
525191cded7Smrg    shift
526191cded7Smrg  fi
527191cded7Smrg
528191cded7Smrg  # Remove `-o $object'.
529191cded7Smrg  IFS=" "
530191cded7Smrg  for arg
531191cded7Smrg  do
532191cded7Smrg    case $arg in
533191cded7Smrg    -o)
534191cded7Smrg      shift
535191cded7Smrg      ;;
536191cded7Smrg    $object)
537191cded7Smrg      shift
538191cded7Smrg      ;;
539191cded7Smrg    *)
540191cded7Smrg      set fnord "$@" "$arg"
541191cded7Smrg      shift # fnord
542191cded7Smrg      shift # $arg
543191cded7Smrg      ;;
544191cded7Smrg    esac
545191cded7Smrg  done
546191cded7Smrg
547191cded7Smrg  "$@" -E |
548191cded7Smrg    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
549191cded7Smrg       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
550191cded7Smrg    sed '$ s: \\$::' > "$tmpdepfile"
551191cded7Smrg  rm -f "$depfile"
552191cded7Smrg  echo "$object : \\" > "$depfile"
553191cded7Smrg  cat < "$tmpdepfile" >> "$depfile"
554191cded7Smrg  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
555191cded7Smrg  rm -f "$tmpdepfile"
556191cded7Smrg  ;;
557191cded7Smrg
558191cded7Smrgmsvisualcpp)
559191cded7Smrg  # Important note: in order to support this mode, a compiler *must*
560ba064abeSmrg  # always write the preprocessed file to stdout.
561191cded7Smrg  "$@" || exit $?
562ba064abeSmrg
563ba064abeSmrg  # Remove the call to Libtool.
564ba064abeSmrg  if test "$libtool" = yes; then
565ba064abeSmrg    while test "X$1" != 'X--mode=compile'; do
566ba064abeSmrg      shift
567ba064abeSmrg    done
568ba064abeSmrg    shift
569ba064abeSmrg  fi
570ba064abeSmrg
571191cded7Smrg  IFS=" "
572191cded7Smrg  for arg
573191cded7Smrg  do
574191cded7Smrg    case "$arg" in
575ba064abeSmrg    -o)
576ba064abeSmrg      shift
577ba064abeSmrg      ;;
578ba064abeSmrg    $object)
579ba064abeSmrg      shift
580ba064abeSmrg      ;;
581191cded7Smrg    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
582191cded7Smrg	set fnord "$@"
583191cded7Smrg	shift
584191cded7Smrg	shift
585191cded7Smrg	;;
586191cded7Smrg    *)
587191cded7Smrg	set fnord "$@" "$arg"
588191cded7Smrg	shift
589191cded7Smrg	shift
590191cded7Smrg	;;
591191cded7Smrg    esac
592191cded7Smrg  done
593ba064abeSmrg  "$@" -E 2>/dev/null |
594ba064abeSmrg  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
595191cded7Smrg  rm -f "$depfile"
596191cded7Smrg  echo "$object : \\" > "$depfile"
597ba064abeSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
598191cded7Smrg  echo "	" >> "$depfile"
599ba064abeSmrg  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
600191cded7Smrg  rm -f "$tmpdepfile"
601191cded7Smrg  ;;
602191cded7Smrg
603ba064abeSmrgmsvcmsys)
604ba064abeSmrg  # This case exists only to let depend.m4 do its work.  It works by
605ba064abeSmrg  # looking at the text of this script.  This case will never be run,
606ba064abeSmrg  # since it is checked for above.
607ba064abeSmrg  exit 1
608ba064abeSmrg  ;;
609ba064abeSmrg
610191cded7Smrgnone)
611191cded7Smrg  exec "$@"
612191cded7Smrg  ;;
613191cded7Smrg
614191cded7Smrg*)
615191cded7Smrg  echo "Unknown depmode $depmode" 1>&2
616191cded7Smrg  exit 1
617191cded7Smrg  ;;
618191cded7Smrgesac
619191cded7Smrg
620191cded7Smrgexit 0
621191cded7Smrg
622191cded7Smrg# Local Variables:
623191cded7Smrg# mode: shell-script
624191cded7Smrg# sh-indentation: 2
625191cded7Smrg# eval: (add-hook 'write-file-hooks 'time-stamp)
626191cded7Smrg# time-stamp-start: "scriptversion="
627191cded7Smrg# time-stamp-format: "%:y-%02m-%02d.%02H"
628ba064abeSmrg# time-stamp-time-zone: "UTC"
629ba064abeSmrg# time-stamp-end: "; # UTC"
630191cded7Smrg# End:
631