EOF
use strict;
-use vars qw(%Config $Config_SH_expanded);
+our (%Config, $Config_SH_expanded);
my $how_many_common = 22;
# for a description of the variables, please have a look at the
# Glossary file, as written in the Porting folder, or use the url:
-# http://perl5.git.perl.org/perl.git/blob/HEAD:/Porting/Glossary
+# https://github.com/Perl/perl5/blob/blead/Porting/Glossary
package Config;
use strict;
use warnings;
-use vars '%%Config', '$VERSION';
+our ( %%Config, $VERSION );
$VERSION = "%s";
my %Data = ();
my $quote;
+# These variables were set in older versions of Perl, but are no longer needed
+# by the core. However, some CPAN modules may rely on them; in particular, Tk
+# (at least up to version 804.034) fails to build without them. We force them
+# to be emitted to Config_heavy.pl for backcompat with such modules (and we may
+# find that this set needs to be extended in future). See RT#132347.
+my @v_forced = map "$_\n", split /\n+/, <<'EOT';
+i_limits='define'
+i_stdlib='define'
+i_string='define'
+i_time='define'
+prototype='define'
+EOT
+
my %seen_quotes;
{
my ($name, $val);
- open(CONFIG_SH, $Config_SH) || die "Can't open $Config_SH: $!";
+ open(CONFIG_SH, '<', $Config_SH) || die "Can't open $Config_SH: $!";
while (<CONFIG_SH>) {
next if m:^#!/bin/sh:;
else {
$quote = $2;
($name,$val) = ($1,$3);
+ if ($name eq 'cc') {
+ $val =~ s{^(['"]?+).*\bccache\s+}{$1};
+ }
}
$in_v = $val !~ /$quote\n/;
next if $in_v;
# Calculation for the keys for byteorder
# This is somewhat grim, but I need to run fetch_string here.
-our $Config_SH_expanded = join "\n", '', @v_others;
+$Config_SH_expanded = join "\n", '', @v_others;
my $t = fetch_string ({}, 'ivtype');
my $s = fetch_string ({}, 'ivsize');
package Config;
use strict;
use warnings;
-use vars '%%Config';
+our %%Config;
sub bincompat_options {
return split ' ', (Internals::V())[0];
my ($bincompat, $non_bincompat, $date, @patches) = Internals::V();
- my $opts = join ' ', sort split ' ', "$bincompat $non_bincompat";
-
- # wrap at 76 columns.
-
- $opts =~ s/(?=.{53})(.{1,53}) /$1\n /mg;
+ my @opts = sort split ' ', "$bincompat $non_bincompat";
print Config::myconfig();
print "\nCharacteristics of this %s: \n";
- print " Compile-time options: $opts\n";
+ print " Compile-time options:\n";
+ print " $_\n" for @opts;
if (@patches) {
print " Locally applied patches:\n";
- print "\t$_\n" foreach @patches;
+ print " $_\n" foreach @patches;
}
print " Built under %s\n";
# copy config summary format from the myconfig.SH script
$heavy_txt .= "our \$summary = <<'!END!';\n";
-open(MYCONFIG,"<myconfig.SH") || die "open myconfig.SH failed: $!";
+open(MYCONFIG,'<','myconfig.SH') || die "open myconfig.SH failed: $!";
1 while defined($_ = <MYCONFIG>) && !/^Summary of/;
do { $heavy_txt .= $_ } until !defined($_ = <MYCONFIG>) || /^\s*$/;
close(MYCONFIG);
local *_ = \my $a;
$_ = <<'!END!';
EOT
-
-$heavy_txt .= join('', sort @v_others) . "!END!\n";
+#proper lexicographical order of the keys
+my %seen_var;
+$heavy_txt .= join('',
+ map { $_->[-1] }
+ sort {$a->[0] cmp $b->[0] }
+ grep { !$seen_var{ $_->[0] }++ }
+ map {
+ /^([^=]+)/ ? [ $1, $_ ]
+ : [ $_, $_ ] # shouldnt happen
+ } @v_others, @v_forced
+) . "!END!\n";
# Only need the dynamic byteorder code in Config.pm if 'byteorder' is one of
# the precached keys
$heavy_txt .= "${prefix}_nolargefiles='$value'\n";
}
+if (open(my $fh, '<', 'cflags')) {
+ my $ccwarnflags;
+ my $ccstdflags;
+ while (<$fh>) {
+ if (/^warn="(.+)"$/) {
+ $ccwarnflags = $1;
+ } elsif (/^stdflags="(.+)"$/) {
+ $ccstdflags = $1;
+ }
+ }
+ if (defined $ccwarnflags) {
+ $heavy_txt .= "ccwarnflags='$ccwarnflags'\n";
+ }
+ if (defined $ccstdflags) {
+ $heavy_txt .= "ccstdflags='$ccstdflags'\n";
+ }
+}
+
$heavy_txt .= "EOVIRTUAL\n";
$heavy_txt .= <<'ENDOFGIT';
ENDOFTIE
-open(CONFIG_POD, ">$Config_POD") or die "Can't open $Config_POD: $!";
+open(CONFIG_POD, '>', $Config_POD) or die "Can't open $Config_POD: $!";
print CONFIG_POD <<'ENDOFTAIL';
=head1 NAME
+=for comment Generated by configpm. Any changes made here will be lost!
+
Config - access Perl configuration information
=head1 SYNOPSIS
For a description of the variables, please have a look at the
Glossary file, as written in the Porting folder, or use the url:
-http://perl5.git.perl.org/perl.git/blob/HEAD:/Porting/Glossary
+https://github.com/Perl/perl5/blob/blead/Porting/Glossary
=over 4
ENDOFTAIL
if ($Opts{glossary}) {
- open(GLOS, "<$Glossary") or die "Can't open $Glossary: $!";
+ open(GLOS, '<', $Glossary) or die "Can't open $Glossary: $!";
}
my %seen = ();
my $text = 0;
$/ = '';
+my $errors= 0;
sub process {
if (s/\A(\w*)\s+\(([\w.]+)\):\s*\n(\t?)/=item C<$1>\n\nFrom F<$2>:\n\n/m) {
print CONFIG_POD <<EOF if $text;
=back
-=cut
-
EOF
print CONFIG_POD <<EOF;
=head2 $c
=over 4
-=cut
-
EOF
$text = 1;
}
}
elsif (!$text || !/\A\t/) {
warn "Expected a Configure variable header",
- ($text ? " or another paragraph of description" : () );
+ ($text ? " or another paragraph of description" : () ),
+ ", instead we got:\n$_";
+ $errors++;
}
s/n't/n\00t/g; # leave can't, won't etc untouched
s/^\t\s+(.*)/\n$1/gm; # Indented lines ===> new paragraph
process;
print CONFIG_POD;
}
+ if ($errors) {
+ die "Errors encountered while processing $Glossary. ",
+ "Header lines are expected to be of the form:\n",
+ "NAME (CLASS):\n",
+ "Maybe there is a malformed header?\n",
+ ;
+ }
}
print CONFIG_POD <<'ENDOFTAIL';