This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Move IPC-SysV from ext/ to cpan/
[perl5.git] / cpan / IPC-SysV / regen.pl
CommitLineData
8f85282b
MHM
1use strict;
2
3unless (@ARGV) {
4 @ARGV = qw( constants );
5}
6
7my %gen = map { ($_ => 1) } @ARGV;
8
9if (delete $gen{constants}) {
10 make_constants();
11}
12
13for my $key (keys %gen) {
14 print STDERR "Invalid request to regenerate $key!\n";
15}
16
17sub make_constants
18{
19 unless (eval { require ExtUtils::Constant; 1 }) {
20 my @files = qw( const-c.inc const-xs.inc );
21
22 die "Cannot regenerate constants:\n$@\n" if grep { !-f } @files;
23
24 my @deps = qw( regen.pl lib/IPC/SysV.pm );
25
26 my $oldage = (sort { $a <=> $b } map { -M } @files)[-1]; # age of oldest file
27 my $depage = (sort { $a <=> $b } map { -M } @deps)[0]; # age of newest dependency
28 my @outdated = grep { (-M) > $depage } @files;
29 my @newdeps = grep { (-M) < $oldage } @deps;
30
31 print STDERR <<EOM;
32
33***********************************************************************
34
35 The following files seem to be out of date:
36
37 @outdated
38
39 The reason is probably that you modified these files:
40
41 @newdeps
42
43 If you're absolutely sure you didn't touch the files, please ignore
44 this message.
45
46 Otherwise, please install the ExtUtils::Constant module.
47
48***********************************************************************
49
50EOM
51
52 exit 0; # will build anyway, since the files exist
53 }
54
55 my $source = 'lib/IPC/SysV.pm';
56 local $_;
57 local *SYSV;
58
59 open SYSV, $source or die "$source: $!\n";
60
61 my $parse = 0;
62 my @const;
63
64 while (<SYSV>) {
65 if ($parse) {
66 if (/^\)/) { $parse++; last }
67 push @const, split;
68 }
69 /^\@EXPORT_OK\s*=/ and $parse++;
70 }
71
72 close SYSV;
73
74 die "couldn't parse $source" if $parse != 2;
75
76 eval {
77 ExtUtils::Constant::WriteConstants(
78 NAME => 'IPC::SysV',
79 NAMES => \@const,
80 XS_FILE => 'const-xs.inc',
81 C_FILE => 'const-c.inc',
82 XS_SUBNAME => '_constant',
83 );
84 };
85
86 if ($@) {
87 my $err = "Cannot regenerate constants:\n$@\n";
88 if ($[ < 5.006) {
89 print STDERR $err;
90 exit 0;
91 }
92 die $err;
93 }
94
95 print "Writing const-xs.inc\n";
96 print "Writing const-c.inc\n";
97}