blob: d22c16ddc04562c3e5275b98d3ad3e585b5f877f [file] [log] [blame]
Fred Drakec8083cf2003-09-27 22:07:05 +00001#! /usr/bin/env python
2
3import os
4import re
5import sys
6
7try:
8 __file__
9except NameError:
10 __file__ = sys.argv[0]
11
12tools = os.path.dirname(os.path.abspath(__file__))
13Doc = os.path.dirname(tools)
14src = os.path.dirname(Doc)
15patchlevel_h = os.path.join(src, "Include", "patchlevel.h")
16
17# This won't pick out all #defines, but it will pick up the ones we
18# care about.
19rx = re.compile(r"\s*#define\s+([a-zA-Z][a-zA-Z_0-9]*)\s+([a-zA-Z_0-9]+)")
20
21d = {}
22f = open(patchlevel_h)
23for line in f:
24 m = rx.match(line)
25 if m is not None:
26 name, value = m.group(1, 2)
27 d[name] = value
28f.close()
29
30release = "%s.%s" % (d["PY_MAJOR_VERSION"], d["PY_MINOR_VERSION"])
31micro = int(d["PY_MICRO_VERSION"])
32shortversion = release
33if micro != 0:
34 release += "." + str(micro)
35level = d["PY_RELEASE_LEVEL"]
36
37suffixes = {
38 "PY_RELEASE_LEVEL_ALPHA": "a",
39 "PY_RELEASE_LEVEL_BETA": "b",
40 "PY_RELEASE_LEVEL_GAMMA": "c",
41 }
42
43releaseinfo = ""
44if level != "PY_RELEASE_LEVEL_FINAL":
45 releaseinfo = suffixes[level] + str(int(d["PY_RELEASE_SERIAL"]))
46
47def write_file(name, text):
48 """Write text to a file if the file doesn't exist or if text
49 differs from any existing content."""
50 if os.path.exists(name):
51 f = open(name, "r")
52 s = f.read()
53 f.close()
54 if s == text:
55 return
56 f = open(name, "w")
57 f.write(text)
58 f.close()
59
60patchlevel_tex = os.path.join(Doc, "commontex", "patchlevel.tex")
Fred Drakec8083cf2003-09-27 22:07:05 +000061
62write_file(patchlevel_tex,
63 "%% This file is generated by ../tools/getversioninfo;\n"
64 "%% do not edit manually.\n"
65 "\n"
66 "\\release{%s}\n"
67 "\\setreleaseinfo{%s}\n"
68 "\\setshortversion{%s}\n"
69 % (release, releaseinfo, shortversion))
70
71print release + releaseinfo