X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/1f0fc1c94b0da3182a0963953d7c62e0b6a20afe..4a73d4436df47069617d7e72be60ab9df22c59da:/configpm diff --git a/configpm b/configpm index 0975373..d38c268 100755 --- a/configpm +++ b/configpm @@ -155,15 +155,15 @@ $heavy_txt .= <<'ENDOFBEG'; package Config; use strict; -# use warnings; Pulls in Carp -# use vars pulls in Carp +use warnings; +use vars '%Config'; sub bincompat_options { - return sort split ' ', (Internals::V())[0]; + return split ' ', (Internals::V())[0]; } sub non_bincompat_options { - return sort split ' ', (Internals::V())[1]; + return split ' ', (Internals::V())[1]; } sub compile_date { @@ -203,7 +203,7 @@ sub _V { print " $date\n" if defined $date; my @env = map { "$_=\"$ENV{$_}\"" } sort grep {/^PERL/} keys %ENV; - push @env, "CYGWIN=\"$ENV{CYGWIN}\"" if $^O eq 'cygwin'; + push @env, "CYGWIN=\"$ENV{CYGWIN}\"" if $^O eq 'cygwin' and $ENV{CYGWIN}; if (@env) { print " \%ENV:\n"; @@ -219,10 +219,9 @@ ENDOFBEG $heavy_txt .= $header_files . "\n}\n\n"; my $export_funcs = <<'EOT'; -my %Export_Cache = (myconfig => 1, - config_sh => 1, config_vars => 1, config_re => 1, +my %Export_Cache = (myconfig => 1, config_sh => 1, config_vars => 1, + config_re => 1, compile_date => 1, local_patches => 1, bincompat_options => 1, non_bincompat_options => 1, - compile_date => 1, local_patches => 1, header_files => 1); EOT @@ -238,8 +237,8 @@ $config_txt .= sprintf << 'EOT', $export_funcs; package Config; use strict; -# use warnings; Pulls in Carp -# use vars pulls in Carp +use warnings; +use vars '%%Config'; # Skip @Config::EXPORT because it only contains %%Config, which we special # case below as it's not a function. @Config::EXPORT won't change in the @@ -258,7 +257,6 @@ $config_txt .= "sub $_;\n" foreach sort keys %export_ok; my $myver = sprintf "%vd", $^V; $config_txt .= sprintf <<'ENDOFBEG', ($myver) x 3; -our %%Config; # Define our own import method to avoid pulling in the full Exporter: sub import { @@ -294,6 +292,7 @@ my @non_v = (); my @v_others = (); my $in_v = 0; my %Data = (); +my $quote; my %seen_quotes; @@ -325,11 +324,11 @@ my %seen_quotes; push(@non_v, "#$_"); # not a name='value' line next; } - my $quote = $2; if ($in_v) { $val .= $_; } else { + $quote = $2; ($name,$val) = ($1,$3); } $in_v = $val !~ /$quote\n/; @@ -413,13 +412,12 @@ my $f = $t eq 'long' ? 'L!' : $s == 8 ? 'Q': 'I'; my $byteorder_code; if ($s == 4 || $s == 8) { - my $list = join ',', reverse(2..$s); + my $list = join ',', reverse(1..$s-1); my $format = 'a'x$s; $byteorder_code = <<"EOT"; -my \$i = 0; -foreach my \$c ($list) { \$i |= ord(\$c); \$i <<= 8 } -\$i |= ord(1); +my \$i = ord($s); +foreach my \$c ($list) { \$i <<= 8; \$i |= ord(\$c); } our \$byteorder = join('', unpack('$format', pack('$f', \$i))); EOT } else { @@ -659,10 +657,9 @@ sub FETCH { my($self, $key) = @_; # check for cached value (which may be undef so we use exists not defined) - return $self->{$key} if exists $self->{$key}; - - return $self->fetch_string($key); + return exists $self->{$key} ? $self->{$key} : $self->fetch_string($key); } + ENDOFEND $heavy_txt .= <<'ENDOFEND'; @@ -710,9 +707,7 @@ $heavy_txt .= <<'ENDOFEND'; } sub STORE { die "\%Config::Config is read-only\n" } -*DELETE = \&STORE; -*CLEAR = \&STORE; - +*DELETE = *CLEAR = \*STORE; # Typeglob aliasing uses less space sub config_sh { substr $Config_SH_expanded, 1, $config_sh_len; @@ -813,8 +808,8 @@ if ($Common{byteorder}) { } my $fast_config = join '', map { " $_,\n" } sort values %Common; -# Sanity check needed to stop an infite loop if Config_heavy.pl fails to define -# &launcher for some reason (eg it got truncated) +# Sanity check needed to stop an infinite loop if Config_heavy.pl fails to +# define &launcher for some reason (eg it got truncated) $config_txt .= sprintf <<'ENDOFTIE', $fast_config; sub DESTROY { } @@ -876,7 +871,7 @@ http://perl5.git.perl.org/perl.git/blob/HEAD:/Porting/Glossary =item myconfig() Returns a textual summary of the major perl configuration values. -See also C<-V> in L. +See also C<-V> in L. =item config_sh() @@ -896,7 +891,7 @@ printed on a separate line in the form: name='value'; Names which are unknown are output as C. -See also C<-V:name> in L. +See also C<-V:name> in L. =item bincompat_options()