From: Jarkko Hietaniemi Date: Sun, 27 Aug 2000 16:11:05 +0000 (+0000) Subject: Provice virtual $Config{ccflags_nolargefiles} etc. X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=4b2ec4957be2ed3a01f0988d6c21ef52d25c5c7a;p=p5sagit%2Fp5-mst-13.2.git Provice virtual $Config{ccflags_nolargefiles} etc. p4raw-id: //depot/perl@6849 --- diff --git a/configpm b/configpm index 2994787..9defbe4 100755 --- a/configpm +++ b/configpm @@ -130,7 +130,10 @@ sub FETCH { my($value, $start, $marker, $quote_type); $quote_type = "'"; + # Virtual entries. if ($_[1] eq 'byteorder') { + # byteorder does exist on its own but we overlay a virtual + # dynamically recomputed value. my $t = $Config{ivtype}; my $s = $Config{ivsize}; my $f = $t eq 'long' ? 'L!' : $s == 8 ? 'Q': 'I'; @@ -142,6 +145,31 @@ sub FETCH { } else { $value = '?'x$s; } + } elsif ($_[1] =~ /^((?:cc|ld)flags|libs(?:wanted)?)_nolargefiles/) { + # These are purely virtual, they do not exist, but need to + # be computed on demand for largefile-incapable extensions. + my $key = "${1}_largefiles"; + $value = $Config{$1}; + my $withlargefiles = $Config{$key}; + if ($key =~ /^(?:cc|ld)flags_/) { + $value =~ s/\Q$withlargefiles\E\b//; + } elsif ($key =~ /^libs/) { + my @lflibswanted = split(' ', $Config{libswanted_largefiles}); + if (@lflibswanted) { + my %lflibswanted; + @lflibswanted{@lflibswanted} = (); + if ($key =~ /^libs_/) { + my @libs = grep { /^-l(.+)/ && + not exists $lflibswanted{$1} } + split(' ', $Config{libs}); + $Config{libs} = join(' ', @libs); + } elsif ($key =~ /^libswanted_/) { + my @libswanted = grep { not exists $lflibswanted{$_} } + split(' ', $Config{libswanted}); + $Config{libswanted} = join(' ', @libswanted); + } + } + } } else { $marker = "$_[1]="; # return undef unless (($value) = $config_sh =~ m/^$_[1]='(.*)'\s*$/m); @@ -206,7 +234,8 @@ sub EXISTS { index($config_sh, "\n$_[1]='") != -1 or substr($config_sh, 0, length($_[1])+2) eq "$_[1]='" or index($config_sh, "\n$_[1]=\"") != -1 or - substr($config_sh, 0, length($_[1])+2) eq "$_[1]=\""; + substr($config_sh, 0, length($_[1])+2) eq "$_[1]=\"" or + $_[1] =~ /^(?:(?:cc|ld)flags|libs(?:wanted)?)_nolargefiles$/; } sub STORE { die "\%Config::Config is read-only\n" } diff --git a/pod/perldelta.pod b/pod/perldelta.pod index e1d7b18..d0c8113 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -738,12 +738,17 @@ The plan is to bring them back. Certain extensions like mod_perl and BSD::Resource are known to have issues with `largefiles', a change brought by Perl 5.6.0 in which file -offsets default to 64 bits wide where supported. Modules may fail to +offsets default to 64 bits wide, where supported. Modules may fail to compile at all or compile and work incorrectly. Currently there is no -good solution for the problem, but Configure now stores the relevant -flags and libraries in the %Config hash so the extensions that are having -problems can try configuring themselves without the largefileness. -This is admittedly not a clean solution. +good solution for the problem, but Configure now provides appropriate +non-largefile ccflags, ldflags, libswanted, and libs in the %Config +hash (e.g., $Config{ccflags_nolargefiles}) so the extensions that are +having problems can try configuring themselves without the +largefileness. This is admittedly not a clean solution, and the +solution may not even work at all. One potential failure is whether +one can (or, if one can, whether it's a good idea) link together at +all binaries with different ideas about file offsets, all this is +platform-dependent. =over 4