blob: 25a39e6cd5c82d7276f6ccc62ef5e7ba1cc9776f [file] [log] [blame]
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +00001#! /bin/sh
2# depcomp - compile a program generating dependencies as side-effects
3
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +00004scriptversion=2012-03-27.16; # UTC
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +00005
6# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +00007# 2011, 2012 Free Software Foundation, Inc.
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +00008
9# This program is free software; you can redistribute it and/or modify
10# it under the terms of the GNU General Public License as published by
11# the Free Software Foundation; either version 2, or (at your option)
12# any later version.
13
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17# GNU General Public License for more details.
18
19# You should have received a copy of the GNU General Public License
20# along with this program. If not, see <http://www.gnu.org/licenses/>.
21
22# As a special exception to the GNU General Public License, if you
23# distribute this file as part of a program that contains a
24# configuration script generated by Autoconf, you may include it under
25# the same distribution terms that you use for the rest of that program.
26
27# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
28
29case $1 in
30 '')
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +000031 echo "$0: No command. Try '$0 --help' for more information." 1>&2
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +000032 exit 1;
33 ;;
34 -h | --h*)
35 cat <<\EOF
36Usage: depcomp [--help] [--version] PROGRAM [ARGS]
37
38Run PROGRAMS ARGS to compile a file, generating dependencies
39as side-effects.
40
41Environment variables:
42 depmode Dependency tracking mode.
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +000043 source Source file read by 'PROGRAMS ARGS'.
44 object Object file output by 'PROGRAMS ARGS'.
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +000045 DEPDIR directory where to store dependencies.
46 depfile Dependency file to output.
47 tmpdepfile Temporary file to use when outputting dependencies.
48 libtool Whether libtool is used (yes/no).
49
50Report bugs to <bug-automake@gnu.org>.
51EOF
52 exit $?
53 ;;
54 -v | --v*)
55 echo "depcomp $scriptversion"
56 exit $?
57 ;;
58esac
59
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +000060# A tabulation character.
61tab=' '
62# A newline character.
63nl='
64'
65
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +000066if test -z "$depmode" || test -z "$source" || test -z "$object"; then
67 echo "depcomp: Variables source, object and depmode must be set" 1>&2
68 exit 1
69fi
70
71# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
72depfile=${depfile-`echo "$object" |
73 sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
74tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
75
76rm -f "$tmpdepfile"
77
78# Some modes work just like other modes, but use different flags. We
79# parameterize here, but still list the modes in the big case below,
80# to make depend.m4 easier to write. Note that we *cannot* use a case
81# here, because this file can only contain one case statement.
82if test "$depmode" = hp; then
83 # HP compiler uses -M and no extra arg.
84 gccflag=-M
85 depmode=gcc
86fi
87
88if test "$depmode" = dashXmstdout; then
89 # This is just like dashmstdout with a different argument.
90 dashmflag=-xM
91 depmode=dashmstdout
92fi
93
94cygpath_u="cygpath -u -f -"
95if test "$depmode" = msvcmsys; then
96 # This is just like msvisualcpp but w/o cygpath translation.
97 # Just convert the backslash-escaped backslashes to single forward
98 # slashes to satisfy depend.m4
99 cygpath_u='sed s,\\\\,/,g'
100 depmode=msvisualcpp
101fi
102
103if test "$depmode" = msvc7msys; then
104 # This is just like msvc7 but w/o cygpath translation.
105 # Just convert the backslash-escaped backslashes to single forward
106 # slashes to satisfy depend.m4
107 cygpath_u='sed s,\\\\,/,g'
108 depmode=msvc7
109fi
110
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +0000111if test "$depmode" = xlc; then
112 # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations.
113 gccflag=-qmakedep=gcc,-MF
114 depmode=gcc
115fi
116
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +0000117case "$depmode" in
118gcc3)
119## gcc 3 implements dependency tracking that does exactly what
120## we want. Yay! Note: for some reason libtool 1.4 doesn't like
121## it if -MD -MP comes after the -MF stuff. Hmm.
122## Unfortunately, FreeBSD c89 acceptance of flags depends upon
123## the command line argument order; so add the flags where they
124## appear in depend2.am. Note that the slowdown incurred here
125## affects only configure: in makefiles, %FASTDEP% shortcuts this.
126 for arg
127 do
128 case $arg in
129 -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
130 *) set fnord "$@" "$arg" ;;
131 esac
132 shift # fnord
133 shift # $arg
134 done
135 "$@"
136 stat=$?
137 if test $stat -eq 0; then :
138 else
139 rm -f "$tmpdepfile"
140 exit $stat
141 fi
142 mv "$tmpdepfile" "$depfile"
143 ;;
144
145gcc)
146## There are various ways to get dependency output from gcc. Here's
147## why we pick this rather obscure method:
148## - Don't want to use -MD because we'd like the dependencies to end
149## up in a subdir. Having to rename by hand is ugly.
150## (We might end up doing this anyway to support other compilers.)
151## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
152## -MM, not -M (despite what the docs say).
153## - Using -M directly means running the compiler twice (even worse
154## than renaming).
155 if test -z "$gccflag"; then
156 gccflag=-MD,
157 fi
158 "$@" -Wp,"$gccflag$tmpdepfile"
159 stat=$?
160 if test $stat -eq 0; then :
161 else
162 rm -f "$tmpdepfile"
163 exit $stat
164 fi
165 rm -f "$depfile"
166 echo "$object : \\" > "$depfile"
167 alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
168## The second -e expression handles DOS-style file names with drive letters.
169 sed -e 's/^[^:]*: / /' \
170 -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +0000171## This next piece of magic avoids the "deleted header file" problem.
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +0000172## The problem is that when a header file which appears in a .P file
173## is deleted, the dependency causes make to die (because there is
174## typically no way to rebuild the header). We avoid this by adding
175## dummy dependencies for each header file. Too bad gcc doesn't do
176## this for us directly.
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +0000177 tr ' ' "$nl" < "$tmpdepfile" |
178## Some versions of gcc put a space before the ':'. On the theory
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +0000179## that the space means something, we add a space to the output as
180## well. hp depmode also adds that space, but also prefixes the VPATH
181## to the object. Take care to not repeat it in the output.
182## Some versions of the HPUX 10.20 sed can't process this invocation
183## correctly. Breaking it into two sed invocations is a workaround.
184 sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
185 | sed -e 's/$/ :/' >> "$depfile"
186 rm -f "$tmpdepfile"
187 ;;
188
189hp)
190 # This case exists only to let depend.m4 do its work. It works by
191 # looking at the text of this script. This case will never be run,
192 # since it is checked for above.
193 exit 1
194 ;;
195
196sgi)
197 if test "$libtool" = yes; then
198 "$@" "-Wp,-MDupdate,$tmpdepfile"
199 else
200 "$@" -MDupdate "$tmpdepfile"
201 fi
202 stat=$?
203 if test $stat -eq 0; then :
204 else
205 rm -f "$tmpdepfile"
206 exit $stat
207 fi
208 rm -f "$depfile"
209
210 if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
211 echo "$object : \\" > "$depfile"
212
213 # Clip off the initial element (the dependent). Don't try to be
214 # clever and replace this with sed code, as IRIX sed won't handle
215 # lines with more than a fixed number of characters (4096 in
216 # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +0000217 # the IRIX cc adds comments like '#:fec' to the end of the
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +0000218 # dependency line.
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +0000219 tr ' ' "$nl" < "$tmpdepfile" \
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +0000220 | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +0000221 tr "$nl" ' ' >> "$depfile"
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +0000222 echo >> "$depfile"
223
224 # The second pass generates a dummy entry for each header file.
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +0000225 tr ' ' "$nl" < "$tmpdepfile" \
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +0000226 | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
227 >> "$depfile"
228 else
229 # The sourcefile does not contain any dependencies, so just
230 # store a dummy comment line, to avoid errors with the Makefile
231 # "include basename.Plo" scheme.
232 echo "#dummy" > "$depfile"
233 fi
234 rm -f "$tmpdepfile"
235 ;;
236
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +0000237xlc)
238 # This case exists only to let depend.m4 do its work. It works by
239 # looking at the text of this script. This case will never be run,
240 # since it is checked for above.
241 exit 1
242 ;;
243
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +0000244aix)
245 # The C for AIX Compiler uses -M and outputs the dependencies
246 # in a .u file. In older versions, this file always lives in the
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +0000247 # current directory. Also, the AIX compiler puts '$object:' at the
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +0000248 # start of each line; $object doesn't have directory information.
249 # Version 6 uses the directory in both cases.
250 dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
251 test "x$dir" = "x$object" && dir=
252 base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
253 if test "$libtool" = yes; then
254 tmpdepfile1=$dir$base.u
255 tmpdepfile2=$base.u
256 tmpdepfile3=$dir.libs/$base.u
257 "$@" -Wc,-M
258 else
259 tmpdepfile1=$dir$base.u
260 tmpdepfile2=$dir$base.u
261 tmpdepfile3=$dir$base.u
262 "$@" -M
263 fi
264 stat=$?
265
266 if test $stat -eq 0; then :
267 else
268 rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
269 exit $stat
270 fi
271
272 for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
273 do
274 test -f "$tmpdepfile" && break
275 done
276 if test -f "$tmpdepfile"; then
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +0000277 # Each line is of the form 'foo.o: dependent.h'.
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +0000278 # Do two passes, one to just change these to
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +0000279 # '$object: dependent.h' and one to simply 'dependent.h:'.
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +0000280 sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +0000281 sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +0000282 else
283 # The sourcefile does not contain any dependencies, so just
284 # store a dummy comment line, to avoid errors with the Makefile
285 # "include basename.Plo" scheme.
286 echo "#dummy" > "$depfile"
287 fi
288 rm -f "$tmpdepfile"
289 ;;
290
291icc)
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +0000292 # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'.
293 # However on
294 # $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +0000295 # ICC 7.0 will fill foo.d with something like
296 # foo.o: sub/foo.c
297 # foo.o: sub/foo.h
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +0000298 # which is wrong. We want
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +0000299 # sub/foo.o: sub/foo.c
300 # sub/foo.o: sub/foo.h
301 # sub/foo.c:
302 # sub/foo.h:
303 # ICC 7.1 will output
304 # foo.o: sub/foo.c sub/foo.h
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +0000305 # and will wrap long lines using '\':
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +0000306 # foo.o: sub/foo.c ... \
307 # sub/foo.h ... \
308 # ...
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +0000309 # tcc 0.9.26 (FIXME still under development at the moment of writing)
310 # will emit a similar output, but also prepend the continuation lines
311 # with horizontal tabulation characters.
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +0000312 "$@" -MD -MF "$tmpdepfile"
313 stat=$?
314 if test $stat -eq 0; then :
315 else
316 rm -f "$tmpdepfile"
317 exit $stat
318 fi
319 rm -f "$depfile"
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +0000320 # Each line is of the form 'foo.o: dependent.h',
321 # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'.
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +0000322 # Do two passes, one to just change these to
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +0000323 # '$object: dependent.h' and one to simply 'dependent.h:'.
324 sed -e "s/^[ $tab][ $tab]*/ /" -e "s,^[^:]*:,$object :," \
325 < "$tmpdepfile" > "$depfile"
326 sed '
327 s/[ '"$tab"'][ '"$tab"']*/ /g
328 s/^ *//
329 s/ *\\*$//
330 s/^[^:]*: *//
331 /^$/d
332 /:$/d
333 s/$/ :/
334 ' < "$tmpdepfile" >> "$depfile"
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +0000335 rm -f "$tmpdepfile"
336 ;;
337
338hp2)
339 # The "hp" stanza above does not work with aCC (C++) and HP's ia64
340 # compilers, which have integrated preprocessors. The correct option
341 # to use with these is +Maked; it writes dependencies to a file named
342 # 'foo.d', which lands next to the object file, wherever that
343 # happens to be.
344 # Much of this is similar to the tru64 case; see comments there.
345 dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
346 test "x$dir" = "x$object" && dir=
347 base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
348 if test "$libtool" = yes; then
349 tmpdepfile1=$dir$base.d
350 tmpdepfile2=$dir.libs/$base.d
351 "$@" -Wc,+Maked
352 else
353 tmpdepfile1=$dir$base.d
354 tmpdepfile2=$dir$base.d
355 "$@" +Maked
356 fi
357 stat=$?
358 if test $stat -eq 0; then :
359 else
360 rm -f "$tmpdepfile1" "$tmpdepfile2"
361 exit $stat
362 fi
363
364 for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
365 do
366 test -f "$tmpdepfile" && break
367 done
368 if test -f "$tmpdepfile"; then
369 sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +0000370 # Add 'dependent.h:' lines.
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +0000371 sed -ne '2,${
372 s/^ *//
373 s/ \\*$//
374 s/$/:/
375 p
376 }' "$tmpdepfile" >> "$depfile"
377 else
378 echo "#dummy" > "$depfile"
379 fi
380 rm -f "$tmpdepfile" "$tmpdepfile2"
381 ;;
382
383tru64)
384 # The Tru64 compiler uses -MD to generate dependencies as a side
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +0000385 # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +0000386 # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +0000387 # dependencies in 'foo.d' instead, so we check for that too.
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +0000388 # Subdirectories are respected.
389 dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
390 test "x$dir" = "x$object" && dir=
391 base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
392
393 if test "$libtool" = yes; then
394 # With Tru64 cc, shared objects can also be used to make a
395 # static library. This mechanism is used in libtool 1.4 series to
396 # handle both shared and static libraries in a single compilation.
397 # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
398 #
399 # With libtool 1.5 this exception was removed, and libtool now
400 # generates 2 separate objects for the 2 libraries. These two
401 # compilations output dependencies in $dir.libs/$base.o.d and
402 # in $dir$base.o.d. We have to check for both files, because
403 # one of the two compilations can be disabled. We should prefer
404 # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
405 # automatically cleaned when .libs/ is deleted, while ignoring
406 # the former would cause a distcleancheck panic.
407 tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
408 tmpdepfile2=$dir$base.o.d # libtool 1.5
409 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
410 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
411 "$@" -Wc,-MD
412 else
413 tmpdepfile1=$dir$base.o.d
414 tmpdepfile2=$dir$base.d
415 tmpdepfile3=$dir$base.d
416 tmpdepfile4=$dir$base.d
417 "$@" -MD
418 fi
419
420 stat=$?
421 if test $stat -eq 0; then :
422 else
423 rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
424 exit $stat
425 fi
426
427 for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
428 do
429 test -f "$tmpdepfile" && break
430 done
431 if test -f "$tmpdepfile"; then
432 sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +0000433 sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +0000434 else
435 echo "#dummy" > "$depfile"
436 fi
437 rm -f "$tmpdepfile"
438 ;;
439
440msvc7)
441 if test "$libtool" = yes; then
442 showIncludes=-Wc,-showIncludes
443 else
444 showIncludes=-showIncludes
445 fi
446 "$@" $showIncludes > "$tmpdepfile"
447 stat=$?
448 grep -v '^Note: including file: ' "$tmpdepfile"
449 if test "$stat" = 0; then :
450 else
451 rm -f "$tmpdepfile"
452 exit $stat
453 fi
454 rm -f "$depfile"
455 echo "$object : \\" > "$depfile"
456 # The first sed program below extracts the file names and escapes
457 # backslashes for cygpath. The second sed program outputs the file
458 # name when reading, but also accumulates all include files in the
459 # hold buffer in order to output them again at the end. This only
460 # works with sed implementations that can handle large buffers.
461 sed < "$tmpdepfile" -n '
462/^Note: including file: *\(.*\)/ {
463 s//\1/
464 s/\\/\\\\/g
465 p
466}' | $cygpath_u | sort -u | sed -n '
467s/ /\\ /g
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +0000468s/\(.*\)/'"$tab"'\1 \\/p
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +0000469s/.\(.*\) \\/\1:/
470H
471$ {
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +0000472 s/.*/'"$tab"'/
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +0000473 G
474 p
475}' >> "$depfile"
476 rm -f "$tmpdepfile"
477 ;;
478
479msvc7msys)
480 # This case exists only to let depend.m4 do its work. It works by
481 # looking at the text of this script. This case will never be run,
482 # since it is checked for above.
483 exit 1
484 ;;
485
486#nosideeffect)
487 # This comment above is used by automake to tell side-effect
488 # dependency tracking mechanisms from slower ones.
489
490dashmstdout)
491 # Important note: in order to support this mode, a compiler *must*
492 # always write the preprocessed file to stdout, regardless of -o.
493 "$@" || exit $?
494
495 # Remove the call to Libtool.
496 if test "$libtool" = yes; then
497 while test "X$1" != 'X--mode=compile'; do
498 shift
499 done
500 shift
501 fi
502
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +0000503 # Remove '-o $object'.
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +0000504 IFS=" "
505 for arg
506 do
507 case $arg in
508 -o)
509 shift
510 ;;
511 $object)
512 shift
513 ;;
514 *)
515 set fnord "$@" "$arg"
516 shift # fnord
517 shift # $arg
518 ;;
519 esac
520 done
521
522 test -z "$dashmflag" && dashmflag=-M
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +0000523 # Require at least two characters before searching for ':'
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +0000524 # in the target name. This is to cope with DOS-style filenames:
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +0000525 # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +0000526 "$@" $dashmflag |
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +0000527 sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile"
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +0000528 rm -f "$depfile"
529 cat < "$tmpdepfile" > "$depfile"
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +0000530 tr ' ' "$nl" < "$tmpdepfile" | \
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +0000531## Some versions of the HPUX 10.20 sed can't process this invocation
532## correctly. Breaking it into two sed invocations is a workaround.
533 sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
534 rm -f "$tmpdepfile"
535 ;;
536
537dashXmstdout)
538 # This case only exists to satisfy depend.m4. It is never actually
539 # run, as this mode is specially recognized in the preamble.
540 exit 1
541 ;;
542
543makedepend)
544 "$@" || exit $?
545 # Remove any Libtool call
546 if test "$libtool" = yes; then
547 while test "X$1" != 'X--mode=compile'; do
548 shift
549 done
550 shift
551 fi
552 # X makedepend
553 shift
554 cleared=no eat=no
555 for arg
556 do
557 case $cleared in
558 no)
559 set ""; shift
560 cleared=yes ;;
561 esac
562 if test $eat = yes; then
563 eat=no
564 continue
565 fi
566 case "$arg" in
567 -D*|-I*)
568 set fnord "$@" "$arg"; shift ;;
569 # Strip any option that makedepend may not understand. Remove
570 # the object too, otherwise makedepend will parse it as a source file.
571 -arch)
572 eat=yes ;;
573 -*|$object)
574 ;;
575 *)
576 set fnord "$@" "$arg"; shift ;;
577 esac
578 done
579 obj_suffix=`echo "$object" | sed 's/^.*\././'`
580 touch "$tmpdepfile"
581 ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
582 rm -f "$depfile"
583 # makedepend may prepend the VPATH from the source file name to the object.
584 # No need to regex-escape $object, excess matching of '.' is harmless.
585 sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +0000586 sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +0000587## Some versions of the HPUX 10.20 sed can't process this invocation
588## correctly. Breaking it into two sed invocations is a workaround.
589 sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
590 rm -f "$tmpdepfile" "$tmpdepfile".bak
591 ;;
592
593cpp)
594 # Important note: in order to support this mode, a compiler *must*
595 # always write the preprocessed file to stdout.
596 "$@" || exit $?
597
598 # Remove the call to Libtool.
599 if test "$libtool" = yes; then
600 while test "X$1" != 'X--mode=compile'; do
601 shift
602 done
603 shift
604 fi
605
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +0000606 # Remove '-o $object'.
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +0000607 IFS=" "
608 for arg
609 do
610 case $arg in
611 -o)
612 shift
613 ;;
614 $object)
615 shift
616 ;;
617 *)
618 set fnord "$@" "$arg"
619 shift # fnord
620 shift # $arg
621 ;;
622 esac
623 done
624
625 "$@" -E |
626 sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
627 -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
628 sed '$ s: \\$::' > "$tmpdepfile"
629 rm -f "$depfile"
630 echo "$object : \\" > "$depfile"
631 cat < "$tmpdepfile" >> "$depfile"
632 sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
633 rm -f "$tmpdepfile"
634 ;;
635
636msvisualcpp)
637 # Important note: in order to support this mode, a compiler *must*
638 # always write the preprocessed file to stdout.
639 "$@" || exit $?
640
641 # Remove the call to Libtool.
642 if test "$libtool" = yes; then
643 while test "X$1" != 'X--mode=compile'; do
644 shift
645 done
646 shift
647 fi
648
649 IFS=" "
650 for arg
651 do
652 case "$arg" in
653 -o)
654 shift
655 ;;
656 $object)
657 shift
658 ;;
659 "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
660 set fnord "$@"
661 shift
662 shift
663 ;;
664 *)
665 set fnord "$@" "$arg"
666 shift
667 shift
668 ;;
669 esac
670 done
671 "$@" -E 2>/dev/null |
672 sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
673 rm -f "$depfile"
674 echo "$object : \\" > "$depfile"
sergeyu@chromium.org6b6bee22013-02-28 21:17:26 +0000675 sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
676 echo "$tab" >> "$depfile"
sergeyu@chromium.org885f2ff2012-10-17 22:31:52 +0000677 sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
678 rm -f "$tmpdepfile"
679 ;;
680
681msvcmsys)
682 # This case exists only to let depend.m4 do its work. It works by
683 # looking at the text of this script. This case will never be run,
684 # since it is checked for above.
685 exit 1
686 ;;
687
688none)
689 exec "$@"
690 ;;
691
692*)
693 echo "Unknown depmode $depmode" 1>&2
694 exit 1
695 ;;
696esac
697
698exit 0
699
700# Local Variables:
701# mode: shell-script
702# sh-indentation: 2
703# eval: (add-hook 'write-file-hooks 'time-stamp)
704# time-stamp-start: "scriptversion="
705# time-stamp-format: "%:y-%02m-%02d.%02H"
706# time-stamp-time-zone: "UTC"
707# time-stamp-end: "; # UTC"
708# End: