This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
d5b3c5210813ef15622d5e4e89bec70dae38f2b7
[perl5.git] / t / porting / regen.t
1 #!./perl -w
2
3 # Verify that all files generated by perl scripts are up to date.
4
5 my ($in_t, $lib);
6
7 BEGIN {
8     $in_t = -f 'TEST' && -f '../regen.pl';
9     $lib = $in_t ? '../lib' : 'lib';
10     unshift @INC, $lib;
11 }
12
13 use strict;
14
15 use File::Spec::Functions 'rel2abs';
16 $^X = rel2abs($^X);
17 $ENV{PERL5LIB} = rel2abs($lib);
18
19 chdir '..' if $in_t;
20
21 $INC[0] = 'lib';
22 require 'regen/regen_lib.pl';
23 require 't/test.pl';
24 $::NO_ENDING = $::NO_ENDING = 1;
25
26 if ( $^O eq "VMS" ) {
27   skip_all( "- regen.pl needs porting." );
28 }
29
30 my $in_regen_pl = 17; # I can't see a clean way to calculate this automatically.
31 my @files = qw(perly.act perly.h perly.tab keywords.c keywords.h);
32 my @progs = qw(Porting/makemeta regen/regcharclass.pl regen/mk_PL_charclass.pl);
33
34 plan (tests => $in_regen_pl + @files + @progs);
35
36 OUTER: foreach my $file (@files) {
37     open my $fh, '<', $file or die "Can't open $file: $!";
38     1 while defined($_ = <$fh>) and !/Generated from:/;
39     if (eof $fh) {
40         fail("Can't find 'Generated from' line in $file");
41         next;
42     }
43     my @bad;
44     while (<$fh>) {
45         last if /ex: set ro:/;
46         unless (/^(?: \* | #)([0-9a-f]+) (\S+)$/) {
47             chomp $_;
48             fail("Bad line in $file: '$_'");
49             next OUTER;
50         }
51         my $digest = digest($2);
52         note("$digest $2");
53         push @bad, $2 unless $digest eq $1;
54     }
55     is("@bad", '', "generated $file is up to date");
56 }
57
58 foreach (@progs, 'regen.pl') {
59   system "$^X $_ --tap";
60 }