|
dvander@4187
|
1 |
# vim: set ts=8 sts=2 sw=2 tw=99 et: |
|
dvander@4187
|
2 |
import re |
|
dvander@4187
|
3 |
import os, sys |
|
dvander@4187
|
4 |
import subprocess |
|
dvander@4187
|
5 |
|
|
dvander@4187
|
6 |
argv = sys.argv[1:] |
|
dvander@4187
|
7 |
if len(argv) < 2: |
|
dvander@4187
|
8 |
sys.stderr.write('Usage: generate_headers.py <source_path> <output_folder>\n') |
|
dvander@4187
|
9 |
sys.exit(1) |
|
dvander@4187
|
10 |
|
|
dvander@4187
|
11 |
SourceFolder = os.path.abspath(os.path.normpath(argv[0])) |
|
dvander@4187
|
12 |
OutputFolder = os.path.normpath(argv[1]) |
|
dvander@4187
|
13 |
|
|
dvander@4187
|
14 |
def get_hg_version(): |
|
dvander@4187
|
15 |
argv = ['hg', 'parent', '-R', SourceFolder] |
|
dvander@4187
|
16 |
|
|
dvander@4187
|
17 |
# Python 2.6 doesn't have check_output. |
|
dvander@4187
|
18 |
if hasattr(subprocess, 'check_output'): |
|
dvander@4187
|
19 |
text = subprocess.check_output(argv) |
|
dvander@4187
|
20 |
if str != bytes: |
|
dvander@4187
|
21 |
text = str(text, 'utf-8') |
|
dvander@4187
|
22 |
else: |
|
dvander@4187
|
23 |
p = subprocess.Popen(argv, stdout=subprocess.PIPE, stderr=subprocess.PIPE) |
|
dvander@4187
|
24 |
output, ignored = p.communicate() |
|
dvander@4187
|
25 |
rval = p.poll() |
|
dvander@4187
|
26 |
if rval: |
|
dvander@4187
|
27 |
raise subprocess.CalledProcessError(rval, argv) |
|
dvander@4187
|
28 |
text = output.decode('utf8') |
|
dvander@4187
|
29 |
|
|
dvander@4187
|
30 |
m = re.match('changeset:\s+(\d+):(.+)', text) |
|
dvander@4187
|
31 |
if m == None: |
|
dvander@4187
|
32 |
raise Exception('Could not determine repository version') |
|
dvander@4187
|
33 |
return m.groups() |
|
dvander@4187
|
34 |
|
|
dvander@4187
|
35 |
def output_version_headers(): |
|
dvander@4191
|
36 |
rev, cset = get_hg_version() |
|
dvander@4187
|
37 |
|
|
dvander@4187
|
38 |
with open(os.path.join(SourceFolder, 'product.version')) as fp: |
|
dvander@4187
|
39 |
contents = fp.read() |
|
dvander@4187
|
40 |
m = re.match('(\d+)\.(\d+)\.(\d+)-?(.*)', contents) |
|
dvander@4187
|
41 |
if m == None: |
|
dvander@4187
|
42 |
raise Exception('Could not detremine product version') |
|
dvander@4187
|
43 |
major, minor, release, tag = m.groups() |
|
dvander@4187
|
44 |
fullstring = "{0}.{1}.{2}".format(major, minor, release) |
|
dvander@4187
|
45 |
if tag != "": |
|
dvander@4187
|
46 |
fullstring += "-{0}".format(tag) |
|
dvander@4187
|
47 |
if tag == "dev": |
|
dvander@4187
|
48 |
fullstring += "+{0}".format(rev) |
|
dvander@4187
|
49 |
|
|
dvander@4187
|
50 |
with open(os.path.join(OutputFolder, 'sourcemod_version_auto.h'), 'w') as fp: |
|
dvander@4187
|
51 |
fp.write(""" |
|
dvander@4187
|
52 |
#ifndef _SOURCEMOD_AUTO_VERSION_INFORMATION_H_ |
|
dvander@4187
|
53 |
#define _SOURCEMOD_AUTO_VERSION_INFORMATION_H_ |
|
dvander@4187
|
54 |
|
|
dvander@4187
|
55 |
#define SM_BUILD_TAG \"{0}\" |
|
dvander@4187
|
56 |
#define SM_BUILD_REV \"{1}\" |
|
dvander@4187
|
57 |
#define SM_BUILD_CSET \"{2}\" |
|
dvander@4187
|
58 |
#define SM_BUILD_MAJOR \"{3}\" |
|
dvander@4187
|
59 |
#define SM_BUILD_MINOR \"{4}\" |
|
dvander@4187
|
60 |
#define SM_BUILD_RELEASE \"{5}\" |
|
dvander@4187
|
61 |
|
|
dvander@4187
|
62 |
#define SM_BUILD_UNIQUEID SM_BUILD_REV \":\" SM_BUILD_CSET |
|
dvander@4187
|
63 |
|
|
dvander@4187
|
64 |
#define SM_VERSION_STRING \"{6}\" |
|
dvander@4187
|
65 |
#define SM_VERSION_FILE {7},{8},{9},0 |
|
dvander@4187
|
66 |
|
|
dvander@4187
|
67 |
#endif /* _SOURCEMOD_AUTO_VERSION_INFORMATION_H_ */ |
|
dvander@4187
|
68 |
""".format(tag, rev, cset, major, minor, release, fullstring, major, minor, release)) |
|
dvander@4187
|
69 |
|
|
dvander@4187
|
70 |
with open(os.path.join(OutputFolder, 'version_auto.inc'), 'w') as fp: |
|
dvander@4187
|
71 |
fp.write(""" |
|
dvander@4187
|
72 |
#if defined _auto_version_included |
|
dvander@4187
|
73 |
#endinput |
|
dvander@4187
|
74 |
#endif |
|
dvander@4187
|
75 |
#define _auto_version_included |
|
dvander@4187
|
76 |
|
|
dvander@4187
|
77 |
#define SOURCEMOD_V_TAG \"{0}\" |
|
dvander@4187
|
78 |
#define SOURCEMOD_V_REV {1} |
|
dvander@4187
|
79 |
#define SOURCEMOD_V_CSET \"{2}\" |
|
dvander@4187
|
80 |
#define SOURCEMOD_V_MAJOR {3} |
|
dvander@4187
|
81 |
#define SOURCEMOD_V_MINOR {4} |
|
dvander@4187
|
82 |
#define SOURCEMOD_V_RELEASE {5} |
|
dvander@4187
|
83 |
|
|
dvander@4187
|
84 |
#define SOURCEMOD_VERSION \"{6}\" |
|
dvander@4187
|
85 |
""".format(tag, rev, cset, major, minor, release, fullstring)) |
|
dvander@4187
|
86 |
|
|
dvander@4187
|
87 |
output_version_headers() |