X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=configpm;h=5baed2b99c8649445482dd4db4d10d405d32c753;hb=52a66c2cc3722485e8a16f1da9c026524180ca8c;hp=9ef876e3112f156f7c24c27de5d59b8b63cd0776;hpb=962e59f3942cd3c21a40f74d9355b5264589f9a0;p=p5sagit%2Fp5-mst-13.2.git diff --git a/configpm b/configpm index 9ef876e..5baed2b 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,17 @@ # # 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 ); sub opts { @@ -86,26 +85,25 @@ sub opts { my %Opts = opts(); -my ($Config_PM, $Config_heavy); -my $Glossary = $ARGV[1] || 'Porting/Glossary'; +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; @@ -126,6 +124,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 +186,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 +462,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; } @@ -481,9 +495,7 @@ if ($Common{byteorder}) { if (@need_relocation) { $heavy_txt .= 'foreach my $what (qw(' . join (' ', @need_relocation) . ")) {\n" . <<'EOT'; - s<^($what=)(['"])(.*?)\2> - <$1 . $2 . relocate_inc($3) . $2 . "\n" . - 'raw_' . $1 . $2 . $3 . $2>me; + s/^($what=)(['"])(.*?)\2/$1 . $2 . relocate_inc($3) . $2/me; } EOT # Currently it only makes sense to do the ... relocation on Unix, so there's @@ -539,6 +551,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'; @@ -719,7 +740,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 @@ -755,6 +776,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() @@ -836,6 +861,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}) { @@ -852,12 +879,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 @@ -919,7 +965,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 = "";