#!/usr/bin/perl -w
+#
+# regen.pl - a wrapper that runs all *.pl scripts to to autogenerate files
+
+require 5.003; # keep this compatible, an old perl is all we may have before
+ # we build the new one
+
+# The idea is to move the regen_headers target out of the Makefile so that
+# it is possible to rebuild the headers before the Makefile is available.
+# (and the Makefile is unavailable until after Configure is run, and we may
+# wish to make a clean source tree but with current headers without running
+# anything else.
+
use strict;
-use vars qw($Is_W32 $Is_OS2 $Is_Cygwin $Is_NetWare $Needs_Write);
-use Config; # Remember, this is running using an existing perl
+my $perl = $^X;
-# Common functions needed by the regen scripts
+# keep warnings.pl in sync with the CPAN distribution by not requiring core
+# changes. Um, what ?
+# safer_unlink ("warnings.h", "lib/warnings.pm");
-$Is_W32 = $^O eq 'MSWin32';
-$Is_OS2 = $^O eq 'os2';
-$Is_Cygwin = $^O eq 'cygwin';
-$Is_NetWare = $Config{osname} eq 'NetWare';
-if ($Is_NetWare) {
- $Is_W32 = 0;
-}
+# Which scripts to run. Note the ordering: embed.pl must run after
+# opcode.pl, since it depends on pp.sym, and autodoc.pl should run last as
+# it reads all *.[ch] files, some of which may have been changed by other
+# scripts (eg reentr.c)
-$Needs_Write = $Is_OS2 || $Is_W32 || $Is_Cygwin || $Is_NetWare;
+my @scripts = qw(
+keywords.pl
+opcode.pl
+overload.pl
+reentr.pl
+regcomp.pl
+warnings.pl
-sub safer_unlink {
- my @names = @_;
- my $cnt = 0;
+embed.pl
+autodoc.pl
+);
- my $name;
- foreach $name (@names) {
- next unless -e $name;
- chmod 0777, $name if $Needs_Write;
- ( CORE::unlink($name) and ++$cnt
- or warn "Couldn't unlink $name: $!\n" );
- }
- return $cnt;
-}
+# Which files are (re)generated by each script.
+# *** We no longer need these values, as the "changed" message is
+# now generated by regen_lib.pl, so should we just drop them?
-sub safer_rename_silent {
- my ($from, $to) = @_;
+my %gen = (
+ 'autodoc.pl' => [qw[pod/perlapi.pod pod/perlintern.pod]],
+ 'embed.pl' => [qw[proto.h embed.h embedvar.h global.sym
+ perlapi.h perlapi.c]],
+ 'keywords.pl' => [qw[keywords.h]],
+ 'opcode.pl' => [qw[opcode.h opnames.h pp_proto.h pp.sym]],
+ 'regcomp.pl' => [qw[regnodes.h]],
+ 'warnings.pl' => [qw[warnings.h lib/warnings.pm]],
+ 'reentr.pl' => [qw[reentr.c reentr.h]],
+ 'overload.pl' => [qw[overload.c overload.h lib/overload/numbers.pm]],
+ );
- # Some dosish systems can't rename over an existing file:
- safer_unlink $to;
- chmod 0600, $from if $Needs_Write;
- rename $from, $to;
+sub do_cksum {
+ my $pl = shift;
+ my %cksum;
+ for my $f (@{ $gen{$pl} }) {
+ local *FH;
+ if (open(FH, $f)) {
+ local $/;
+ $cksum{$f} = unpack("%32C*", <FH>);
+ close FH;
+ } else {
+ warn "$0: $f: $!\n";
+ }
+ }
+ return %cksum;
}
-sub safer_rename {
- my ($from, $to) = @_;
- safer_rename_silent($from, $to) or die "renaming $from to $to: $!";
+foreach my $pl (@scripts) {
+ my @command = ($^X, $pl, @ARGV);
+ print "@command\n";
+ system @command;
}
-1;