From ae19fec9528c0e3ff764eca271227c670284909a Mon Sep 17 00:00:00 2001 From: Salamandar Date: Thu, 26 Apr 2018 16:49:13 +0200 Subject: Add version_compare_condition_with_{min,max} for specific comparison utils. Split FeatureNew and FeatureDeprecated Implement features report to be printed in some 'dev mode' --- mesonbuild/mesonlib.py | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) (limited to 'mesonbuild/mesonlib.py') diff --git a/mesonbuild/mesonlib.py b/mesonbuild/mesonlib.py index fe426c5..a2f05bc 100644 --- a/mesonbuild/mesonlib.py +++ b/mesonbuild/mesonlib.py @@ -487,6 +487,74 @@ def version_compare_many(vstr1, conditions): found.append(req) return not_found == [], not_found, found + +def version_compare_condition_with_min(condition, minimum): + match = numpart.match(minimum.strip()) + if match is None: + msg = 'Uncomparable version string {!r}.' + raise MesonException(msg.format(minimum)) + minimum = match.group(0) + if condition.startswith('>='): + cmpop = operator.lt + condition = condition[2:] + elif condition.startswith('<='): + return True + condition = condition[2:] + elif condition.startswith('!='): + return True + condition = condition[2:] + elif condition.startswith('=='): + cmpop = operator.lt + condition = condition[2:] + elif condition.startswith('='): + cmpop = operator.lt + condition = condition[1:] + elif condition.startswith('>'): + cmpop = operator.lt + condition = condition[1:] + elif condition.startswith('<'): + return True + condition = condition[2:] + else: + cmpop = operator.eq + varr1 = grab_leading_numbers(minimum, True) + varr2 = grab_leading_numbers(condition, True) + return cmpop(varr1, varr2) + +def version_compare_condition_with_max(condition, maximum): + match = numpart.match(maximum.strip()) + if match is None: + msg = 'Uncomparable version string {!r}.' + raise MesonException(msg.format(maximum)) + maximum = match.group(0) + if condition.startswith('>='): + return False + condition = condition[2:] + elif condition.startswith('<='): + cmpop = operator.lt + condition = condition[2:] + elif condition.startswith('!='): + return False + condition = condition[2:] + elif condition.startswith('=='): + cmpop = operator.lt + condition = condition[2:] + elif condition.startswith('='): + cmpop = operator.lt + condition = condition[1:] + elif condition.startswith('>'): + return False + condition = condition[1:] + elif condition.startswith('<'): + cmpop = operator.lt + condition = condition[2:] + else: + cmpop = operator.eq + varr1 = grab_leading_numbers(maximum, True) + varr2 = grab_leading_numbers(condition, True) + return cmpop(varr1, varr2) + + def default_libdir(): if is_debianlike(): try: -- cgit v1.1