summaryrefslogtreecommitdiff
path: root/version.py
diff options
context:
space:
mode:
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}")