59
# Get the directory component of the given path, and save it in the
60
# global variables '$dir'. Note that this directory component will
61
# be either empty or ending with a '/' character. This is deliberate.
65
*/*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
70
# Get the suffix-stripped basename of the given path, and save it the
71
# global variable '$base'.
74
base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
77
# If no dependency file was actually created by the compiler invocation,
78
# we still have to create a dummy depfile, to avoid errors with the
79
# Makefile "include basename.Plo" scheme.
82
echo "#dummy" > "$depfile"
85
# Factor out some common post-processing of the generated depfile.
86
# Requires the auxiliary global variable '$tmpdepfile' to be set.
87
aix_post_process_depfile ()
89
# If the compiler actually managed to produce a dependency file,
91
if test -f "$tmpdepfile"; then
92
# Each line is of the form 'foo.o: dependency.h'.
93
# Do two passes, one to just change these to
94
# $object: dependency.h
95
# and one to simply output
97
# which is needed to avoid the deleted-header problem.
98
{ sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
99
sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
107
# A tabulation character.
109
# A newline character.
112
# Character ranges might be problematic outside the C locale.
113
# These definitions help.
114
upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
115
lower=abcdefghijklmnopqrstuvwxyz
117
alpha=${upper}${lower}
62
119
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
63
120
echo "depcomp: Variables source, object and depmode must be set" 1>&2
84
144
if test "$depmode" = dashXmstdout; then
85
# This is just like dashmstdout with a different argument.
145
# This is just like dashmstdout with a different argument.
150
cygpath_u="cygpath -u -f -"
151
if test "$depmode" = msvcmsys; then
152
# This is just like msvisualcpp but w/o cygpath translation.
153
# Just convert the backslash-escaped backslashes to single forward
154
# slashes to satisfy depend.m4
155
cygpath_u='sed s,\\\\,/,g'
159
if test "$depmode" = msvc7msys; then
160
# This is just like msvc7 but w/o cygpath translation.
161
# Just convert the backslash-escaped backslashes to single forward
162
# slashes to satisfy depend.m4
163
cygpath_u='sed s,\\\\,/,g'
167
if test "$depmode" = xlc; then
168
# IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
169
gccflag=-qmakedep=gcc,-MF
90
173
case "$depmode" in
131
217
"$@" -Wp,"$gccflag$tmpdepfile"
133
if test $stat -eq 0; then :
219
if test $stat -ne 0; then
135
220
rm -f "$tmpdepfile"
139
224
echo "$object : \\" > "$depfile"
140
alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
141
## The second -e expression handles DOS-style file names with drive letters.
225
# The second -e expression handles DOS-style file names with drive
142
227
sed -e 's/^[^:]*: / /' \
143
228
-e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
144
## This next piece of magic avoids the `deleted header file' problem.
229
## This next piece of magic avoids the "deleted header file" problem.
145
230
## The problem is that when a header file which appears in a .P file
146
231
## is deleted, the dependency causes make to die (because there is
147
232
## typically no way to rebuild the header). We avoid this by adding
148
233
## dummy dependencies for each header file. Too bad gcc doesn't do
149
234
## this for us directly.
152
## Some versions of gcc put a space before the `:'. On the theory
235
## Some versions of gcc put a space before the ':'. On the theory
153
236
## that the space means something, we add a space to the output as
237
## well. hp depmode also adds that space, but also prefixes the VPATH
238
## to the object. Take care to not repeat it in the output.
155
239
## Some versions of the HPUX 10.20 sed can't process this invocation
156
240
## correctly. Breaking it into two sed invocations is a workaround.
157
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
241
tr ' ' "$nl" < "$tmpdepfile" \
242
| sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
243
| sed -e 's/$/ :/' >> "$depfile"
158
244
rm -f "$tmpdepfile"
182
267
if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
183
268
echo "$object : \\" > "$depfile"
185
269
# Clip off the initial element (the dependent). Don't try to be
186
270
# clever and replace this with sed code, as IRIX sed won't handle
187
271
# lines with more than a fixed number of characters (4096 in
188
272
# IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
189
# the IRIX cc adds comments like `#:fec' to the end of the
273
# the IRIX cc adds comments like '#:fec' to the end of the
190
274
# dependency line.
193
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
275
tr ' ' "$nl" < "$tmpdepfile" \
276
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
277
| tr "$nl" ' ' >> "$depfile"
198
279
# The second pass generates a dummy entry for each header file.
201
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
280
tr ' ' "$nl" < "$tmpdepfile" \
281
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
204
# The sourcefile does not contain any dependencies, so just
205
# store a dummy comment line, to avoid errors with the Makefile
206
# "include basename.Plo" scheme.
207
echo "#dummy" > "$depfile"
209
286
rm -f "$tmpdepfile"
290
# This case exists only to let depend.m4 do its work. It works by
291
# looking at the text of this script. This case will never be run,
292
# since it is checked for above.
213
297
# The C for AIX Compiler uses -M and outputs the dependencies
214
298
# in a .u file. In older versions, this file always lives in the
215
# current directory. Also, the AIX compiler puts `$object:' at the
299
# current directory. Also, the AIX compiler puts '$object:' at the
216
300
# start of each line; $object doesn't have directory information.
217
301
# Version 6 uses the directory in both cases.
218
stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
219
tmpdepfile="$stripped.u"
302
set_dir_from "$object"
303
set_base_from "$object"
220
304
if test "$libtool" = yes; then
305
tmpdepfile1=$dir$base.u
307
tmpdepfile3=$dir.libs/$base.u
310
tmpdepfile1=$dir$base.u
311
tmpdepfile2=$dir$base.u
312
tmpdepfile3=$dir$base.u
227
if test -f "$tmpdepfile"; then :
229
stripped=`echo "$stripped" | sed 's,^.*/,,'`
230
tmpdepfile="$stripped.u"
316
if test $stat -ne 0; then
317
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
233
if test $stat -eq 0; then :
321
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
323
test -f "$tmpdepfile" && break
325
aix_post_process_depfile
329
# tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
330
# FIXME: That version still under development at the moment of writing.
331
# Make that this statement remains true also for stable, released
333
# It will wrap lines (doesn't matter whether long or short) with a
334
# trailing '\', as in:
340
# It will put a trailing '\' even on the last line, and will use leading
341
# spaces rather than leading tabs (at least since its commit 0394caf7
342
# "Emit spaces for -MD").
343
"$@" -MD -MF "$tmpdepfile"
345
if test $stat -ne 0; then
235
346
rm -f "$tmpdepfile"
239
if test -f "$tmpdepfile"; then
240
outname="$stripped.o"
241
# Each line is of the form `foo.o: dependent.h'.
242
# Do two passes, one to just change these to
243
# `$object: dependent.h' and one to simply `dependent.h:'.
244
sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
245
sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
247
# The sourcefile does not contain any dependencies, so just
248
# store a dummy comment line, to avoid errors with the Makefile
249
# "include basename.Plo" scheme.
250
echo "#dummy" > "$depfile"
350
# Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
351
# We have to change lines of the first kind to '$object: \'.
352
sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
353
# And for each line of the second kind, we have to emit a 'dep.h:'
354
# dummy dependency, to avoid the deleted-header problem.
355
sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
252
356
rm -f "$tmpdepfile"
256
# Intel's C compiler understands `-MD -MF file'. However on
257
# icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
258
# ICC 7.0 will fill foo.d with something like
261
# which is wrong. We want:
262
# sub/foo.o: sub/foo.c
263
# sub/foo.o: sub/foo.h
266
# ICC 7.1 will output
359
## The order of this option in the case statement is important, since the
360
## shell code in configure will try each of these formats in the order
361
## listed in this file. A plain '-MD' option would be understood by many
362
## compilers, so we must ensure this comes after the gcc and icc options.
364
# Portland's C compiler understands '-MD'.
365
# Will always output deps to 'file.d' where file is the root name of the
366
# source file under compilation, even if file resides in a subdirectory.
367
# The object file name does not affect the name of the '.d' file.
368
# pgcc 10.2 will output
267
369
# foo.o: sub/foo.c sub/foo.h
268
# and will wrap long lines using \ :
370
# and will wrap long lines using '\' :
269
371
# foo.o: sub/foo.c ... \
270
372
# sub/foo.h ... \
273
"$@" -MD -MF "$tmpdepfile"
275
if test $stat -eq 0; then :
374
set_dir_from "$object"
375
# Use the source, not the object, to determine the base name, since
376
# that's sadly what pgcc will do too.
377
set_base_from "$source"
380
# For projects that build the same source file twice into different object
381
# files, the pgcc approach of using the *source* file root name can cause
382
# problems in parallel builds. Use a locking strategy to avoid stomping on
383
# the same $tmpdepfile.
386
echo '$0: caught signal, cleaning up...' >&2
392
while test $i -gt 0; do
393
# mkdir is a portable test-and-set.
394
if mkdir "$lockdir" 2>/dev/null; then
395
# This process acquired the lock.
402
# If the lock is being held by a different process, wait
403
# until the winning process is done or we timeout.
404
while test -d "$lockdir" && test $i -gt 0; do
412
if test $i -le 0; then
413
echo "$0: failed to acquire lock after $numtries attempts" >&2
414
echo "$0: check lockdir '$lockdir'" >&2
418
if test $stat -ne 0; then
277
419
rm -f "$tmpdepfile"
321
461
test -f "$tmpdepfile" && break
323
463
if test -f "$tmpdepfile"; then
324
sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
325
# Add `dependent.h:' lines.
326
sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
464
sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
465
# Add 'dependent.h:' lines.
471
}' "$tmpdepfile" >> "$depfile"
328
echo "#dummy" > "$depfile"
330
475
rm -f "$tmpdepfile" "$tmpdepfile2"
334
# The Tru64 compiler uses -MD to generate dependencies as a side
335
# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
336
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
337
# dependencies in `foo.d' instead, so we check for that too.
338
# Subdirectories are respected.
339
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
340
test "x$dir" = "x$object" && dir=
341
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
343
if test "$libtool" = yes; then
344
# With Tru64 cc, shared objects can also be used to make a
345
# static library. This mechanism is used in libtool 1.4 series to
346
# handle both shared and static libraries in a single compilation.
347
# With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
349
# With libtool 1.5 this exception was removed, and libtool now
350
# generates 2 separate objects for the 2 libraries. These two
351
# compilations output dependencies in $dir.libs/$base.o.d and
352
# in $dir$base.o.d. We have to check for both files, because
353
# one of the two compilations can be disabled. We should prefer
354
# $dir$base.o.d over $dir.libs/$base.o.d because the latter is
355
# automatically cleaned when .libs/ is deleted, while ignoring
356
# the former would cause a distcleancheck panic.
357
tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
358
tmpdepfile2=$dir$base.o.d # libtool 1.5
359
tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
360
tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
363
tmpdepfile1=$dir$base.o.d
364
tmpdepfile2=$dir$base.d
365
tmpdepfile3=$dir$base.d
366
tmpdepfile4=$dir$base.d
371
if test $stat -eq 0; then :
373
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
377
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
379
test -f "$tmpdepfile" && break
381
if test -f "$tmpdepfile"; then
382
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
383
# That's a tab and a space in the [].
384
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
386
echo "#dummy" > "$depfile"
479
# The Tru64 compiler uses -MD to generate dependencies as a side
480
# effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
481
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
482
# dependencies in 'foo.d' instead, so we check for that too.
483
# Subdirectories are respected.
484
set_dir_from "$object"
485
set_base_from "$object"
487
if test "$libtool" = yes; then
488
# Libtool generates 2 separate objects for the 2 libraries. These
489
# two compilations output dependencies in $dir.libs/$base.o.d and
490
# in $dir$base.o.d. We have to check for both files, because
491
# one of the two compilations can be disabled. We should prefer
492
# $dir$base.o.d over $dir.libs/$base.o.d because the latter is
493
# automatically cleaned when .libs/ is deleted, while ignoring
494
# the former would cause a distcleancheck panic.
495
tmpdepfile1=$dir$base.o.d # libtool 1.5
496
tmpdepfile2=$dir.libs/$base.o.d # Likewise.
497
tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504
500
tmpdepfile1=$dir$base.d
501
tmpdepfile2=$dir$base.d
502
tmpdepfile3=$dir$base.d
507
if test $stat -ne 0; then
508
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
512
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
514
test -f "$tmpdepfile" && break
516
# Same post-processing that is required for AIX mode.
517
aix_post_process_depfile
521
if test "$libtool" = yes; then
522
showIncludes=-Wc,-showIncludes
524
showIncludes=-showIncludes
526
"$@" $showIncludes > "$tmpdepfile"
528
grep -v '^Note: including file: ' "$tmpdepfile"
529
if test $stat -ne 0; then
534
echo "$object : \\" > "$depfile"
535
# The first sed program below extracts the file names and escapes
536
# backslashes for cygpath. The second sed program outputs the file
537
# name when reading, but also accumulates all include files in the
538
# hold buffer in order to output them again at the end. This only
539
# works with sed implementations that can handle large buffers.
540
sed < "$tmpdepfile" -n '
541
/^Note: including file: *\(.*\)/ {
545
}' | $cygpath_u | sort -u | sed -n '
547
s/\(.*\)/'"$tab"'\1 \\/p
555
echo >> "$depfile" # make sure the fragment doesn't end with a backslash
560
# This case exists only to let depend.m4 do its work. It works by
561
# looking at the text of this script. This case will never be run,
562
# since it is checked for above.
392
567
# This comment above is used by automake to tell side-effect
451
626
# Remove any Libtool call
452
627
if test "$libtool" = yes; then
453
while test $1 != '--mode=compile'; do
628
while test "X$1" != 'X--mode=compile'; do
643
if test $eat = yes; then
469
649
set fnord "$@" "$arg"; shift ;;
470
650
# Strip any option that makedepend may not understand. Remove
471
651
# the object too, otherwise makedepend will parse it as a source file.
475
657
set fnord "$@" "$arg"; shift ;;
478
obj_suffix="`echo $object | sed 's/^.*\././'`"
660
obj_suffix=`echo "$object" | sed 's/^.*\././'`
479
661
touch "$tmpdepfile"
480
662
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
482
cat < "$tmpdepfile" > "$depfile"
483
sed '1,2d' "$tmpdepfile" | tr ' ' '
485
## Some versions of the HPUX 10.20 sed can't process this invocation
486
## correctly. Breaking it into two sed invocations is a workaround.
487
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
664
# makedepend may prepend the VPATH from the source file name to the object.
665
# No need to regex-escape $object, excess matching of '.' is harmless.
666
sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
667
# Some versions of the HPUX 10.20 sed can't process the last invocation
668
# correctly. Breaking it into two sed invocations is a workaround.
669
sed '1,2d' "$tmpdepfile" \
671
| sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
672
| sed -e 's/$/ :/' >> "$depfile"
488
673
rm -f "$tmpdepfile" "$tmpdepfile".bak
535
720
# Important note: in order to support this mode, a compiler *must*
536
# always write the preprocessed file to stdout, regardless of -o,
537
# because we must use -o when running libtool.
721
# always write the preprocessed file to stdout.
724
# Remove the call to Libtool.
725
if test "$libtool" = yes; then
726
while test "X$1" != 'X--mode=compile'; do
543
742
"-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
549
set fnord "$@" "$arg"
748
set fnord "$@" "$arg"
556
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
754
"$@" -E 2>/dev/null |
755
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
558
757
echo "$object : \\" > "$depfile"
559
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
560
echo " " >> "$depfile"
561
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
758
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
759
echo "$tab" >> "$depfile"
760
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
562
761
rm -f "$tmpdepfile"
765
# This case exists only to let depend.m4 do its work. It works by
766
# looking at the text of this script. This case will never be run,
767
# since it is checked for above.