--- /dev/null
+#!/usr/bin/perl -- # -*- Perl -*-
+
+use strict;
+use Getopt::Std;
+use vars qw($opt_v $opt_n $opt_d);
+
+select STDOUT; $| = 1;
+
+my $usage = "Usage: $0 [-d] [-v version] [-n newversion]\n";
+
+die $usage if ! getopts('dv:n:');
+my $oldversion = $opt_v || undef;
+my $newversion = $opt_n || undef;
+
+die $usage if !$oldversion || !$newversion;
+
+die "You must be in the DocBook DTD directory.\n"
+ unless -f "docbook.dtd" || -f "docbookx.dtd";
+
+my @cvsbad = `cvs -n update 2>&1 | grep -v ^cvs`;
+if (@cvsbad) {
+ print STDERR @cvsbad;
+ die "CVS is not up-to-date!\n";
+}
+
+my $xml = -f "docbookx.dtd";
+my $distribdir = "docbook-$newversion";
+$distribdir = "docbook-xml-$newversion" if $xml;
+my $distribroot = "/tmp/$distribdir";
+
+if ($opt_d) {
+ print "Making distribution for $newversion\n";
+ system("rm -rf $distribroot");
+ mkdir($distribroot, 0755) || die "Failed to create $distribroot.\n";
+} else {
+ print "Changing $oldversion to $newversion\n";
+}
+
+opendir (DIR, ".");
+while (my $name = readdir(DIR)) {
+ next if -d $name;
+ next if $name =~ /\~$/;
+ next if $name eq '.cvsignore';
+ next if $name eq 'Makefile';
+ next if $name =~ /^test\./;
+ my $file = $name;
+
+ open (F, $file);
+ read (F, $_, -s $file);
+ close (F);
+
+ my $newfile = $file;
+ $newfile = "$distribroot/$name" if $opt_d;
+
+ s/$oldversion/$newversion/sg;
+
+ open (F, ">$newfile");
+ print F $_;
+ close (F);
+}
+closedir (DIR);
+
+if ($opt_d && !$xml) {
+ opendir (DIR, "../xml");
+ while (my $name = readdir(DIR)) {
+ next if -d $name;
+ next if $name =~ /\~$/;
+ next if $name eq '.cvsignore';
+ next if $name eq 'Makefile';
+ next if $name =~ /^test\./;
+ my $file = "../xml/$name";
+
+ open (F, $file);
+ read (F, $_, -s $file);
+ close (F);
+
+ my $newfile = $file;
+ $newfile = "$distribroot/$name" if $opt_d;
+
+ s/$oldversion/$newversion/sg;
+
+ if (! -f $newfile) {
+ open (F, ">$newfile");
+ print F $_;
+ close (F);
+ }
+ }
+ closedir (DIR);
+}
+
+if ($opt_d) {
+ chdir ("/tmp");
+ system ("tar cf - $distribdir | gzip > $distribdir.tar.gz");
+ system ("zip -rpD $distribdir.zip $distribdir");
+}