From: Dave Mitchell Date: Sat, 25 Mar 2006 14:57:19 +0000 (+0000) Subject: make configpm only update Config.pm, Config_heavy.pl if changed. X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=962e59f3942cd3c21a40f74d9355b5264589f9a0;p=p5sagit%2Fp5-mst-13.2.git make configpm only update Config.pm, Config_heavy.pl if changed. Should stop spurious rebuilding of extensions. Also add documentation and copyright to top of file. p4raw-id: //depot/perl@27603 --- diff --git a/configpm b/configpm index 46b1972..9ef876e 100755 --- a/configpm +++ b/configpm @@ -1,4 +1,41 @@ #!./miniperl -w +# +# configpm +# +# Copyright (C) 1994, 1995, 1996 1997, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006 Larry Wall and others. +# +# +# Regenerate the files +# +# lib/Config.pm +# lib/Config_heavy.pl +# lib/Config.pod +# lib/Cross.pm (optionally) +# +# from the contents of the static files +# +# Porting/Glossary +# myconfig.SH +# +# and from the contents of the Configure-generated file +# +# config.sh +# +# 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 <$Config_PM" or die "Can't open $Config_PM: $!\n"; -open CONFIG_HEAVY, ">$Config_heavy" or die "Can't open $Config_heavy: $!\n"; +my $config_txt; +my $heavy_txt; -print CONFIG_HEAVY <<'ENDOFBEG'; +$heavy_txt .= <<'ENDOFBEG'; # 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. @@ -84,7 +122,7 @@ ENDOFBEG my $myver = sprintf "%vd", $^V; -printf CONFIG <<'ENDOFBEG', ($myver) x 3; +$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. @@ -401,22 +439,22 @@ if (%need_relocation) { $relocations_in_common++ if $Common{$_}; } if ($relocations_in_common) { - print CONFIG $relocation_code; + $config_txt .= $relocation_code; } else { - print CONFIG_HEAVY $relocation_code; + $heavy_txt .= $relocation_code; } } -print CONFIG_HEAVY @non_v, "\n"; +$heavy_txt .= join('', @non_v) . "\n"; # copy config summary format from the myconfig.SH script -print CONFIG_HEAVY "our \$summary = <<'!END!';\n"; +$heavy_txt .= "our \$summary = <<'!END!';\n"; open(MYCONFIG,") && !/^Summary of/; -do { print CONFIG_HEAVY $_ } until !defined($_ = ) || /^\s*$/; +do { $heavy_txt .= $_ } until !defined($_ = ) || /^\s*$/; close(MYCONFIG); -print CONFIG_HEAVY "\n!END!\n", <<'EOT'; +$heavy_txt .= "\n!END!\n" . <<'EOT'; my $summary_expanded; sub myconfig { @@ -430,19 +468,19 @@ local *_ = \my $a; $_ = <<'!END!'; EOT -print CONFIG_HEAVY join('', sort @v_others), "!END!\n"; +$heavy_txt .= join('', sort @v_others) . "!END!\n"; # Only need the dynamic byteorder code in Config.pm if 'byteorder' is one of # the precached keys if ($Common{byteorder}) { - print CONFIG $byteorder_code; + $config_txt .= $byteorder_code; } else { - print CONFIG_HEAVY $byteorder_code; + $heavy_txt .= $byteorder_code; } if (@need_relocation) { -print CONFIG_HEAVY 'foreach my $what (qw(', join (' ', @need_relocation), - ")) {\n", <<'EOT'; +$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; @@ -452,14 +490,14 @@ EOT # no need to emulate the "which separator for this platform" logic in perl.c - # ':' will always be applicable if ($need_relocation{otherlibdirs}) { -print CONFIG_HEAVY << 'EOT'; +$heavy_txt .= << 'EOT'; s{^(otherlibdirs=)(['"])(.*?)\2} {$1 . $2 . join ':', map {relocate_inc($_)} split ':', $3 . $2}me; EOT } } -print CONFIG_HEAVY <<'EOT'; +$heavy_txt .= <<'EOT'; s/(byteorder=)(['"]).*?\2/$1$2$Config::byteorder$2/m; my $config_sh_len = length $_; @@ -472,7 +510,7 @@ foreach my $prefix (qw(ccflags ldflags)) { my $withlargefiles = fetch_string ({}, $prefix . "_uselargefiles"); if (defined $withlargefiles) { $value =~ s/\Q$withlargefiles\E\b//; - print CONFIG_HEAVY "${prefix}_nolargefiles='$value'\n"; + $heavy_txt .= "${prefix}_nolargefiles='$value'\n"; } } @@ -496,14 +534,14 @@ foreach my $prefix (qw(libs libswanted)) { $value = join(' ', @libswanted); } } - print CONFIG_HEAVY "${prefix}_nolargefiles='$value'\n"; + $heavy_txt .= "${prefix}_nolargefiles='$value'\n"; } -print CONFIG_HEAVY "EOVIRTUAL\n"; +$heavy_txt .= "EOVIRTUAL\n"; -print CONFIG_HEAVY $fetch_string; +$heavy_txt .= $fetch_string; -print CONFIG <<'ENDOFEND'; +$config_txt .= <<'ENDOFEND'; sub FETCH { my($self, $key) = @_; @@ -515,7 +553,7 @@ sub FETCH { } ENDOFEND -print CONFIG_HEAVY <<'ENDOFEND'; +$heavy_txt .= <<'ENDOFEND'; my $prevpos = 0; @@ -527,7 +565,7 @@ sub FIRSTKEY { sub NEXTKEY { ENDOFEND if ($seen_quotes{'"'}) { -print CONFIG_HEAVY <<'ENDOFEND'; +$heavy_txt .= <<'ENDOFEND'; # Find out how the current key's quoted so we can skip to its end. my $quote = substr($Config_SH_expanded, index($Config_SH_expanded, "=", $prevpos)+1, 1); @@ -535,11 +573,11 @@ print CONFIG_HEAVY <<'ENDOFEND'; ENDOFEND } else { # Just ' quotes, so it's much easier. -print CONFIG_HEAVY <<'ENDOFEND'; +$heavy_txt .= <<'ENDOFEND'; my $pos = index($Config_SH_expanded, qq('\n), $prevpos) + 2; ENDOFEND } -print CONFIG_HEAVY <<'ENDOFEND'; +$heavy_txt .= <<'ENDOFEND'; my $len = index($Config_SH_expanded, "=", $pos) - $pos; $prevpos = $pos; $len > 0 ? substr($Config_SH_expanded, $pos, $len) : undef; @@ -551,11 +589,11 @@ sub EXISTS { return(index($Config_SH_expanded, "\n$_[1]='") != -1 ENDOFEND if ($seen_quotes{'"'}) { -print CONFIG_HEAVY <<'ENDOFEND'; +$heavy_txt .= <<'ENDOFEND'; or index($Config_SH_expanded, "\n$_[1]=\"") != -1 ENDOFEND } -print CONFIG_HEAVY <<'ENDOFEND'; +$heavy_txt .= <<'ENDOFEND'; ); } @@ -607,7 +645,7 @@ sub launcher { ENDOFEND if ($^O eq 'os2') { - print CONFIG <<'ENDOFSET'; + $config_txt .= <<'ENDOFSET'; my %preconfig; if ($OS2::is_aout) { my ($value, $v) = $Config_SH_expanded =~ m/^used_aout='(.*)'\s*$/m; @@ -627,11 +665,11 @@ ENDOFSET $dll = $1, last if /^PERL_DLL_BASE\s*=\s*(\S*)\s*$/; } } - print CONFIG < if open $fh, "<", $Config_PM; + $orig_heavy_txt = <$fh> if open $fh, "<", $Config_heavy; +} + +if ($orig_config_txt ne $config_txt or $orig_heavy_txt ne $heavy_txt) { + open CONFIG, ">", $Config_PM or die "Can't open $Config_PM: $!\n"; + open CONFIG_HEAVY, ">", $Config_heavy or die "Can't open $Config_heavy: $!\n"; + print CONFIG $config_txt; + print CONFIG_HEAVY $heavy_txt; + close(CONFIG_HEAVY); + close(CONFIG); + print "updated $Config_PM\n"; + print "updated $Config_heavy\n"; +} + # Now create Cross.pm if needed if ($Opts{cross}) { @@ -909,6 +967,7 @@ EOS $cross =~ s/\*\*\*replace-marker\*\*\*/$Opts{cross}/g; print CROSS $cross; close CROSS; + print "written lib/Cross.pm\n"; unshift(@INC,"xlib/$Opts{cross}"); }