>From d847fe2011811a1f924ac4bb0502d4802ab94c5e Mon Sep 17 00:00:00 2001
Message-Id:
From: Stefano Lattarini
Date: Thu, 12 Jul 2012 22:37:24 +0200
Subject: [PATCH] depcomp: get rid of file-lock hack for Portland Group
Compilers
* lib/depcomp (pgcc): The modern pgcc compilers seems to accept an
argument for the '-MD' option (as in "-MD,depfile"), according to
, and we can use this feature
to greatly simplify our code, in particular getting rid of a brittle
hack based on file locks.
Signed-off-by: Stefano Lattarini
---
lib/depcomp | 54 ++++++------------------------------------------------
1 file changed, 6 insertions(+), 48 deletions(-)
diff --git a/lib/depcomp b/lib/depcomp
index 0544c68..7adbeab 100755
--- a/lib/depcomp
+++ b/lib/depcomp
@@ -334,62 +334,20 @@ icc)
rm -f "$tmpdepfile"
;;
-## The order of this option in the case statement is important, since the
-## shell code in configure will try each of these formats in the order
-## listed in this file. A plain '-MD' option would be understood by many
+## The order of this option in the case statement might important, since
+## the shell code in configure will try each of these formats in the order
+## listed in this file. The '-MD' below might be understood by many
## compilers, so we must ensure this comes after the gcc and icc options.
pgcc)
- # Portland's C compiler understands '-MD'.
- # Will always output deps to 'file.d' where file is the root name of the
- # source file under compilation, even if file resides in a subdirectory.
- # The object file name does not affect the name of the '.d' file.
+ # Portland's C compiler understands '-MF,depfile'.
# pgcc 10.2 will output
# foo.o: sub/foo.c sub/foo.h
# and will wrap long lines using '\' :
# foo.o: sub/foo.c ... \
# sub/foo.h ... \
# ...
- dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
- test "x$dir" = "x$object" && dir=
- # Use the source, not the object, to determine the base name, since
- # that's sadly what pgcc will do too.
- base=`echo "$source" | sed -e 's|^.*/||' -e 's/\.[-_a-zA-Z0-9]*$//'`
- tmpdepfile="$base.d"
-
- # For projects that build the same source file twice into different object
- # files, the pgcc approach of using the *source* file root name can cause
- # problems in parallel builds. Use a locking strategy to avoid stomping on
- # the same $tmpdepfile.
- lockdir="$base.d-lock"
- trap "echo '$0: caught signal, cleaning up...' >&2; rm -rf $lockdir" 1 2 13 15
- numtries=100
- i=$numtries
- while test $i -gt 0 ; do
- # mkdir is a portable test-and-set.
- if mkdir $lockdir 2>/dev/null; then
- # This process acquired the lock.
- "$@" -MD
- stat=$?
- # Release the lock.
- rm -rf $lockdir
- break
- else
- ## the lock is being held by a different process,
- ## wait until the winning process is done or we timeout
- while test -d $lockdir && test $i -gt 0; do
- sleep 1
- i=`expr $i - 1`
- done
- fi
- i=`expr $i - 1`
- done
- trap - 1 2 13 15
- if test $i -le 0; then
- echo "$0: failed to acquire lock after $numtries attempts" >&2
- echo "$0: check lockdir '$lockdir'" >&2
- exit 1
- fi
-
+ "$@" -MD,"$tempfile"
+ stat=$?
if test $stat -ne 0; then
rm -f "$tmpdepfile"
exit $stat
--
1.7.9.5