diff options
author | Emmanuele Bassi <ebassi@gnome.org> | 2023-01-30 14:31:04 +0000 |
---|---|---|
committer | Emmanuele Bassi <ebassi@gnome.org> | 2023-02-02 08:37:28 +0100 |
commit | 2be68fb4e001608c3c0d19d9f98b831f109bbc5a (patch) | |
tree | 79411e30e87418ba8318b56682ac4ea86d68d544 /version.py | |
parent | 365bec1f7d5c3e645fda3ad901b2f20fe0149b00 (diff) | |
download | cairo-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-x | version.py | 60 |
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}") |