2
1
mirror of https://github.com/qpdf/qpdf.git synced 2024-12-23 03:18:59 +00:00
qpdf/make_dist
2012-06-21 17:28:19 -04:00

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;
use warnings;
use strict;
use File::Basename;
use Cwd;
use IO::File;
my $whoami = basename($0);
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("libqpdf/QPDF.cc");
my $code_version = 'unknown';
while (<$fh>)
{
if (m/QPDF::qpdf_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("./autogen.sh");
run("./configure --enable-doc-maintenance --enable-werror");
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.
";
}