diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2018-06-01 22:53:06 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-01 22:53:06 +0300 |
commit | bf2e21ec0edeaf8e86ff6fd46c2c2fcfcc4713ed (patch) | |
tree | 6601dfff032ff82eb414fc94c44bdd048142ce4b /mesonbuild/mesonlib.py | |
parent | 0a035dea6d0b1416fc76e323bbd7b0ab5a60a4af (diff) | |
parent | c5e85e59cc2b16edb094fa598fb1a096cd0db4d5 (diff) | |
download | meson-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.py | 70 |
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: |