if 0;
# Generate a release announcement message.
-my $VERSION = '2012-03-20 23:17'; # UTC
+my $VERSION = '2012-06-08 06:53'; # UTC
# The definition above must lie within the first 8 lines in order
# for the Emacs time-stamp write hook (at end) to update it.
# If you change this file with Emacs, please let the write hook
# do its job. Otherwise, update this string manually.
-# Copyright (C) 2002-2012 Free Software Foundation, Inc.
+# Copyright (C) 2002-2013 Free Software Foundation, Inc.
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
use Getopt::Long;
use Digest::MD5;
eval { require Digest::SHA; }
- or eval { use Digest::SHA1; };
+ or eval 'use Digest::SHA1';
use POSIX qw(strftime);
(my $ME = $0) =~ s|.*/||;
my %valid_release_types = map {$_ => 1} qw (alpha beta stable);
my @archive_suffixes = ('tar.gz', 'tar.bz2', 'tar.lzma', 'tar.xz');
+my $srcdir = '.';
sub usage ($)
{
my @types = sort keys %valid_release_types;
print $STREAM <<EOF;
Usage: $ME [OPTIONS]
-Generate an announcement message.
+Generate an announcement message. Run this from builddir.
OPTIONS:
The following are optional:
- --news=NEWS_FILE
+ --news=NEWS_FILE include the NEWS section about this release
+ from this NEWS_FILE; accumulates.
+ --srcdir=DIR where to find the NEWS_FILEs (default: $srcdir)
--bootstrap-tools=TOOL_LIST a comma-separated list of tools, e.g.,
autoconf,automake,bison,gnulib
--gnulib-version=VERSION report VERSION as the gnulib version, where
my %res;
foreach my $f (@file)
{
- my $cmd = "du --human $f";
+ my $cmd = "du -h $f";
my $t = `$cmd`;
# FIXME-someday: give a better diagnostic, a la $PROCESS_STATUS
$@
- and (warn "$ME: command failed: '$cmd'\n"), $fail = 1;
+ and (warn "command failed: '$cmd'\n"), $fail = 1;
chomp $t;
- $t =~ s/^([\d.]+[MkK]).*/${1}B/;
+ $t =~ s/^\s*([\d.]+[MkK]).*/${1}B/;
$res{$f} = $t;
}
return $fail ? undef : %res;
my ($news_file, $prev_version, $curr_version) = @_;
my $news_name = $news_file;
- $news_name =~ s|^\./||;
+ $news_name =~ s|^\Q$srcdir\E/||;
print "\n$news_name\n\n";
# The exit code should be 1.
# Allow in case there are no modified ChangeLog entries.
$? == 256 || $? == 128
- or warn "$ME: warning: '$cmd' had unexpected exit code or signal ($?)\n";
+ or warn "warning: '$cmd' had unexpected exit code or signal ($?)\n";
}
sub get_tool_versions ($$)
{
defined $first_line
and $first_line = '';
- warn "$ME: $t: unexpected --version output\n:$first_line";
+ warn "$t: unexpected --version output\n:$first_line";
$fail = 1;
}
}
my $gnulib_version;
my $print_checksums_p = 1;
+ # Reformat the warnings before displaying them.
+ local $SIG{__WARN__} = sub
+ {
+ my ($msg) = @_;
+ # Warnings from GetOptions.
+ $msg =~ s/Option (\w)/option --$1/;
+ warn "$ME: $msg";
+ };
+
GetOptions
(
'mail-headers=s' => \$mail_headers,
'gpg-key-id=s' => \$gpg_key_id,
'url-directory=s' => \@url_dir_list,
'news=s' => \@news_file,
+ 'srcdir=s' => \$srcdir,
'bootstrap-tools=s' => \$bootstrap_tools,
'gnulib-version=s' => \$gnulib_version,
'print-checksums!' => \$print_checksums_p,
) or usage 1;
my $fail = 0;
- # Ensure that sure each required option is specified.
+ # Ensure that each required option is specified.
$release_type
- or (warn "$ME: release type not specified\n"), $fail = 1;
+ or (warn "release type not specified\n"), $fail = 1;
$package_name
- or (warn "$ME: package name not specified\n"), $fail = 1;
+ or (warn "package name not specified\n"), $fail = 1;
$prev_version
- or (warn "$ME: previous version string not specified\n"), $fail = 1;
+ or (warn "previous version string not specified\n"), $fail = 1;
$curr_version
- or (warn "$ME: current version string not specified\n"), $fail = 1;
+ or (warn "current version string not specified\n"), $fail = 1;
$gpg_key_id
- or (warn "$ME: GnuPG key ID not specified\n"), $fail = 1;
+ or (warn "GnuPG key ID not specified\n"), $fail = 1;
@url_dir_list
- or (warn "$ME: URL directory name(s) not specified\n"), $fail = 1;
+ or (warn "URL directory name(s) not specified\n"), $fail = 1;
my @tool_list = split ',', $bootstrap_tools;
grep (/^gnulib$/, @tool_list) ^ defined $gnulib_version
- and (warn "$ME: when specifying gnulib as a tool, you must also specify\n"
+ and (warn "when specifying gnulib as a tool, you must also specify\n"
. "--gnulib-version=V, where V is the result of running git describe\n"
. "in the gnulib source directory.\n"), $fail = 1;
exists $valid_release_types{$release_type}
- or (warn "$ME: '$release_type': invalid release type\n"), $fail = 1;
+ or (warn "'$release_type': invalid release type\n"), $fail = 1;
@ARGV
- and (warn "$ME: too many arguments:\n", join ("\n", @ARGV), "\n"),
+ and (warn "too many arguments:\n", join ("\n", @ARGV), "\n"),
$fail = 1;
$fail
and usage 1;