summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/util
diff options
context:
space:
mode:
authorSteven Noonan <steven@uplinklabs.net>2009-10-18 06:12:34 -0700
committerSteven Noonan <steven@uplinklabs.net>2009-10-18 07:59:49 -0700
commit75990d7777bd3061f815ad0ff8597f885b2dce99 (patch)
treea9857d448dd0cb9b62ce252c746808778dffa8bc /crawl-ref/source/util
parent8420352d20a25c155bc1f00c022f72aee2eadf44 (diff)
downloadcrawl-ref-75990d7777bd3061f815ad0ff8597f885b2dce99.tar.gz
crawl-ref-75990d7777bd3061f815ad0ff8597f885b2dce99.zip
gen_ver.pl: add build.h generator script
This works best with 'git describe', but if it can't use that (i.e. in an official release tree, outside of git), it will use release_ver in the util directory. Signed-off-by: Steven Noonan <steven@uplinklabs.net>
Diffstat (limited to 'crawl-ref/source/util')
-rwxr-xr-xcrawl-ref/source/util/gen_ver.pl163
-rw-r--r--crawl-ref/source/util/release_ver1
2 files changed, 164 insertions, 0 deletions
diff --git a/crawl-ref/source/util/gen_ver.pl b/crawl-ref/source/util/gen_ver.pl
new file mode 100755
index 0000000000..b6ace87a15
--- /dev/null
+++ b/crawl-ref/source/util/gen_ver.pl
@@ -0,0 +1,163 @@
+#!/usr/bin/perl
+
+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 $releasever;
+
+open IN, "<", "$scriptpath/release_ver";
+read IN, $releasever, 32;
+close IN;
+
+mkdir dirname($outfile);
+
+my $verstring = "";
+
+$verstring = `git describe --tags --long 2> /dev/null || git describe --tags 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;
+
+# Git didn't give us a --long format?
+if ( !$commit ) {
+ $commit = 0;
+}
+
+# Final releases don't have a prenum.
+if ( !$prenum ) {
+ $prenum = 0;
+}
+
+# This gets us just the tag:
+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;
+
+# We assume here that we must be using a different
+# version number convention.
+if ( !$build ) {
+ $build = $commit;
+}
+
+# Old versions of git omit the commits-since-tag number,
+# so we can try 'git rev-list' to get this instead.
+if ( $commit == 0 && $in_git ) {
+ $commit = `git rev-list $tag.. | 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";
+ }
+}
+
+unlink("$outfile.tmp");
+
+my $prefix = "CRAWL";
+my $smprefix = "crawl";
+
+open OUT, ">", "$outfile.tmp" 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}"
+
+#endif
+
+__eof__
+close OUT or die $!;
+
+use Digest::MD5;
+
+my $ctx = Digest::MD5->new;
+
+my $md5old = ""; my $md5new = "";
+
+if (-e $outfile) {
+ open OUT, "$outfile" or die $!;
+ $ctx->addfile(*OUT);
+ $md5old = $ctx->hexdigest;
+ close OUT
+}
+
+open OUT, "$outfile.tmp" or die $!;
+$ctx->addfile(*OUT);
+$md5new = $ctx->hexdigest;
+close OUT;
+
+use File::Copy;
+
+if ($md5old ne $md5new) {
+ if (-e $outfile) {
+ unlink($outfile) or die $!;
+ }
+ move "$outfile.tmp", $outfile or die $!;
+} else {
+ unlink ("$outfile.tmp");
+}
diff --git a/crawl-ref/source/util/release_ver b/crawl-ref/source/util/release_ver
new file mode 100644
index 0000000000..aa64bcec46
--- /dev/null
+++ b/crawl-ref/source/util/release_ver
@@ -0,0 +1 @@
+0.6.0-a0