copyrite copyright writer
[catagits/copyrite.git] / copyrite-gen
CommitLineData
bcba2324 1#!/usr/bin/env perl
2
3use strict; use warnings FATAL => 'all';
4
5use IO::All qw(io);
6use List::Util qw(first min max);
7
8sub vwarn { warn $_[0] if $ENV{COPYRITE_VERBOSE} }
9
10my $fname = shift @ARGV;
11
12unless ($fname and $fname =~ /\.pm$/) {
13 die "You didn't supply me a filename or it didn't end in .pm - please
14invoke me as $0 lib/Foo/Bar.pm or similar";
15}
16
17my %head_section; @head_section{qw(AUTHOR AUTHORS CONTRIBUTORS)} = (1,1,1);
18
19my @lines = io($fname)->getlines;
20
21my @use = grep $head_section{$_}, map { /^=head1 (\w+)/ ? ($1) : () } @lines;
22
23die "Couldn't find =head1 sections for any of ".join(' ', keys %head_section)
24 unless @use;
25
26vwarn "Found =head1 sections for: ".join(' ', @use)." in ${fname}\n";
27
28my $changes = first { -e $_ } qw(Changes ChangeLog);
29
30die "Couldn't find Changes or ChangeLog file :(" unless $changes;
31
32my @changes = io($changes)->getlines;
33
34my @years = map /(200\d|199\d)/g, grep /^\S/, @changes;
35
36vwarn "Found years: ".join(' ', @years)." in ${changes}\n";
37
38vwarn "Patch follows:\n\n\n";
39
40my ($min_year, $max_year) = (min(@years), max(@years));
41
42my $year_set = do {
43 if ($max_year > $min_year) {
44 "${min_year} - ${max_year}"
45 } else {
46 "${max_year}"
47 }
48};
49
50my $section_links = join ' and ', map "L</${_}>", @use;
51
52my $pname = join '::', map { s/\.pm//; $_ } grep /^[A-Z]/, split /\//, $fname;
53
54my $pod = <<"END";
55 =head1 COPYRIGHT
56
57 Copyright (c) ${min_year} - ${max_year}
58 the ${pname} ${section_links}
59 as listed above.
60
61END
62
63$pod =~ s/^ //mg;
64
65print $pod;