#!/usr/bin/perl -w

use strict;

die "$0: must be run from top-level directory.\n"
    unless -r "configure.in" && -r 'ChangeLog';

my $newversion = $ARGV[0];
die "$0: you must supply the new version as argument.\n"
    unless $newversion;

my $email = $ENV{'EMAIL'};
die "$0: you must define \$EMAIL.\n"
    unless defined $email;

my $name = $ENV{'NAME'};
die "$0: you must define \$NAME.\n"
    unless defined $name;

my ($y,$m,$d) = (localtime (time))[5,4,3];
$y += 1900;
$m++;
my $date = sprintf ("%04d-%02d-%02d", $y, $m, $d);

my $entry = "$date  $name <$email>\n\n\t* Release $newversion\n\n";

# -----------------------------------------------------------------------------
# These are shared directories.
my %exceptions = ('macros' => 1, 'intl' => 1);

my $clogstxt = `find . -name ChangeLog -print`;
chomp $clogstxt;
my @clogs = split ("\n", $clogstxt);

foreach my $filename (sort @clogs) {
    my $dir = $filename;
    $dir =~ s|/ChangeLog$||;
    my $fulldir = $dir;
    $dir =~ s|^\./||;
    if ($exceptions{$dir} || $fulldir =~ m{/tools/win32/}) {
	print "Skipping $filename\n";
	next;
    }

    local (*SRC);
    local (*DST);
    print "Updating $filename...\n";

    open (*SRC, "<$filename") || die "$0: failed to read $filename: $!\n";
    open (*DST, ">$filename.tmp") || die "$0: failed to write $filename.tmp: $!\n";
    print DST $entry;
    foreach (<SRC>) { print DST; }
    close (*DST);
    close (*SRC);

    rename ("$filename.tmp", $filename);
}
