summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJarkko Hietaniemi <jhi@iki.fi>2000-08-27 16:11:05 +0000
committerJarkko Hietaniemi <jhi@iki.fi>2000-08-27 16:11:05 +0000
commit4b2ec4957be2ed3a01f0988d6c21ef52d25c5c7a (patch)
tree504d830d45ea2ffaf47c0b496ac292a4cfa9e0ee
parent82b0b40588450b57cffa8ebe2492afb068927659 (diff)
downloadperl-4b2ec4957be2ed3a01f0988d6c21ef52d25c5c7a.tar.gz
Provice virtual $Config{ccflags_nolargefiles} etc.
p4raw-id: //depot/perl@6849
-rwxr-xr-xconfigpm31
-rw-r--r--pod/perldelta.pod15
2 files changed, 40 insertions, 6 deletions
diff --git a/configpm b/configpm
index 2994787272..9defbe4df1 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 e1d7b18fbc..d0c8113fc3 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