#!/usr/bin/env perl # # This program creates a source distribution of qpdf. For details, # see README-maintainer.md. # 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(); 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_error) { die "$whoami: version numbers are not consistent\n"; } run("./autogen.sh"); run("./configure --enable-doc-maintenance --enable-werror"); run("make -j8 build_manual"); run("make distclean"); cd($pwd); run("tar czvf $srcdir.tar.gz-candidate $srcdir"); if ($run_tests) { cd($srcdir); run("./configure"); run("make -j8"); 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. "; }