summaryrefslogtreecommitdiff
path: root/version.py
blob: aabc20593b41fec57656a3fdc1b5e2190563cc8c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/usr/bin/env python3
#
# cairo version.py
#
# Extracts the version from cairo-version.h for the meson build files.
#
import os
import re
import sys


MAJOR_RE = re.compile(
    r'^\s*#\s*define\s+CAIRO_VERSION_MAJOR\s+(?P<number>[0-9]+)\s*$',
    re.UNICODE)

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:
        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}")