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