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