2
2
# depcomp - compile a program generating dependencies as side-effects
4
scriptversion=2009-04-28.21; # UTC
4
scriptversion=2012-03-27.16; # UTC
6
# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
7
# Software Foundation, Inc.
6
# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
7
# 2011, 2012 Free Software Foundation, Inc.
9
9
# This program is free software; you can redistribute it and/or modify
10
10
# it under the terms of the GNU General Public License as published by
41
41
Environment variables:
42
42
depmode Dependency tracking mode.
43
source Source file read by `PROGRAMS ARGS'.
44
object Object file output by `PROGRAMS ARGS'.
43
source Source file read by 'PROGRAMS ARGS'.
44
object Object file output by 'PROGRAMS ARGS'.
45
45
DEPDIR directory where to store dependencies.
46
46
depfile Dependency file to output.
47
tmpdepfile Temporary file to use when outputing dependencies.
47
tmpdepfile Temporary file to use when outputting dependencies.
48
48
libtool Whether libtool is used (yes/no).
50
50
Report bugs to <bug-automake@gnu.org>.
90
96
# This is just like msvisualcpp but w/o cygpath translation.
91
97
# Just convert the backslash-escaped backslashes to single forward
92
98
# slashes to satisfy depend.m4
93
cygpath_u="sed s,\\\\\\\\,/,g"
99
cygpath_u='sed s,\\\\,/,g'
94
100
depmode=msvisualcpp
103
if 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'
111
if test "$depmode" = xlc; then
112
# IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations.
113
gccflag=-qmakedep=gcc,-MF
97
117
case "$depmode" in
99
119
## gcc 3 implements dependency tracking that does exactly what
148
168
## The second -e expression handles DOS-style file names with drive letters.
149
169
sed -e 's/^[^:]*: / /' \
150
170
-e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
151
## This next piece of magic avoids the `deleted header file' problem.
171
## This next piece of magic avoids the "deleted header file" problem.
152
172
## The problem is that when a header file which appears in a .P file
153
173
## is deleted, the dependency causes make to die (because there is
154
174
## typically no way to rebuild the header). We avoid this by adding
155
175
## dummy dependencies for each header file. Too bad gcc doesn't do
156
176
## this for us directly.
159
## Some versions of gcc put a space before the `:'. On the theory
177
tr ' ' "$nl" < "$tmpdepfile" |
178
## Some versions of gcc put a space before the ':'. On the theory
160
179
## 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.
162
182
## Some versions of the HPUX 10.20 sed can't process this invocation
163
183
## correctly. Breaking it into two sed invocations is a workaround.
164
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
184
sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
185
| sed -e 's/$/ :/' >> "$depfile"
165
186
rm -f "$tmpdepfile"
193
214
# clever and replace this with sed code, as IRIX sed won't handle
194
215
# lines with more than a fixed number of characters (4096 in
195
216
# IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
196
# the IRIX cc adds comments like `#:fec' to the end of the
217
# the IRIX cc adds comments like '#:fec' to the end of the
197
218
# dependency line.
219
tr ' ' "$nl" < "$tmpdepfile" \
200
220
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
221
tr "$nl" ' ' >> "$depfile"
203
222
echo >> "$depfile"
205
224
# The second pass generates a dummy entry for each header file.
225
tr ' ' "$nl" < "$tmpdepfile" \
208
226
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
216
234
rm -f "$tmpdepfile"
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.
220
245
# The C for AIX Compiler uses -M and outputs the dependencies
221
246
# in a .u file. In older versions, this file always lives in the
222
# current directory. Also, the AIX compiler puts `$object:' at the
247
# current directory. Also, the AIX compiler puts '$object:' at the
223
248
# start of each line; $object doesn't have directory information.
224
249
# Version 6 uses the directory in both cases.
225
250
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
249
274
test -f "$tmpdepfile" && break
251
276
if test -f "$tmpdepfile"; then
252
# Each line is of the form `foo.o: dependent.h'.
277
# Each line is of the form 'foo.o: dependent.h'.
253
278
# Do two passes, one to just change these to
254
# `$object: dependent.h' and one to simply `dependent.h:'.
279
# '$object: dependent.h' and one to simply 'dependent.h:'.
255
280
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
256
# That's a tab and a space in the [].
257
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
281
sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
259
283
# The sourcefile does not contain any dependencies, so just
260
284
# store a dummy comment line, to avoid errors with the Makefile
268
# Intel's C compiler understands `-MD -MF file'. However on
269
# icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
292
# Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'.
294
# $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c
270
295
# ICC 7.0 will fill foo.d with something like
271
296
# foo.o: sub/foo.c
272
297
# foo.o: sub/foo.h
273
# which is wrong. We want:
298
# which is wrong. We want
274
299
# sub/foo.o: sub/foo.c
275
300
# sub/foo.o: sub/foo.h
278
303
# ICC 7.1 will output
279
304
# foo.o: sub/foo.c sub/foo.h
280
# and will wrap long lines using \ :
305
# and will wrap long lines using '\':
281
306
# foo.o: sub/foo.c ... \
282
307
# sub/foo.h ... \
309
# 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.
285
312
"$@" -MD -MF "$tmpdepfile"
287
314
if test $stat -eq 0; then :
293
# Each line is of the form `foo.o: dependent.h',
294
# or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
320
# Each line is of the form 'foo.o: dependent.h',
321
# or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'.
295
322
# Do two passes, one to just change these to
296
# `$object: dependent.h' and one to simply `dependent.h:'.
297
sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
298
# Some versions of the HPUX 10.20 sed can't process this invocation
299
# correctly. Breaking it into two sed invocations is a workaround.
300
sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
301
sed -e 's/$/ :/' >> "$depfile"
323
# '$object: dependent.h' and one to simply 'dependent.h:'.
324
sed -e "s/^[ $tab][ $tab]*/ /" -e "s,^[^:]*:,$object :," \
325
< "$tmpdepfile" > "$depfile"
327
s/[ '"$tab"'][ '"$tab"']*/ /g
334
' < "$tmpdepfile" >> "$depfile"
302
335
rm -f "$tmpdepfile"
335
368
if test -f "$tmpdepfile"; then
336
369
sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
337
# Add `dependent.h:' lines.
370
# Add 'dependent.h:' lines.
351
384
# The Tru64 compiler uses -MD to generate dependencies as a side
352
# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
385
# effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
353
386
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
354
# dependencies in `foo.d' instead, so we check for that too.
387
# dependencies in 'foo.d' instead, so we check for that too.
355
388
# Subdirectories are respected.
356
389
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
357
390
test "x$dir" = "x$object" && dir=
398
431
if test -f "$tmpdepfile"; then
399
432
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
400
# That's a tab and a space in the [].
401
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
433
sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
403
435
echo "#dummy" > "$depfile"
405
437
rm -f "$tmpdepfile"
441
if test "$libtool" = yes; then
442
showIncludes=-Wc,-showIncludes
444
showIncludes=-showIncludes
446
"$@" $showIncludes > "$tmpdepfile"
448
grep -v '^Note: including file: ' "$tmpdepfile"
449
if test "$stat" = 0; then :
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: *\(.*\)/ {
466
}' | $cygpath_u | sort -u | sed -n '
468
s/\(.*\)/'"$tab"'\1 \\/p
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.
409
487
# This comment above is used by automake to tell side-effect
410
488
# dependency tracking mechanisms from slower ones.
444
522
test -z "$dashmflag" && dashmflag=-M
445
# Require at least two characters before searching for `:'
523
# Require at least two characters before searching for ':'
446
524
# in the target name. This is to cope with DOS-style filenames:
447
# a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
525
# a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
448
526
"$@" $dashmflag |
449
sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
527
sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile"
451
529
cat < "$tmpdepfile" > "$depfile"
453
' < "$tmpdepfile" | \
530
tr ' ' "$nl" < "$tmpdepfile" | \
454
531
## Some versions of the HPUX 10.20 sed can't process this invocation
455
532
## correctly. Breaking it into two sed invocations is a workaround.
456
533
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
503
580
touch "$tmpdepfile"
504
581
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
506
cat < "$tmpdepfile" > "$depfile"
507
sed '1,2d' "$tmpdepfile" | tr ' ' '
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"
586
sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \
509
587
## Some versions of the HPUX 10.20 sed can't process this invocation
510
588
## correctly. Breaking it into two sed invocations is a workaround.
511
589
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
594
672
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
596
674
echo "$object : \\" > "$depfile"
597
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
598
echo " " >> "$depfile"
675
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
676
echo "$tab" >> "$depfile"
599
677
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
600
678
rm -f "$tmpdepfile"