From: Akim Demaille Date: Wed, 1 Oct 2003 07:14:32 +0000 (+0000) Subject: * lib/Automake/XFile.pm: Use Errno. X-Git-Tag: Release-1-7b~38 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0a46c5b4947313a1f7460f9bd3044bf2c755a3dd;p=thirdparty%2Fautomake.git * lib/Automake/XFile.pm: Use Errno. (lock): Ignore ENOLCK errors. Problem reported Andreas Schwab in . --- diff --git a/ChangeLog b/ChangeLog index c8e579b6b..d4de592f5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2003-10-01 Paul Eggert + + * lib/Automake/XFile.pm: Use Errno. + (lock): Ignore ENOLCK errors. Problem reported Andreas Schwab in + . + 2003-09-30 Tom Tromey * lib/Automake/Options.pm (_process_option_list): Recognize diff --git a/lib/Automake/XFile.pm b/lib/Automake/XFile.pm index c2b3e63d4..8c719e30f 100644 --- a/lib/Automake/XFile.pm +++ b/lib/Automake/XFile.pm @@ -87,6 +87,7 @@ require 5.000; use strict; use vars qw($VERSION @EXPORT @EXPORT_OK $AUTOLOAD @ISA); use Carp; +use Errno; use IO::File; use File::Basename; use Automake::ChannelDefs; @@ -216,7 +217,15 @@ sub lock { my ($fh, $mode) = @_; # Cannot use @_ here. - if (!flock ($fh, $mode)) + + # On some systems (e.g. GNU/Linux with NFSv2), flock(2) does not work over + # NFS, but Perl prefers that over fcntl(2) if it exists and if + # perl was not built with -Ud_flock. Normally, this problem is harmless, + # so ignore the ENOLCK errors that are reported in that situation, + # However, if the invoker is using "make -j", the problem is not harmless, + # so report it in that case. Admittedly this is a bit of a hack. + if (!flock ($fh, $mode) + && (!$!{ENOLCK} || " $ENV{'MAKEFLAGS'}" =~ / (-j|--jobs)/)) { my $file = $fh->name; fatal "cannot lock $file with mode $mode: $!";