use strict;
use warnings;
use File::Basename;
use Cwd;
my $cwd = cwd;
my $in_git = 1;
my $scriptpath = dirname($0);
my $outfile = $ARGV[0];
my $mergebase = $ARGV[1];
if (!$mergebase) {
$mergebase = "";
}
my $releasever;
open IN, "<", "$scriptpath/release_ver";
read IN, $releasever, 32;
close IN;
mkdir dirname($outfile);
my $verstring = "";
$verstring = `git describe --tags --long $mergebase 2> /dev/null || git describe --tags $mergebase 2> /dev/null`;
if (!$verstring) {
print STDERR "WARNING: Couldn't get revision information from Git. Using $scriptpath/release_ver.\n";
$verstring = $releasever;
$in_git = 0;
}
if (!$verstring) {
die "couldn't get the version information\n";
}
chomp($verstring);
my $component_pattern = "[v]?([0-9]+)[.]([0-9]+)[.]([0-9]+)(?:[.]([0-9]+))?(?:(?:-(?:([a-zA-Z]+)([0-9]+)))?(?:-([0-9]+)?-g[a-fA-F0-9]+)?)?";
if ($verstring =~ $component_pattern) {
} else {
die "Version string '$verstring' is malformed...\n";
}
my $major = $1;
my $minor = $2;
my $revis = $3;
my $build = $4;
my $pretyp = $5;
my $prenum = $6;
my $commit = $7;
if ( !$commit ) {
$commit = 0;
}
if ( !$prenum ) {
$prenum = 0;
}
my $tag_pattern = "([v]?[0-9]+[.][0-9]+[.][0-9]+(?:[.][0-9]+)?(?:(?:-[a-zA-Z]+[0-9]+)?))";
if ($verstring =~ $tag_pattern) {
} else {
die "Version string '$verstring' is malformed...\n";
}
my $tag = $1;
if ( !$build ) {
$build = $commit;
}
if ( $commit == 0 && $in_git ) {
$commit = `git rev-list $tag..$mergebase | wc -l`
}
if ( $commit == 0 ) {
# If we're at the tag, don't make the long
# version longer than necessary.
$verstring = $tag;
if ( !$pretyp ) {
$pretyp = "FINAL";
}
}
if ( $verstring ne $tag || !$pretyp ) {
$pretyp = "DEV";
} else {
if ( $pretyp =~ /^a$/ ) {
$pretyp = "ALPHA";
}
if ( $pretyp =~ /^b$/ ) {
$pretyp = "BETA";
}
if ( $pretyp =~ /^rc$/ ) {
$pretyp = "RC";
}
}
my $OS = `uname -s`;
my $OS_ver = `uname -r`;
my $machine = `uname -m`;
my $processor = `uname -p`;
chomp($OS);
chomp($OS_ver);
chomp($machine);
chomp($processor);
unlink("$outfile");
my $prefix = "CRAWL";
my $smprefix = "crawl";
open OUT, ">", "$outfile" or die $!;
print OUT <<__eof__;
#ifndef __included_${smprefix}_build_number_h
#define __included_${smprefix}_build_number_h
#define ${prefix}_VERSION_MAJOR ${major}
#define ${prefix}_VERSION_MINOR ${minor}
#define ${prefix}_VERSION_REVISION ${revis}
#define ${prefix}_VERSION_BUILD ${build}
#define ${prefix}_VERSION_PREREL_TYPE ${pretyp}
#define ${prefix}_VERSION_PREREL_NUM ${prenum}
#define ${prefix}_VERSION_TAG "${tag}"
#define ${prefix}_VERSION_LONG "${verstring}"
#define ${prefix}_RESOURCE_VERSION ${major},${minor},${revis},${build}
#define ${prefix}_RESOURCE_VERSION_STRING "${major}, ${minor}, ${revis}, ${build}"
#define ${prefix}_BUILD_OS "${OS}"
#define ${prefix}_BUILD_OS_VER "${OS_ver}"
#define ${prefix}_BUILD_MACHINE "${machine}"
#define ${prefix}_BUILD_PROCESSOR "${processor}"
#endif
__eof__
close OUT or die $!;