hdf5/bin/h5vers
Robb Matzke e4aae4fd9b [svn-r549] ./bin/h5vers
Fixed a bug that caused `h5vers -i' to fail with a usage
	message.  The new behavior is the same as `h5vers -i release'
	which increments the release number.

./bin/snapshot
	A shell script intended to be run nightly from cron which
	compares the current version of hdf5 against the previous
	version.  If there are differences it creates a tar file in an
	ftp directory, increments the hdf5 release number, and commits
	the changes back into the cvs repository.  The name of the ftp
	directory in which to place the release can be given on the
	command line (default /hdf3/ftp/pub/outgoing/hdf5/snapshots).
	The CVSROOT environment variable must be set.
1998-07-30 14:48:20 -05:00

158 lines
4.6 KiB
Perl
Executable File

#!/usr/bin/perl -w
require 5.003;
### Copyright © 1998 NCSA.
# Robb Matzke <matzke@llnl.gov>
# 17 July 1998
### Purpose
# Increments the hdf5 version number by changing the value of
# constants in the src/H5public.h file. The new version number is
# printed on the standard output. An alternate source file name can be
# specified as an argument. In any case, the original file is saved
# by appending a tilde `~' to the name.
### Usage:
# h5vers [OPTIONS] [FILE]
# Without options this program only displays the current version and
# doesn't modify any files or create backups. The default is to print
# the version number as a dotted triple like `1.0.24' but with the
# `-v' option the version will be printed as `version 1.0 release 24'.
#
# The `-s VERSION' switch will set the version as specified. If the
# string contains a dotted triple then it will be used as the version
# number, otherwise up to three numbers will be read from the end of
# the string and used as the major version, minor version, and release
# number. If any numbers are missing then zero is assumed. This
# allows versions to be specified like `-s "version 2.1 release 8"' or
# `-s hdf5-2.1.8.tar.bz2'. If the new version is less than the old
# version then a warning message is generated on standard error.
#
# The `-i [major|minor|release]' option increments the major, minor,
# or release (the default) number. If the minor number is incremented
# then the release number is set to zero; if the major number is
# incremented then the minor and release numbers are set to zero.
#
# If a file is specified then that file is used instead of
# ./H5public.h or ./src/H5public.h.
##############################################################################
sub getvers {
local ($_) = @_;
my (@vers);
($vers[0]) = /^\#\s*define\s+H5_VERS_MAJOR\s+(\d+)/m;
($vers[1]) = /^\#\s*define\s+H5_VERS_MINOR\s+(\d+)/m;
($vers[2]) = /^\#\s*define\s+H5_VERS_RELEASE\s+(\d+)/m;
return @vers;
}
sub setvers {
my ($contents, @vers) = @_;
$_[0] =~ s/^(\#\s*define\s+H5_VERS_MAJOR\s+)\d+/$1$vers[0]/m;
$_[0] =~ s/^(\#\s*define\s+H5_VERS_MINOR\s+)\d+/$1$vers[1]/m;
$_[0] =~ s/^(\#\s*define\s+H5_VERS_RELEASE\s+)\d+/$1$vers[2]/m;
}
# Parse arguments
my ($verbose, $set, $inc, $file);
my (@files) = ("H5public.h", "src/H5public.h", "../src/H5public.h");
while ($_ = shift) {
$_ eq "-s" && do {
die "-s switch needs a version number\n" unless @ARGV;
$set = shift;
next;
};
$_ eq "-i" && do {
if (@ARGV && $ARGV[1]=~/^(major|minor|release)$/) {
$inc = shift;
} else {
$inc = "release";
}
next;
};
$_ eq "-v" && do {
$verbose = 1;
next;
};
/^-/ && die "unrecognized option: $ARGV[0]\n";
die "only one file name can be specified\n" if $file;
$file = _;
}
die "mutually exclusive options given\n" if $set && $inc;
# Determine file to use
unless ($file) {
for (@files) {
($file=$_,last) if -f $_;
}
}
die "unable to read file: $file\n" unless -r $file;
# Get the current version number.
open FILE, $file or die "unable to open $file: $!\n";
my ($contents) = join "", <FILE>;
close FILE;
my (@curver) = getvers $contents;
# Determine the new version number.
if ($set) {
if ($set =~ /(\d+)\.(\d+)\.(\d+)/) {
@newver = ($1, $2, $3);
} elsif ($set =~ /(\d+)\D+(\d+)\D+(\d+)\D*$/) {
@newver = ($1, $2, $3);
} elsif ($set =~ /(\d+)\D+(\d+)\D*$/) {
@newver = ($1, $2, 0);
} elsif ($set =~ /(\d+)\D*$/) {
@newver = ($1, 0, 0);
} else {
die "illegal version number specified: $set\n";
}
} elsif ($inc && $inc eq "major") {
$newver[0] = $curver[0]+1;
@newver[1,2] = (0,0);
} elsif ($inc && $inc eq "minor") {
$newver[0] = $curver[0];
$newver[1] = $curver[1]+1;
$newver[2] = 0;
} elsif ($inc && $inc eq "release") {
@newver[0,1] = @curver[0,1];
$newver[2] = $curver[2]+1;
} elsif ($inc) {
die "unknown increment field: $inc\n";
} else {
@newver = @curver;
}
# Print a warning if the version got smaller.
if ($newver[0]*1000000 + $newver[1]*1000 + $newver[2] <
$curver[0]*1000000 + $curver[1]*1000 + $curver[2]) {
printf STDERR "Warning: version decreased from %d.%d.%d to %d.%d.%d\n",
@curver, @newver;
}
# Update the version number if it changed.
if ($newver[0]!=$curver[0] ||
$newver[1]!=$curver[1] ||
$newver[2]!=$curver[2]) {
setvers $contents, @newver or die "unable to set version\n";
rename $file, "$file~" or die "unable to save backup file\n";
open FILE, ">$file" or die "unable to open $file but backup saved!\n";
print FILE $contents;
close FILE;
}
# Print the new version number
if ($verbose) {
printf "version %d.%d release %d\n", @newver;
} else {
printf "%d.%d.%d\n", @newver;
}
exit 0;