Commit | Line | Data |
8f85282b |
1 | use strict; |
2 | |
3 | unless (@ARGV) { |
4 | @ARGV = qw( constants ); |
5 | } |
6 | |
7 | my %gen = map { ($_ => 1) } @ARGV; |
8 | |
9 | if (delete $gen{constants}) { |
10 | make_constants(); |
11 | } |
12 | |
13 | for my $key (keys %gen) { |
14 | print STDERR "Invalid request to regenerate $key!\n"; |
15 | } |
16 | |
17 | sub 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 | |
8a720e6b |
31 | print STDERR <<EOM if @outdated; |
8f85282b |
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 | |
50 | EOM |
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"; |
8a720e6b |
88 | if ($] < 5.006) { |
8f85282b |
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 | } |