summaryrefslogtreecommitdiffstats
path: root/gfx/cairo/cairo/version.py
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/cairo/cairo/version.py')
-rw-r--r--gfx/cairo/cairo/version.py53
1 files changed, 53 insertions, 0 deletions
diff --git a/gfx/cairo/cairo/version.py b/gfx/cairo/cairo/version.py
new file mode 100644
index 0000000000..aabc20593b
--- /dev/null
+++ b/gfx/cairo/cairo/version.py
@@ -0,0 +1,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}")