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