aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/mesonlib.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2018-06-01 22:53:06 +0300
committerGitHub <noreply@github.com>2018-06-01 22:53:06 +0300
commitbf2e21ec0edeaf8e86ff6fd46c2c2fcfcc4713ed (patch)
tree6601dfff032ff82eb414fc94c44bdd048142ce4b /mesonbuild/mesonlib.py
parent0a035dea6d0b1416fc76e323bbd7b0ab5a60a4af (diff)
parentc5e85e59cc2b16edb094fa598fb1a096cd0db4d5 (diff)
downloadmeson-bf2e21ec0edeaf8e86ff6fd46c2c2fcfcc4713ed.zip
meson-bf2e21ec0edeaf8e86ff6fd46c2c2fcfcc4713ed.tar.gz
meson-bf2e21ec0edeaf8e86ff6fd46c2c2fcfcc4713ed.tar.bz2
Merge pull request #3486 from Salamandar/salamandar/meson_version_introspection
Add FeatureNew and FeatureDeprecated, to alert the user of bad meson_version
Diffstat (limited to 'mesonbuild/mesonlib.py')
-rw-r--r--mesonbuild/mesonlib.py70
1 files changed, 70 insertions, 0 deletions
diff --git a/mesonbuild/mesonlib.py b/mesonbuild/mesonlib.py
index 5305ecb..eaa5359 100644
--- a/mesonbuild/mesonlib.py
+++ b/mesonbuild/mesonlib.py
@@ -23,6 +23,8 @@ from mesonbuild import mlog
have_fcntl = False
have_msvcrt = False
+# Used to report conflicts between meson_version and new features used
+target_version = ''
try:
import fcntl
@@ -441,6 +443,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: