xref: /netbsd-src/external/ibm-public/postfix/dist/mantools/make-relnotes (revision f3bc92a4f25066883a5d85d66df30605583c883c)
1#!/usr/bin/perl
2
3# Transform RELEASE_NOTES, split into "leader", and "major changes",
4# split into major categories, and prepend dates to paragraphs.
5#
6# Input format: the leader text is copied verbatim; each section
7# starts with "Incompatible changes with snapshot YYYYMMDD" or "Major
8# changes with snapshot YYYYMMDD"; each paragraph starts with [class,
9# class] where a class specifies one or more categories that the
10# change should be listed under. Adding class info is the only manual
11# processing needed to go from a RELEASE_NOTES file to the transformed
12# representation.
13#
14# Output format: each category is printed with a little header and
15# each paragraph is tagged with [Incompat yyyymmdd] or with [Feature
16# yyyymmdd].
17
18%leader = (); %body = ();
19$append_to = \%leader;
20
21while (<>) {
22
23    if (/^(Incompatible changes|Incompatibility) with/) {
24	die "No date found: $_" unless /(\d\d\d\d\d\d\d\d)/;
25	$append_to = \%body;
26	$prefix = "[Incompat $1] ";
27	while (<>) {
28	    last if /^====/;
29	}
30	next;
31    }
32
33    if (/^Major changes with/) {
34	die "No date found: $_" unless /(\d\d\d\d\d\d\d\d)/;
35	$append_to = \%body;
36	$prefix = "[Feature $1] ";
37	while (<>) {
38	    last if /^====/;
39	}
40	next;
41    }
42
43    if (/^\s*\n/) {
44	if ($paragraph) {
45	    for $class (@classes) {
46		${$append_to}{$class} .= $paragraph . $_;
47	    }
48	    $paragraph = "";
49	}
50    } else {
51	if ($paragraph eq "") {
52	    if ($append_to eq \%leader) {
53		@classes = ("default");
54		$paragraph = $_;
55	    } elsif (/^\[([^]]+)\]\s*(.*)/s) {
56		$paragraph = $prefix . $2;
57		($junk = $1) =~ s/\s*,\s*/,/g;
58		$junk =~ s/^\s+//;
59		$junk =~ s/\s+$//;
60		#print "junk >$junk<\n";
61		@classes = split(/,+/, $junk);
62		#print "[", join(', ', @classes), "] ", $paragraph;
63	    } else {
64		$paragraph = $_;
65	    }
66	} else {
67	    $paragraph .= $_;
68	}
69    }
70}
71
72if ($paragraph) {
73    for $class (@classes) {
74	${$append_to}{$class} .= $prefix . $paragraph . $_;
75    }
76}
77
78print $leader{"default"};
79
80for $class (sort keys %body) {
81    print "Major changes - $class\n";
82    ($junk = "Major changes - $class") =~ s/./-/g;
83    print $junk, "\n\n";
84    print $body{$class};
85}
86