summaryrefslogtreecommitdiff
path: root/version.py
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gnome.org>2023-01-30 14:31:04 +0000
committerEmmanuele Bassi <ebassi@gnome.org>2023-02-02 08:37:28 +0100
commit2be68fb4e001608c3c0d19d9f98b831f109bbc5a (patch)
tree79411e30e87418ba8318b56682ac4ea86d68d544 /version.py
parent365bec1f7d5c3e645fda3ad901b2f20fe0149b00 (diff)
downloadcairo-2be68fb4e001608c3c0d19d9f98b831f109bbc5a.tar.gz
build: Turn version.py into idiomatic Python
While it's possible to write C code in Python, it's better to actually write Python code in Python. Use regular expressions, instead of counting characters, to allow a little bit more leeway when editing the cairo-version.h header file. Use a context manager to handle the lifetime of a file object. Use f-strings instead of the obsolete format() method.
Diffstat (limited to 'version.py')
-rwxr-xr-xversion.py60
1 files changed, 41 insertions, 19 deletions
diff --git a/version.py b/version.py
index 7e0ded0d7..aabc20593 100755
--- a/version.py
+++ b/version.py
@@ -5,27 +5,49 @@
# Extracts the version from cairo-version.h for the meson build files.
#
import os
+import re
import sys
-if __name__ == '__main__':
- srcroot = os.path.dirname(__file__)
- version_major = None
- version_minor = None
- version_micro = None
+MAJOR_RE = re.compile(
+ r'^\s*#\s*define\s+CAIRO_VERSION_MAJOR\s+(?P<number>[0-9]+)\s*$',
+ re.UNICODE)
- f = open(os.path.join(srcroot, 'src', 'cairo-version.h'), 'r', encoding='utf-8')
+MINOR_RE = re.compile(
+ r'^\s*#\s*define\s+CAIRO_VERSION_MINOR\s+(?P<number>[0-9]+)\s*$',
+ re.UNICODE)
+
+MICRO_RE = re.compile(
+ r'^\s*#\s*define\s+CAIRO_VERSION_MICRO\s+(?P<number>[0-9]+)\s*$',
+ re.UNICODE)
+
+version_major = None
+version_minor = None
+version_micro = None
+
+srcroot = os.path.dirname(__file__)
+version_h = os.path.join(srcroot, "src", "cairo-version.h")
+
+with open(version_h, "r", encoding="utf-8") as f:
for line in f:
- if line.startswith('#define CAIRO_VERSION_MAJOR '):
- version_major = line[28:].strip()
- if line.startswith('#define CAIRO_VERSION_MINOR '):
- version_minor = line[28:].strip()
- if line.startswith('#define CAIRO_VERSION_MICRO '):
- version_micro = line[28:].strip()
- f.close()
-
- if not (version_major and version_minor and version_micro):
- print('ERROR: Could not extract cairo version from cairo-version.h in', srcroot, file=sys.stderr)
- sys.exit(-1)
-
- print('{0}.{1}.{2}'.format(version_major, version_minor, version_micro))
+ res = MAJOR_RE.match(line)
+ if res:
+ assert version_major is None
+ version_major = res.group('number')
+ continue
+ res = MINOR_RE.match(line)
+ if res:
+ assert version_minor is None
+ version_minor = res.group('number')
+ continue
+ res = MICRO_RE.match(line)
+ if res:
+ assert version_micro is None
+ version_micro = res.group('number')
+ continue
+
+if not (version_major and version_minor and version_micro):
+ print(f"ERROR: Could not extract version from cairo-version.h in {srcroot}", file=sys.stderr) # noqa
+ sys.exit(-1)
+
+print(f"{version_major}.{version_minor}.{version_micro}")