A test to check that regen.pl doesn't need running.
authorNicholas Clark <nick@ccl4.org>
Tue, 28 Sep 2010 15:50:26 +0000 (16:50 +0100)
committerNicholas Clark <nick@ccl4.org>
Tue, 28 Sep 2010 15:50:26 +0000 (16:50 +0100)
We can't run regen.pl as part of the build, as we'd end up with a circular
dependency between the headers and miniperl.

MANIFEST
regen.pl
regen_lib.pl
t/porting/regen.t [new file with mode: 0644]

index 3cf53aa..c551152 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -4689,6 +4689,7 @@ t/porting/exec-bit.t              Check that exec-bit bins are identified
 t/porting/maintainers.t                Test that Porting/Maintaners.pl is up to date
 t/porting/manifest.t           Test that this MANIFEST file is well formed
 t/porting/podcheck.t           Test the POD of shipped modules is well formed
+t/porting/regen.t              Check that regen.pl doesn't need running
 t/porting/test_bootstrap.t     Test that the instructions for test bootstrapping aren't accidentally overlooked.
 t/README                       Instructions for regression tests
 t/re/overload.t                Test against string corruption in pattern matches on overloaded objects
index f97a618..f103b0a 100644 (file)
--- a/regen.pl
+++ b/regen.pl
@@ -26,8 +26,9 @@ warnings.pl
 embed.pl
 );
 
+my $tap = $ARGV[0] && $ARGV[0] eq '--tap' ? '# ' : '';
 foreach my $pl (@scripts) {
   my @command =  ($^X, $pl, @ARGV);
-  print "@command\n";
+  print "$tap@command\n";
   system @command;
 }
index 7d396c0..9008629 100644 (file)
@@ -1,6 +1,6 @@
 #!/usr/bin/perl -w
 use strict;
-use vars qw($Needs_Write $Verbose @Changed);
+use vars qw($Needs_Write $Verbose @Changed $TAP);
 use File::Compare;
 use Symbol;
 
@@ -10,6 +10,7 @@ $Needs_Write = $^O eq 'cygwin' || $^O eq 'os2' || $^O eq 'MSWin32';
 
 $Verbose = 0;
 @ARGV = grep { not($_ eq '-q' and $Verbose = -1) }
+  grep { not($_ eq '--tap' and $TAP = 1) }
   grep { not($_ eq '-v' and $Verbose = 1) } @ARGV;
 
 END {
@@ -42,6 +43,12 @@ sub safer_rename_silent {
 sub rename_if_different {
   my ($from, $to) = @_;
 
+  if ($TAP) {
+      my $not = compare($from, $to) ? 'not ' : '';
+      print STDOUT $not . "ok - $0 $to\n";
+      safer_unlink($from);
+      return;
+  }
   if (compare($from, $to) == 0) {
       warn "no changes between '$from' & '$to'\n" if $Verbose > 0;
       safer_unlink($from);
diff --git a/t/porting/regen.t b/t/porting/regen.t
new file mode 100644 (file)
index 0000000..9699d55
--- /dev/null
@@ -0,0 +1,23 @@
+#!./perl -w
+
+# Verify that all files generated by perl scripts are up to date.
+
+my ($in_t, $lib);
+
+BEGIN {
+    $in_t = -f 'TEST' && -f '../regen.pl';
+    $lib = $in_t ? '../lib' : 'lib';
+    unshift @INC, $lib;
+}
+
+use strict;
+
+use File::Spec::Functions 'rel2abs';
+$^X = rel2abs($^X);
+$ENV{PERL5LIB} = rel2abs($lib);
+
+chdir '..' if $in_t;
+
+print "1..17\n"; # I can't see a clean way to calculate this automatically.
+
+system "$^X regen.pl --tap";