summaryrefslogtreecommitdiff
path: root/freetype/builds/meson/extract_libtool_version.py
diff options
context:
space:
mode:
Diffstat (limited to 'freetype/builds/meson/extract_libtool_version.py')
-rw-r--r--freetype/builds/meson/extract_libtool_version.py105
1 files changed, 105 insertions, 0 deletions
diff --git a/freetype/builds/meson/extract_libtool_version.py b/freetype/builds/meson/extract_libtool_version.py
new file mode 100644
index 000000000..0569481b3
--- /dev/null
+++ b/freetype/builds/meson/extract_libtool_version.py
@@ -0,0 +1,105 @@
+#!/usr/bin/env python
+"""Extract the libtool version from `configure.raw`.
+
+This script parses the `configure.raw` file to extract the libtool version
+number. By default, the full dotted version number is printed, but
+`--major`, `--minor` or `--patch` can be used to only print one of these
+values instead.
+"""
+
+from __future__ import print_function
+
+import argparse
+import os
+import re
+import sys
+
+# Expected input:
+#
+# ...
+# version_info='23:2:17'
+# ...
+
+RE_VERSION_INFO = re.compile(r"^version_info='(\d+):(\d+):(\d+)'")
+
+
+def parse_configure_raw(header):
+ major = None
+ minor = None
+ patch = None
+
+ for line in header.splitlines():
+ line = line.rstrip()
+ m = RE_VERSION_INFO.match(line)
+ if m:
+ assert major == None, "version_info appears more than once!"
+ major = m.group(1)
+ minor = m.group(2)
+ patch = m.group(3)
+ continue
+
+ assert (
+ major and minor and patch
+ ), "This input file is missing a version_info definition!"
+
+ return (major, minor, patch)
+
+
+def main():
+ parser = argparse.ArgumentParser(description=__doc__)
+
+ group = parser.add_mutually_exclusive_group()
+ group.add_argument(
+ "--major",
+ action="store_true",
+ help="Only print the major version number.",
+ )
+ group.add_argument(
+ "--minor",
+ action="store_true",
+ help="Only print the minor version number.",
+ )
+ group.add_argument(
+ "--patch",
+ action="store_true",
+ help="Only print the patch version number.",
+ )
+ group.add_argument(
+ "--soversion",
+ action="store_true",
+ help="Only print the libtool library suffix.",
+ )
+
+ parser.add_argument(
+ "input",
+ metavar="CONFIGURE_RAW",
+ help="The input configure.raw file to parse.",
+ )
+
+ args = parser.parse_args()
+ with open(args.input) as f:
+ raw_file = f.read()
+
+ version = parse_configure_raw(raw_file)
+
+ if args.major:
+ print(version[0])
+ elif args.minor:
+ print(version[1])
+ elif args.patch:
+ print(version[2])
+ elif args.soversion:
+ # Convert libtool version_info to the library suffix.
+ # (current,revision, age) -> (current - age, age, revision)
+ print(
+ "%d.%s.%s"
+ % (int(version[0]) - int(version[2]), version[2], version[1])
+ )
+ else:
+ print("%s.%s.%s" % version)
+
+ return 0
+
+
+if __name__ == "__main__":
+ sys.exit(main())