1 |
|
#! /bin/sh |
2 |
|
# depcomp - compile a program generating dependencies as side-effects |
3 |
|
|
4 |
< |
scriptversion=2012-03-27.16; # UTC |
4 |
> |
scriptversion=2012-07-12.20; # UTC |
5 |
|
|
6 |
|
# Copyright (C) 1999-2012 Free Software Foundation, Inc. |
7 |
|
|
334 |
|
rm -f "$tmpdepfile" |
335 |
|
;; |
336 |
|
|
337 |
+ |
## The order of this option in the case statement is important, since the |
338 |
+ |
## shell code in configure will try each of these formats in the order |
339 |
+ |
## listed in this file. A plain '-MD' option would be understood by many |
340 |
+ |
## compilers, so we must ensure this comes after the gcc and icc options. |
341 |
+ |
pgcc) |
342 |
+ |
# Portland's C compiler understands '-MD'. |
343 |
+ |
# Will always output deps to 'file.d' where file is the root name of the |
344 |
+ |
# source file under compilation, even if file resides in a subdirectory. |
345 |
+ |
# The object file name does not affect the name of the '.d' file. |
346 |
+ |
# pgcc 10.2 will output |
347 |
+ |
# foo.o: sub/foo.c sub/foo.h |
348 |
+ |
# and will wrap long lines using '\' : |
349 |
+ |
# foo.o: sub/foo.c ... \ |
350 |
+ |
# sub/foo.h ... \ |
351 |
+ |
# ... |
352 |
+ |
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` |
353 |
+ |
test "x$dir" = "x$object" && dir= |
354 |
+ |
# Use the source, not the object, to determine the base name, since |
355 |
+ |
# that's sadly what pgcc will do too. |
356 |
+ |
base=`echo "$source" | sed -e 's|^.*/||' -e 's/\.[-_a-zA-Z0-9]*$//'` |
357 |
+ |
tmpdepfile="$base.d" |
358 |
+ |
|
359 |
+ |
# For projects that build the same source file twice into different object |
360 |
+ |
# files, the pgcc approach of using the *source* file root name can cause |
361 |
+ |
# problems in parallel builds. Use a locking strategy to avoid stomping on |
362 |
+ |
# the same $tmpdepfile. |
363 |
+ |
lockdir="$base.d-lock" |
364 |
+ |
trap "echo '$0: caught signal, cleaning up...' >&2; rm -rf $lockdir" 1 2 13 15 |
365 |
+ |
numtries=100 |
366 |
+ |
i=$numtries |
367 |
+ |
while test $i -gt 0 ; do |
368 |
+ |
# mkdir is a portable test-and-set. |
369 |
+ |
if mkdir $lockdir 2>/dev/null; then |
370 |
+ |
# This process acquired the lock. |
371 |
+ |
"$@" -MD |
372 |
+ |
stat=$? |
373 |
+ |
# Release the lock. |
374 |
+ |
rm -rf $lockdir |
375 |
+ |
break |
376 |
+ |
else |
377 |
+ |
## the lock is being held by a different process, |
378 |
+ |
## wait until the winning process is done or we timeout |
379 |
+ |
while test -d $lockdir && test $i -gt 0; do |
380 |
+ |
sleep 1 |
381 |
+ |
i=`expr $i - 1` |
382 |
+ |
done |
383 |
+ |
fi |
384 |
+ |
i=`expr $i - 1` |
385 |
+ |
done |
386 |
+ |
trap - 1 2 13 15 |
387 |
+ |
if test $i -le 0; then |
388 |
+ |
echo "$0: failed to acquire lock after $numtries attempts" >&2 |
389 |
+ |
echo "$0: check lockdir '$lockdir'" >&2 |
390 |
+ |
exit 1 |
391 |
+ |
fi |
392 |
+ |
|
393 |
+ |
if test $stat -ne 0; then |
394 |
+ |
rm -f "$tmpdepfile" |
395 |
+ |
exit $stat |
396 |
+ |
fi |
397 |
+ |
rm -f "$depfile" |
398 |
+ |
# Each line is of the form `foo.o: dependent.h', |
399 |
+ |
# or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. |
400 |
+ |
# Do two passes, one to just change these to |
401 |
+ |
# `$object: dependent.h' and one to simply `dependent.h:'. |
402 |
+ |
sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" |
403 |
+ |
# Some versions of the HPUX 10.20 sed can't process this invocation |
404 |
+ |
# correctly. Breaking it into two sed invocations is a workaround. |
405 |
+ |
sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | |
406 |
+ |
sed -e 's/$/ :/' >> "$depfile" |
407 |
+ |
rm -f "$tmpdepfile" |
408 |
+ |
;; |
409 |
+ |
|
410 |
|
hp2) |
411 |
|
# The "hp" stanza above does not work with aCC (C++) and HP's ia64 |
412 |
|
# compilers, which have integrated preprocessors. The correct option |