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