X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=configpm;h=cb6122cf668c0512fa896b7717fbcb7f7a30f1d2;hb=92a665d639a42192198e801676cccae0bd9afa83;hp=874e3f38e3507a2dc2e7c582da17f20869c4c723;hpb=e935c5a40cc2e11d6cc50386820177a932ba7ce1;p=p5sagit%2Fp5-mst-13.2.git diff --git a/configpm b/configpm index 874e3f3..cb6122c 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. @@ -298,14 +336,62 @@ EOT my @need_relocation; if (fetch_string({},'userelocatableinc')) { - foreach my $what (qw(archlibexp + foreach my $what (qw(prefixexp + + archlibexp + html1direxp + html3direxp + man1direxp + man3direxp privlibexp + scriptdirexp sitearchexp + sitebinexp + sitehtml1direxp + sitehtml3direxp sitelibexp - sitelib_stem + siteman1direxp + siteman3direxp + sitescriptexp vendorarchexp + vendorbinexp + vendorhtml1direxp + vendorhtml3direxp vendorlibexp - vendorlib_stem)) { + vendorman1direxp + vendorman3direxp + vendorscriptexp + + siteprefixexp + sitelib_stem + vendorlib_stem + + installarchlib + installhtml1dir + installhtml3dir + installman1dir + installman3dir + installprefix + installprefixexp + installprivlib + installscript + installsitearch + installsitebin + installsitehtml1dir + installsitehtml3dir + installsitelib + installsiteman1dir + installsiteman3dir + installsitescript + installvendorarch + installvendorbin + installvendorhtml1dir + installvendorhtml3dir + installvendorlib + installvendorman1dir + installvendorman3dir + installvendorscript + )) { push @need_relocation, $what if fetch_string({}, $what) =~ m!^\.\.\./!; } } @@ -353,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 { @@ -382,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/me; } EOT @@ -402,14 +488,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 $_; @@ -422,7 +508,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"; } } @@ -446,14 +532,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) = @_; @@ -465,7 +551,7 @@ sub FETCH { } ENDOFEND -print CONFIG_HEAVY <<'ENDOFEND'; +$heavy_txt .= <<'ENDOFEND'; my $prevpos = 0; @@ -477,7 +563,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); @@ -485,11 +571,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; @@ -501,11 +587,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'; ); } @@ -557,7 +643,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; @@ -577,11 +663,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}) { @@ -859,6 +965,8 @@ EOS $cross =~ s/\*\*\*replace-marker\*\*\*/$Opts{cross}/g; print CROSS $cross; close CROSS; + print "written lib/Cross.pm\n"; + unshift(@INC,"xlib/$Opts{cross}"); } # Now do some simple tests on the Config.pm file we have created