1
0
This repository has been archived on 2025-03-06. You can view files and clone it, but cannot push or open issues or pull requests.
on-restart-benchmarks/misc/genchangelog.perl
Jip J. Dekker 981be2067e Squashed 'software/gecode_on_replay/' content from commit 8051d92b9
git-subtree-dir: software/gecode_on_replay
git-subtree-split: 8051d92b9c89e49cccfbd1c201371580d7703ab4
2021-06-16 14:04:29 +10:00

253 lines
7.3 KiB
Perl

#!/usr/bin/perl
#
# Main authors:
# Christian Schulte <schulte@gecode.org>
#
# Contributing authors:
# Mikael Lagerkvist <lagerkvist@gecode.org>
#
# Copyright:
# Christian Schulte, 2005
# Mikael Lagerkvist, 2008
#
# This file is part of Gecode, the generic constraint
# development environment:
# http://www.gecode.org
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
#
#
# Compile changelog
#
$first = 1;
$version = "";
$moreinfocnt = 1;
$info = "";
$modclear{"kernel"} = "Kernel";
$modclear{"search"} = "Search engines";
$modclear{"int"} = "Finite domain integers";
$modclear{"set"} = "Finite integer sets";
$modclear{"float"} = "Floats";
$modclear{"cpltset"} = "Finite integer sets with complete representation";
$modclear{"minimodel"} = "Minimal modeling support";
$modclear{"graph"} = "\%Graph constraints";
$modclear{"scheduling"} = "Scheduling constraints";
$modclear{"driver"} = "Script commandline driver";
$modclear{"iter"} = "Range and value iterators";
$modclear{"support"} = "Support algorithms and datastructures";
$modclear{"example"} = "\%Example scripts";
$modclear{"test"} = "Systematic tests";
$modclear{"gist"} = "Gist";
$modclear{"flatzinc"} = "Gecode/FlatZinc";
$modclear{"other"} = "General";
$whatclear{"bug"} = "Bug fixes";
$whatclear{"performance"} = "Performance improvements";
$whatclear{"documentation"} = "Documentation fixes";
$whatclear{"new"} = "Additions";
$whatclear{"removed"} = "Removals";
$whatclear{"change"} = "Other changes";
$rankclear{"minor"} = "minor";
$rankclear{"major"} = "major";
@modorder = ("kernel","search","int","set","float","cpltset","scheduling",
"graph","minimodel","driver",
"iter","support","example","test","gist","flatzinc","other");
@whatorder = ("new","removed","change","bug","performance","documentation");
foreach $mod (@modorder) {
$hastext{$mod} = 0;
foreach $what (@whatorder) {
$text{"$mod-$what"} = "";
}
}
$versions = "";
$body = "";
while ($l = <>) {
LINE:
next if ($l =~ /^\#/);
if ($l =~ /^\[RELEASE\]/) {
# Print previous
if (!$first) {
$sid = "SectionChanges_$version";
$sid =~ s|\.|_|g;
$versions = $versions . "\n - \\ref $sid \"Gecode $version ($date)\"";
$body = $body."\\section $sid Changes in Version $version ($date)\n\n";
$body = $body."$info\n\n";
foreach $mod (@modorder) {
if ($hastext{$mod}) {
$body = $body." - " . $modclear{$mod} . "\n";
$hastext{$mod} = 0;
foreach $what (@whatorder) {
if (!($text{"$mod-$what"} eq "")) {
$body = $body." - " . $whatclear{$what} . "\n";
$body = $body.$text{"$mod-$what"};
$text{"$mod-$what"} = "";
$body = $body." .\n";
}
}
$body = $body." .\n";
}
}
$body = $body."\n\n";
}
$first = 0;
$version = "";
$info = "";
$date = "";
while (($l = <>) && !($l =~ /\[DESCRIPTION\]/)) {
if ($l =~ /Version:[\t ]*(.*)$/) {
$version = $1;
} elsif ($l =~ /Date:[\t ]*(.*)$/) {
$date = $1;
}
}
while (($l = <>) && !($l =~ /\[ENTRY\]/)) {
$info = $info . $l;
}
goto LINE;
}
if ($l =~ /^\[ENTRY\]/) {
my $mod, $what, $rank, $bug, $issue, $desc, $more, $thanks, $author;
$desc = "";
$more = "";
$bug = "";
$issue = "";
$rank = "";
$what = "";
$mod = "";
$thanks = "";
$author = "";
while (($l = <>) && !($l =~ /\[DESCRIPTION\]/)) {
if ($l =~ /Module:[\t ]*(.*)$/) {
$mod = $1;
} elsif ($l =~ /What:[\t ]*(.*)$/) {
$what = $1;
} elsif ($l =~ /Rank:[\t ]*(.*)$/) {
$rank = $1;
} elsif ($l =~ /Bug:[\t ]*(.*)$/) {
$bug = $1;
} elsif ($l =~ /Issue:[\t ]*(.*)$/) {
$issue = $1;
} elsif ($l =~ /Thanks:[\t ]*(.*)$/) {
$thanks = $1;
} elsif ($l =~ /Author:[\t ]*(.*)$/) {
$author = $1;
}
}
while (($l = <>) &&
!(($l =~ /\[ENTRY\]/) || ($l =~ /\[RELEASE\]/) || ($l =~ /\[MORE\]/))) {
$desc = $desc . " " . $l;
}
$desc =~ s/^ //;
$desc =~ s/[ \t\n\r]*$//;
$desc =~ s/</\\</g;
$desc =~ s/>/\\>/g;
$desc =~ s/&/\\&/g;
$desc =~ s/\n([ \t]*)\n/\n\1<br>\n/g;
if ($l =~ /^\[MORE\]/) {
while (($l = <>) &&
!(($l =~ /\[ENTRY\]/) || ($l =~ /\[RELEASE\]/))) {
$more = $more . " " . $l;
}
}
$more =~ s/[ \t\n\r]*$//;
$more =~ s/</\\</g;
$more =~ s/>/\\>/g;
$more =~ s/</\\</g;
$more =~ s/&/\\&/g;
$more =~ s/\n([ \t]*)\n/\n\1<br>\n/g;
$hastext{$mod} = 1;
$rb = $rankclear{$rank};
if (!($issue eq "")) {
$rb = $rb . ", <a href=\"https://github.com/gecode/gecode/issues/$issue\">issue $issue</a>";
}
if (!($thanks eq "")) {
$rb = $rb . ", thanks to $thanks";
}
if (!($author eq "")) {
$rb = $rb . ", contributed by $author";
}
if (!($more eq "")) {
$more =~ s/^ //;
$more =~ s/[ \t\n\r]*$//;
$more =
" <span id=lesslink" . $moreinfocnt . " style=\"display: inline\">\n" .
" <a href=\"javascript:showInfo(" . $moreinfocnt . ", true)\">Details</a></span>\n" .
" <span id=morelink" . $moreinfocnt . " style=\"display: none\">\n" .
" <a href=\"javascript:showInfo(" . $moreinfocnt . ", false)\">Hide details</a></span>\n" .
" <div id=moreinfo" . $moreinfocnt . " style=\"display: none\">\n" .
" ". $more . "\n</div>\n";
$moreinfocnt = $moreinfocnt + 1;
}
$text{"$mod-$what"} =
($text{"$mod-$what"} . " - $desc (" . $rb . ")\n"
. $more);
goto LINE;
}
}
print <<EOF
/**
\\page PageChange Changelog
\\section SectionChangeList Changes in Gecode Versions
$versions
- \\ref SectionChanges_1_0_0 "Gecode 1.0.0 (2005-12-06)"
\\section SectionChangeWhat Gecode Version Numbers
%Gecode version numbers <em>x</em>.<em>y</em>.<em>z</em> change
according to the following rules (of thumb):
- when \\e z changes, the programming interfaces for
\\ref TaskModel, and \\ref TaskSearch remain
stable and only minor additions or improvements are included.
- when \\e y changes, the above mentioned interfaces might have changed
and medium to major additions or improvements are included.
- the change of \\e x is reserved for radical changes to %Gecode.
EOF
;
print $body;
print <<EOF
\\section SectionChanges_1_0_0 Changes in Version 1.0.0 (2005-12-06, initial release)
No changes, of course.
EOF
;
print "\n\n*/\n";