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