X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=configpm;h=b8fea156740a1f1c7f8cc1a47e09821ba73120a5;hb=f9bcfeacc119e37fd70816a2cb4678fded53e8d1;hp=cb6122cf668c0512fa896b7717fbcb7f7a30f1d2;hpb=8d962fa19aed5e09e2a40f248faf69d89e34ac51;p=p5sagit%2Fp5-mst-13.2.git diff --git a/configpm b/configpm index cb6122c..b8fea15 100755 --- a/configpm +++ b/configpm @@ -2,8 +2,8 @@ # # configpm # -# Copyright (C) 1994, 1995, 1996 1997, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006 Larry Wall and others. +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007 Larry Wall and others. # # # Regenerate the files @@ -13,6 +13,7 @@ # lib/Config.pod # lib/Cross.pm (optionally) # +# # from the contents of the static files # # Porting/Glossary @@ -22,18 +23,18 @@ # # config.sh # +# Note that output directory is xlib/[cross-name]/ for cross-compiling +# # It will only update Config.pm and Config_heavy.pl if the contents of # either file would be different. Note that *both* files are updated in # this case, since for example an extension makefile that has a dependency # on Config.pm should trigger even if only Config_heavy.pl has changed. sub usage { die < '', # --cross=PLATFORM - crosscompiling for PLATFORM 'glossary' => 1, # --no-glossary - no glossary file inclusion, # for compactness - 'heavy' => '', # pathname of the Config_heavy.pl file + 'chdir' => '', # --chdir=dir - change directory before writing files ); sub opts { @@ -86,26 +87,29 @@ sub opts { my %Opts = opts(); -my ($Config_PM, $Config_heavy); -my $Glossary = $ARGV[1] || 'Porting/Glossary'; +if ($Opts{chdir}) { + chdir $Opts{chdir} or die "$0: could not chdir $Opts{chdir}: $!" +} + +my ($Config_SH, $Config_PM, $Config_heavy, $Config_POD); +my $Glossary = 'Porting/Glossary'; if ($Opts{cross}) { # creating cross-platform config file mkdir "xlib"; mkdir "xlib/$Opts{cross}"; - $Config_PM = $ARGV[0] || "xlib/$Opts{cross}/Config.pm"; -} -else { - $Config_PM = $ARGV[0] || 'lib/Config.pm'; -} -if ($Opts{heavy}) { - $Config_heavy = $Opts{heavy}; + $Config_PM = "xlib/$Opts{cross}/Config.pm"; + $Config_POD = "xlib/$Opts{cross}/Config.pod"; + $Config_SH = "Cross/config-$Opts{cross}.sh"; } else { - ($Config_heavy = $Config_PM) =~ s!\.pm$!_heavy.pl!; - die "Can't automatically determine name for Config_heavy.pl from '$Config_PM'" - if $Config_heavy eq $Config_PM; + $Config_PM = "lib/Config.pm"; + $Config_POD = "lib/Config.pod"; + $Config_SH = "config.sh"; } +($Config_heavy = $Config_PM) =~ s/\.pm$/_heavy.pl/; +die "Can't automatically determine name for Config_heavy.pl from '$Config_PM'" + if $Config_heavy eq $Config_PM; my $config_txt; my $heavy_txt; @@ -118,6 +122,45 @@ package Config; use strict; # use warnings; Pulls in Carp # use vars pulls in Carp + +sub _V { + 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; + + print Config::myconfig(); + if ($^O eq 'VMS') { + print "\nCharacteristics of this PERLSHR image: \n"; + } else { + print "\nCharacteristics of this binary (from libperl): \n"; + } + + print " Compile-time options: $opts\n"; + + if (@patches) { + print " Locally applied patches:\n"; + print "\t$_\n" foreach @patches; + } + + print " Built under $^O\n"; + + print " $date\n" if defined $date; + + my @env = map { "$_=\"$ENV{$_}\"" } sort grep {/^PERL/} keys %ENV; + push @env, "CYGWIN=\"$ENV{CYGWIN}\"" if $^O eq 'cygwin'; + + if (@env) { + print " \%ENV:\n"; + print " $_\n" foreach @env; + } + print " \@INC:\n"; + print " $_\n" foreach @INC; +} + ENDOFBEG my $myver = sprintf "%vd", $^V; @@ -126,6 +169,10 @@ $config_txt .= sprintf <<'ENDOFBEG', ($myver) x 3; # This file was created by configpm when Perl was built. Any changes # made to this file will be lost the next time perl is built. +# 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 + package Config; use strict; # use warnings; Pulls in Carp @@ -184,7 +231,7 @@ my %Data = (); 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 () { next if m:^#!/bin/sh:; @@ -460,7 +507,19 @@ my $summary_expanded; sub myconfig { return $summary_expanded if $summary_expanded; ($summary_expanded = $summary) =~ s{\$(\w+)} - { my $c = $Config::Config{$1}; defined($c) ? $c : 'undef' }ge; + { + my $c; + if ($1 eq 'git_ancestor_line') { + if ($Config::Config{git_ancestor}) { + $c= "\n Ancestor: $Config::Config{git_ancestor}"; + } else { + $c= ""; + } + } else { + $c = $Config::Config{$1}; + } + defined($c) ? $c : 'undef' + }ge; $summary_expanded; } @@ -537,6 +596,15 @@ foreach my $prefix (qw(libs libswanted)) { $heavy_txt .= "EOVIRTUAL\n"; +$heavy_txt .= <<'ENDOFGIT'; +eval { + # do not have hairy conniptions if this isnt available + require 'Config_git.pl'; + $Config_SH_expanded .= $Config::Git_Data; + 1; +} or warn "Warning: failed to load Config_git.pl, something strange about this perl...\n"; +ENDOFGIT + $heavy_txt .= $fetch_string; $config_txt .= <<'ENDOFEND'; @@ -717,7 +785,7 @@ tie %%Config, 'Config', { ENDOFTIE -open(CONFIG_POD, ">lib/Config.pod") or die "Can't open lib/Config.pod: $!"; +open(CONFIG_POD, ">$Config_POD") or die "Can't open $Config_POD: $!"; print CONFIG_POD <<'ENDOFTAIL'; =head1 NAME @@ -753,6 +821,10 @@ Values stored in config.sh as 'undef' are returned as undefined values. The perl C function can be used to check if a named variable exists. +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 + =over 4 =item myconfig() @@ -834,6 +906,8 @@ some of the variables described below, or may have extraneous variables specific to that particular port. See the port specific documentation in such cases. +=cut + ENDOFTAIL if ($Opts{glossary}) { @@ -850,12 +924,16 @@ sub process { print CONFIG_POD <. The variable is a +structured string that looks something like this: + + git_commit_id='ea0c2dbd5f5ac6845ecc7ec6696415bf8e27bd52' + git_describe='GitLive-blead-1076-gea0c2db' + git_branch='smartmatch' + git_uncommitted_changes='' + git_commit_id_title='Commit id:' + git_commit_date='2009-05-09 17:47:31 +0200' + +Its format is not guaranteed not to change over time. + =head1 NOTE This module contains a good example of how to use tie to implement a @@ -917,7 +1010,7 @@ ENDOFTAIL close(GLOS) if $Opts{glossary}; close(CONFIG_POD); -print "written lib/Config.pod\n"; +print "written $Config_POD\n"; my $orig_config_txt = ""; my $orig_heavy_txt = "";