diff options
author | Graham Wilson <graham@mknod.org> | 2004-08-30 01:34:48 +0000 |
---|---|---|
committer | Graham Wilson <graham@mknod.org> | 2004-08-30 01:34:48 +0000 |
commit | c3a80da98846c21a5d3f32a91669d78774a0aa6a (patch) | |
tree | 72bee6836c468c8527560821cd65618f2c7b115d /dist-tools/makerelease | |
parent | fd2543489b53fe34a18b7204d6803bf527c0d198 (diff) | |
download | fetchmail-c3a80da98846c21a5d3f32a91669d78774a0aa6a.tar.gz fetchmail-c3a80da98846c21a5d3f32a91669d78774a0aa6a.tar.bz2 fetchmail-c3a80da98846c21a5d3f32a91669d78774a0aa6a.zip |
Move a handful of scripts (used for releases, testing, etc.) to dist-tools, so that they are not released in the tarball.
svn path=/trunk/; revision=3934
Diffstat (limited to 'dist-tools/makerelease')
-rwxr-xr-x | dist-tools/makerelease | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/dist-tools/makerelease b/dist-tools/makerelease new file mode 100755 index 00000000..41ddf038 --- /dev/null +++ b/dist-tools/makerelease @@ -0,0 +1,176 @@ +#!/usr/bin/env perl +# +# Make a fetchmail release. Must be run as root, to make RPMs. +# Dumps a release notice and diffs as a MIME multipart message +# in RELEASE_NOTES +# +use POSIX qw(strftime); +$timezone = strftime('%z', localtime) || "-0500"; +$tmp = $ENV{TMPDIR} || $ENV{TMP} || $ENV{TEMP} || "/tmp"; + +$project = "fetchmail"; +$svnrepos = "svn://svn.berlios.de/$project"; +$website = "http://developer.berlios.de/projects/$project"; +$mailfrom = "<$project-devel-owner\@lists.berlios.de> (Fetchmail Development Team)"; + +# parse options +$diffs = 0; +$verbose = 0; +$null = ">/dev/null"; +$errnull = "2>/dev/null"; +while ($i = shift @ARGV) +{ + if ($i =~ /^(--diffs|-d)$/i) + { + $diffs = 1; + next; + } + + if ($i =~ /^(--verbose|-v)$/i) + { + $verbose = 1; + $null = ""; + next; + } + + die "Error: Unknown option: $i\n"; +} + +# extract version from source +$version=`grep 'AC_INIT' configure.in`; +$version =~ /AC_INIT\([^,]*,\[?([0-9.]+)\]?\)/; +$version = $1; +die "cannot determine version" unless defined $1; +$tag = "RELEASE_$version"; +$tag =~ tr/./-/; + +# extract existing tags +open(ID, "svn ls $svnrepos/tags|"); +while (<ID>) { + if (m{^(RELEASE_.*)/}) { + unshift(@versions, $1); + } +} +close(ID); + +if ($versions[0] eq $tag) { + $tag = $versions[0]; + $oldtag = $versions[1]; +} else { + $tag = '<workfile>'; + $oldtag = $versions[0]; +} + +$ENV{PATH} .= ":./dist-tools:./dist-tools/shipper:."; + +print "Building $version release, tag $tag, previous tag $oldtag\n"; + +if (-d autom4te.cache) { + system("rm -rf autom4te.cache") + and die "Failure in removing autom4te.cache"; +} + +if (system("autoreconf -isv")) { + die("Failure in regenerating autoconf files\n"); +} + +if (system("./configure && make clean && make -C po update-po && make clean")) { + die("Failure in translation-file rebuild\n"); +} + +print "### Test-building the software...\n"; +if (system("./configure && make clean && make all check")) { + die("Compilation failure\n"); +} + +print "### Building the distribution...\n"; +if (system("make dist $null")) { + die("Distribution-build failure\n"); +} + +print "### Building the RPMs...\n"; +if (system("buildrpms $project-${version}.tar.gz $null")) { + die("RPM-build failure\n"); +} + +open(REPORT, ">$tmp/$project.PREAMBLE.$$"); + +print REPORT <<EOF; +From: $mailfrom +Subject: The $version release of $project is available + +The $version release of $project is now available at the usual locations, +including <URL:$website>. + +The source archive is available at: +<URL:$website/$project-${version}.tar.gz> + +Here are the release notes: + +EOF + +# Extract the current notes +open(NEWS, "NEWS"); +while (<NEWS>) { + if (/^$project/) { + print REPORT $_; + last; + } +} +while (<NEWS>) { + if (/^$project/) { + last; + } + print REPORT $_; +} + +$oldver = $oldtag; +$oldver =~ tr/-/./; +$oldver =~ s/^RELEASE_//; + +if ($diffs) { + print REPORT "Diffs from the previous ($oldver) release follow as a MIME attachment." +} else { + print REPORT "By popular demand, diffs from the previous release have been omitted." +} + +close(NEWS); + +close(REPORT); + +if ($tag eq '<workfile>') { + system("svn diff -r$oldtag $errnull >$tmp/$project.DIFFS.$$"); +} else { + system("svn diff -r$oldtag -r$tag $errnull >$tmp/$project.DIFFS.$$"); +} +print "Diff size:"; +system("wc <$tmp/$project.DIFFS.$$"); + +if ($diffs) { + system "metasend -b" + ." -D '$project-$tag announcement' -m 'text/plain' -e 7bit -f $tmp/$project.PREAMBLE.$$" + ." -n -D 'diff between $oldver and $version' -m 'text/plain' -e 7bit -f $tmp/$project.DIFFS.$$" + ." -o ANNOUNCE.EMAIL"; +} else { + rename("$tmp/$project.PREAMBLE.$$", "ANNOUNCE.EMAIL"); +} +#system("chown esr ANNOUNCE.EMAIL"); +#chmod(0700, "ANNOUNCE.EMAIL"); + +#unlink("$tmp/$project.PREAMBLE.$$"); +unlink("$tmp/$project.DIFFS.$$"); + +print "Building index page...\n"; +system("rm -f index.html; indexgen.sh"); + +if (-r "testsites") { + print "Building test server list...\n"; + system("rm -f testservers.html; testservers-gen.sh >testservers.html"); +} + +print "Making activity graph..."; +system "growthplot"; + +print "Done\n"; + +# makerelease ends here |