while (<>) {
next if m:^#!/bin/sh:;
- # Catch CONFIGDOTSH=true and PERL_VERSION=n line from Configure.
+ # Catch PERL_CONFIG_SH=true and PERL_VERSION=n line from Configure.
s/^(\w+)=(true|\d+)\s*$/$1='$2'\n/;
my ($k,$v) = ($1,$2);
# grandfather PATCHLEVEL and SUBVERSION and CONFIG
elsif ($k eq 'PERL_SUBVERSION') {
push @v_others, "SUBVERSION='$v'\n";
}
- elsif ($k eq 'CONFIGDOTSH') {
+ elsif ($k eq 'PERL_CONFIG_SH') {
push @v_others, "CONFIG='$v'\n";
}
}
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';
- my $i = unpack($f, pack('C*', map { ord() } 1..$s));
if ($s == 4 || $s == 8) {
+ my $i = 0;
+ foreach my $c (reverse(2..$s)) { $i |= ord($c); $i <<= 8 }
+ $i |= ord(1);
$value = join('', unpack('a'x$s, pack($f, $i)));
} 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}_uselargefiles";
+ $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_uselargefiles});
+ 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);
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" }
sub config_re {
my $re = shift;
- my @matches = ($config_sh =~ /^$re=.*\n/mg);
+ my @matches = grep /^$re=/, split /^/, $config_sh;
@matches ? (print @matches) : print "$re: not found\n";
}
$preconfig{$_} = $v eq 'undef' ? undef : $v;
}
}
+$preconfig{d_fork} = undef unless $OS2::can_fork; # Some funny cases can't
sub TIEHASH { bless {%preconfig} }
ENDOFSET
+ # Extract the name of the DLL from the makefile to avoid duplication
+ my ($f) = grep -r, qw(GNUMakefile Makefile);
+ my $dll;
+ if (open my $fh, '<', $f) {
+ while (<$fh>) {
+ $dll = $1, last if /^PERL_DLL_BASE\s*=\s*(\S*)\s*$/;
+ }
+ }
+ print CONFIG <<ENDOFSET if $dll;
+\$preconfig{dll_name} = '$dll';
+ENDOFSET
} else {
print CONFIG <<'ENDOFSET';
sub TIEHASH { bless {} }
$/ = '';
sub process {
- s/\A(\w*)\s+\(([\w.]+)\):\s*\n(\t?)/=item C<$1>\n\nFrom F<$2>:\n\n/m;
- my $c = substr $1, 0, 1;
- unless ($seen{$c}++) {
- print CONFIG <<EOF if $text;
+ if (s/\A(\w*)\s+\(([\w.]+)\):\s*\n(\t?)/=item C<$1>\n\nFrom F<$2>:\n\n/m) {
+ my $c = substr $1, 0, 1;
+ unless ($seen{$c}++) {
+ print CONFIG <<EOF if $text;
=back
EOF
- print CONFIG <<EOF;
+ print CONFIG <<EOF;
=head2 $c
-=over
+=over 4
EOF
- $text = 1;
+ $text = 1;
+ }
+ }
+ elsif (!$text || !/\A\t/) {
+ warn "Expected a Configure variable header",
+ ($text ? " or another paragraph of description" : () );
}
s/n't/n\00t/g; # leave can't, won't etc untouched
s/^\t\s+(.*)/\n\t$1\n/gm; # Indented lines ===> paragraphs
(?! e \. g \. ) # Not e.g.
(?! \. \. \. ) # Not ...
(?! \d ) # Not 5.004
- ( [\w./]* [./] [\w./]* ) # Require . or / inside
- (?<! \. (?= \s ) ) # Do not include trailing dot
+ (?! read/ ) # Not read/write
+ (?! etc\. ) # Not etc.
+ (?! I/O ) # Not I/O
+ (
+ \$ ? # Allow leading $
+ [\w./]* [./] [\w./]* # Require . or / inside
+ )
+ (?<! \. (?= [\s)] ) ) # Do not include trailing dot
(?! [\w/] ) # Include all of it
}
(F<$1>)xg; # /usr/local
import Config;
die "$0: $config_pm not valid"
- unless $Config{'CONFIGDOTSH'} eq 'true';
+ unless $Config{'PERL_CONFIG_SH'} eq 'true';
die "$0: error processing $config_pm"
if defined($Config{'an impossible name'})
- or $Config{'CONFIGDOTSH'} ne 'true' # test cache
+ or $Config{'PERL_CONFIG_SH'} ne 'true' # test cache
;
die "$0: error processing $config_pm"