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