qpdf/make_dist

166 lines
2.9 KiB
Perl
Executable File

#!/usr/bin/env perl
#
# This program creates a source distribution of qpdf. For details,
# see README.maintainer.
#
require 5.008;
BEGIN { $^W = 1; }
use strict;
use Cwd;
use IO::File;
my $whoami = ($0 =~ m,([^/\\]*)$,) ? $1 : $0;
#my $dirname = ($0 =~ m,(.*)[/\\][^/\\]+$,) ? $1 : ".";
usage() unless @ARGV >= 1;
my $srcdir = shift(@ARGV);
my $run_tests = 1;
if (@ARGV)
{
if ($ARGV[0] eq '--no-tests')
{
$run_tests = 0;
}
else
{
usage();
}
}
$srcdir =~ s,/$,,;
usage() unless $srcdir =~ m/^qpdf-(\d+\.\d+(?:\.(a|b|rc)\d+)?)$/;
my $version = $1;
usage() unless -d $srcdir;
my $pwd = getcwd();
cd($srcdir);
# Check versions
my $fh = safe_open("configure.ac");
my $config_version = 'unknown';
while (<$fh>)
{
if (m/^AC_INIT\(qpdf,([^\)]+)\)/)
{
$config_version = $1;
last;
}
}
$fh->close();
$fh = safe_open("qpdf/qpdf.cc");
my $code_version = 'unknown';
while (<$fh>)
{
if (m/whoami << \" version ([^\"]+)\"/)
{
$code_version = $1;
last;
}
}
$fh->close();
$fh = safe_open("manual/qpdf-manual.xml");
my $doc_version = 'unknown';
while (<$fh>)
{
if (m/swversion "([^\"]+)\"/)
{
$doc_version = $1;
last;
}
}
$fh->close();
$fh = safe_open("qpdf.spec");
my $spec_version = 'unknown';
while (<$fh>)
{
if (m/Version: (.*)$/)
{
$spec_version = $1;
last;
}
}
my $version_error = 0;
if ($version ne $config_version)
{
print "$whoami: configure.ac version = $config_version\n";
$version_error = 1;
}
if ($version ne $code_version)
{
print "$whoami: qpdf.cc version = $code_version\n";
$version_error = 1;
}
if ($version ne $doc_version)
{
print "$whoami: qpdf-manual.xml version = $doc_version\n";
$version_error = 1;
}
if ($version ne $spec_version)
{
print "$whoami: qpdf.spec version = $spec_version\n";
$version_error = 1;
}
if ($version_error)
{
die "$whoami: version numbers are not consistent\n";
}
run("autoconf");
run("./configure --enable-doc-maintenance");
run("make build_manual");
run("make distclean");
cd($pwd);
run("tar czvf $srcdir.tar.gz-candidate $srcdir");
if ($run_tests)
{
cd($srcdir);
run("./configure");
run("make check");
cd($pwd);
}
rename "$srcdir.tar.gz-candidate", "$srcdir.tar.gz" or die;
print "
Source distribution created as $srcdir.tar.gz
You can now remove $srcdir.
If this is a release, don't forget to tag the version control system and
make a backup of the release tar file.
";
sub safe_open
{
my $file = shift;
my $fh = new IO::File("<$file") or die "$whoami: can't open $file: $!";
$fh;
}
sub run
{
my $cmd = shift;
system($cmd) == 0 or die "$whoami: $cmd failed\n";
}
sub cd
{
my $dir = shift;
chdir($dir) or die;
}
sub usage
{
die "
Usage: $whoami qpdf-version [ --no-tests ]
qpdf-version must be a directory containing a pristine export of that
version of qpdf from the version control system. Use of --no-tests
can be used for internally testing releases, but do not use it for a
real release.
";
}