Commit | Line | Data |
603f4ea0 |
1 | #!perl |
2 | use 5.010; |
3 | use strict; |
4 | use warnings; |
5 | use lib 'Porting'; |
6 | use Maintainers qw/%Modules/; |
7 | use Module::CoreList; |
8 | |
88e14305 |
9 | my $deprecated; |
10 | |
11 | #--------------------------------------------------------------------------# |
12 | |
13 | sub added { |
14 | my ($mod, $old_v, $new_v) = @_; |
15 | say "=item C<$mod>\n"; |
16 | say "Version $new_v has been added to the Perl core.\n"; |
17 | } |
18 | |
19 | sub updated { |
20 | my ($mod, $old_v, $new_v) = @_; |
21 | say "=item C<$mod>\n"; |
22 | say "Upgraded from version $old_v to $new_v.\n"; |
23 | if ( $deprecated->{$mod} ) { |
24 | say "NOTE: C<$mod> is deprecated and may be removed from a future version of Perl.\n"; |
25 | } |
26 | } |
27 | |
28 | sub removed { |
29 | my ($mod, $old_v, $new_v) = @_; |
30 | say "=item C<$mod>\n"; |
31 | say "Removed from the Perl core. Prior version was $old_v.\n"; |
32 | } |
33 | |
34 | sub generate_section { |
35 | my ($title, $item_sub, @mods ) = @_; |
36 | return unless @mods; |
37 | |
38 | say "=head2 $title\n"; |
39 | say "=over 4\n"; |
40 | |
41 | for my $tuple ( sort { lc($a->[0]) cmp lc($b->[0]) } @mods ) { |
42 | my ($mod,$old_v,$new_v) = @$tuple; |
43 | $old_v //= q('undef'); |
44 | $new_v //= q('undef'); |
45 | $item_sub->($mod, $old_v, $new_v); |
46 | } |
47 | |
48 | say "=back\n"; |
49 | } |
50 | |
51 | #--------------------------------------------------------------------------# |
52 | |
603f4ea0 |
53 | my $corelist = \%Module::CoreList::version; |
54 | my @versions = sort keys %$corelist; |
55 | |
56 | # by default, compare latest two version in CoreList; |
57 | my ($old, $new) = @ARGV; |
58 | $old ||= $versions[-2]; |
59 | $new ||= $versions[-1]; |
60 | |
88e14305 |
61 | $deprecated = $Module::CoreList::deprecated{$new}; |
603f4ea0 |
62 | |
88e14305 |
63 | my (@new,@deprecated,@removed,@pragmas,@modules); |
64 | |
65 | # %Modules defines what is currently in core |
66 | for my $k ( keys %Modules ) { |
67 | next unless exists $corelist->{$new}{$k}; |
68 | my $old_ver = $corelist->{$old}{$k}; |
69 | my $new_ver = $corelist->{$new}{$k}; |
70 | # in core but not in last corelist |
71 | if ( ! exists $corelist->{$old}{$k} ) { |
72 | push @new, [$k, undef, $new_ver]; |
73 | } |
74 | # otherwise just pragmas or modules |
75 | else { |
76 | my $old_ver = $corelist->{$old}{$k}; |
77 | my $new_ver = $corelist->{$new}{$k}; |
78 | next unless defined $old_ver && defined $new_ver && $old_ver ne $new_ver; |
79 | my $tuple = [ $k, $old_ver, $new_ver ]; |
80 | if ( $k eq lc $k ) { |
81 | push @pragmas, $tuple; |
82 | } |
83 | else { |
84 | push @modules, $tuple; |
85 | } |
86 | } |
603f4ea0 |
87 | } |
88 | |
88e14305 |
89 | # in old corelist, but not this one => removed |
90 | # N.B. This is exhaustive -- not just what's in %Modules, so modules removed from |
91 | # distributions will show up here, too. Some person will have to review to see what's |
92 | # important. That's the best we can do without a historical Maintainers.pl |
93 | for my $k ( keys %{ $corelist->{$old} } ) { |
94 | if ( ! exists $corelist->{$new}{$k} ) { |
95 | push @removed, [$k, $corelist->{$old}{$k}, undef]; |
96 | } |
97 | } |
98 | |
99 | generate_section("New Modules and Pragmata", \&added, @new); |
100 | generate_section("Pragmata Changes", \&updated, @pragmas); |
101 | generate_section("Updated Modules", \&updated, @modules); |
102 | generate_section("Removed Modules and Pragmata", \&removed, @removed); |
103 | |