summaryrefslogtreecommitdiffstats
path: root/Doc/tools/getversioninfo
diff options
context:
space:
mode:
Diffstat (limited to 'Doc/tools/getversioninfo')
-rwxr-xr-xDoc/tools/getversioninfo72
1 files changed, 72 insertions, 0 deletions
diff --git a/Doc/tools/getversioninfo b/Doc/tools/getversioninfo
new file mode 100755
index 0000000..9eb08d1
--- /dev/null
+++ b/Doc/tools/getversioninfo
@@ -0,0 +1,72 @@
+#! /usr/bin/env python
+
+import os
+import re
+import sys
+
+try:
+ __file__
+except NameError:
+ __file__ = sys.argv[0]
+
+tools = os.path.dirname(os.path.abspath(__file__))
+Doc = os.path.dirname(tools)
+src = os.path.dirname(Doc)
+patchlevel_h = os.path.join(src, "Include", "patchlevel.h")
+
+# This won't pick out all #defines, but it will pick up the ones we
+# care about.
+rx = re.compile(r"\s*#define\s+([a-zA-Z][a-zA-Z_0-9]*)\s+([a-zA-Z_0-9]+)")
+
+d = {}
+f = open(patchlevel_h)
+for line in f:
+ m = rx.match(line)
+ if m is not None:
+ name, value = m.group(1, 2)
+ d[name] = value
+f.close()
+
+release = "%s.%s" % (d["PY_MAJOR_VERSION"], d["PY_MINOR_VERSION"])
+micro = int(d["PY_MICRO_VERSION"])
+shortversion = release
+if micro != 0:
+ release += "." + str(micro)
+level = d["PY_RELEASE_LEVEL"]
+
+suffixes = {
+ "PY_RELEASE_LEVEL_ALPHA": "a",
+ "PY_RELEASE_LEVEL_BETA": "b",
+ "PY_RELEASE_LEVEL_GAMMA": "c",
+ }
+
+releaseinfo = ""
+if level != "PY_RELEASE_LEVEL_FINAL":
+ releaseinfo = suffixes[level] + str(int(d["PY_RELEASE_SERIAL"]))
+
+def write_file(name, text):
+ """Write text to a file if the file doesn't exist or if text
+ differs from any existing content."""
+ if os.path.exists(name):
+ f = open(name, "r")
+ s = f.read()
+ f.close()
+ if s == text:
+ return
+ f = open(name, "w")
+ f.write(text)
+ f.close()
+
+patchlevel_tex = os.path.join(Doc, "commontex", "patchlevel.tex")
+Makefile_version = os.path.join(Doc, "Makefile.version")
+
+write_file(patchlevel_tex,
+ "%% This file is generated by ../tools/getversioninfo;\n"
+ "%% do not edit manually.\n"
+ "\n"
+ "\\release{%s}\n"
+ "\\setreleaseinfo{%s}\n"
+ "\\setshortversion{%s}\n"
+ % (release, releaseinfo, shortversion))
+
+print release + releaseinfo