tools/buildbot/Versioning
author David Anderson <dvander@alliedmods.net>
Thu Aug 08 22:02:42 2013 -0700 (2013-08-08)
changeset 3980 dc7dfcd855dc
parent 3630 b72450a8be42
child 4187 e70b65bc70b9
permissions -rw-r--r--
More Windows build fix.
dvander@2784
     1
# vim: set ts=2 sw=2 tw=99 noet ft=python: 
dvander@2784
     2
import os
dvander@2784
     3
import re
dvander@2784
     4
import subprocess
dvander@2784
     5
from ambuild.cache import Cache
dvander@2784
     6
import ambuild.command as command
dvander@2784
     7
dvander@2784
     8
#Quickly try to ascertain the current repository revision
dvander@2784
     9
def GetVersion():
dvander@2784
    10
	args = ['hg', 'parent', '-R', AMBuild.sourceFolder]
dvander@2784
    11
	p = command.RunDirectCommand(AMBuild, args)
dvander@2784
    12
	m = re.match('changeset:\s+(\d+):(.+)', p.stdoutText)
dvander@2784
    13
	if m == None:
dvander@2784
    14
		raise Exception('Could not determine repository version')
dvander@2784
    15
	return m.groups()
dvander@2784
    16
dvander@2784
    17
def PerformReversioning():
dvander@2784
    18
	rev, cset = GetVersion()
dvander@2784
    19
	cacheFile = os.path.join(AMBuild.outputFolder, '.ambuild', 'hgcache')
dvander@2784
    20
	cache = Cache(cacheFile)
dvander@2784
    21
	if os.path.isfile(cacheFile):
dvander@2784
    22
		cache.LoadCache()
dvander@2784
    23
		if cache.HasVariable('cset') and cache['cset'] == cset:
dvander@2784
    24
			return False
dvander@2784
    25
	cache.CacheVariable('cset', cset)
dvander@2784
    26
dvander@2784
    27
	productFile = open(os.path.join(AMBuild.sourceFolder, 'product.version'), 'r')
dvander@2784
    28
	productContents = productFile.read()
dvander@2784
    29
	productFile.close()
asherkin@3630
    30
	m = re.match('(\d+)\.(\d+)\.(\d+)-?(.*)', productContents)
dvander@2784
    31
	if m == None:
dvander@2784
    32
		raise Exception('Could not detremine product version')
dvander@2784
    33
	major, minor, release, tag = m.groups()
asherkin@3630
    34
	
asherkin@3630
    35
	fullstring = "{0}.{1}.{2}".format(major, minor, release)
asherkin@3630
    36
	if tag != "":
asherkin@3630
    37
		fullstring += "-{0}".format(tag)
asherkin@3630
    38
		if tag == "dev":
asherkin@3630
    39
			fullstring += "+{0}".format(rev)
asherkin@3630
    40
	
dvander@2784
    41
	incFolder = os.path.join(AMBuild.outputFolder, 'includes')
dvander@2784
    42
	if not os.path.isdir(incFolder):
dvander@2784
    43
		os.makedirs(incFolder)
dvander@2784
    44
	incFile = open(os.path.join(incFolder, 'sourcemod_version_auto.h'), 'w')
dvander@2784
    45
	incFile.write("""
dvander@2784
    46
#ifndef _SOURCEMOD_AUTO_VERSION_INFORMATION_H_
dvander@2784
    47
#define _SOURCEMOD_AUTO_VERSION_INFORMATION_H_
dvander@2784
    48
asherkin@3630
    49
#define SM_BUILD_TAG		\"{0}\"
asherkin@3630
    50
#define SM_BUILD_REV		\"{1}\"
asherkin@3630
    51
#define SM_BUILD_CSET		\"{2}\"
asherkin@3630
    52
#define SM_BUILD_MAJOR		\"{3}\"
asherkin@3630
    53
#define SM_BUILD_MINOR		\"{4}\"
asherkin@3630
    54
#define SM_BUILD_RELEASE	\"{5}\"
asherkin@3630
    55
asherkin@3630
    56
#define SM_BUILD_UNIQUEID SM_BUILD_REV \":\" SM_BUILD_CSET
asherkin@3630
    57
asherkin@3630
    58
#define SM_VERSION_STRING	\"{6}\"
asherkin@3630
    59
#define SM_VERSION_FILE		{7},{8},{9},0
dvander@2784
    60
dvander@2784
    61
#endif /* _SOURCEMOD_AUTO_VERSION_INFORMATION_H_ */
dvander@2784
    62
asherkin@3630
    63
""".format(tag, rev, cset, major, minor, release, fullstring, major, minor, release))
asherkin@3630
    64
	incFile.close()
asherkin@3630
    65
	
asherkin@3630
    66
	incFile = open(os.path.join(incFolder, 'version_auto.inc'), 'w')
asherkin@3630
    67
	incFile.write("""
asherkin@3630
    68
#if defined _auto_version_included
asherkin@3630
    69
 #endinput
asherkin@3630
    70
#endif
asherkin@3630
    71
#define _auto_version_included
asherkin@3630
    72
asherkin@3630
    73
#define SOURCEMOD_V_TAG		\"{0}\"
asherkin@3630
    74
#define SOURCEMOD_V_REV		{1}
asherkin@3630
    75
#define SOURCEMOD_V_CSET	\"{2}\"
asherkin@3630
    76
#define SOURCEMOD_V_MAJOR	{3}
asherkin@3630
    77
#define SOURCEMOD_V_MINOR	{4}
asherkin@3630
    78
#define SOURCEMOD_V_RELEASE	{5}
asherkin@3630
    79
asherkin@3630
    80
#define SOURCEMOD_VERSION	\"{6}\"
asherkin@3630
    81
asherkin@3630
    82
""".format(tag, rev, cset, major, minor, release, fullstring))
dvander@2784
    83
	incFile.close()
dvander@2784
    84
dvander@2784
    85
	cache.WriteCache()
dvander@2784
    86
dvander@2784
    87
PerformReversioning()
dvander@2784
    88
dvander@2784
    89