X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=configpm;h=a22f9a2404052f2895e8300e4cd55ecc0f2a04ca;hb=24b5d5ccc3bc7535f387e48d7e29656751ae98a5;hp=2994787272f14a569d520cff5911837421733214;hpb=ad66e0ebddf4284c422b779bd6dd8b67482795b8;p=p5sagit%2Fp5-mst-13.2.git diff --git a/configpm b/configpm index 2994787..a22f9a2 100755 --- a/configpm +++ b/configpm @@ -60,7 +60,7 @@ $in_v = 0; 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 @@ -71,7 +71,7 @@ while (<>) { 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"; } } @@ -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}_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); @@ -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" } @@ -220,7 +249,7 @@ sub config_sh { 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"; } @@ -245,8 +274,20 @@ if ($OS2::is_aout) { $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 <\n\nFrom F<$2>:\n\n/m; - my $c = substr $1, 0, 1; - unless ($seen{$c}++) { - print CONFIG <\n\nFrom F<$2>:\n\n/m) { + my $c = substr $1, 0, 1; + unless ($seen{$c}++) { + print CONFIG < paragraphs @@ -405,8 +451,14 @@ EOF (?! e \. g \. ) # Not e.g. (?! \. \. \. ) # Not ... (?! \d ) # Not 5.004 - ( [\w./]* [./] [\w./]* ) # Require . or / inside - (?)xg; # /usr/local @@ -445,11 +497,11 @@ require $config_pm; 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"