aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2016-05-29 02:59:24 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2016-05-29 02:59:24 +0300
commitb5013a573ae18ff009e498c778614712352f0b44 (patch)
tree80696468c1b9ea2b58d4c60a38fc44d559ba6e72
parent9dace5fc5e508e972389f41ef0fae6a96d29ec34 (diff)
downloadmeson-b5013a573ae18ff009e498c778614712352f0b44.zip
meson-b5013a573ae18ff009e498c778614712352f0b44.tar.gz
meson-b5013a573ae18ff009e498c778614712352f0b44.tar.bz2
Added semantic versioning comparison method to strings.
-rw-r--r--mesonbuild/interpreter.py7
-rw-r--r--test cases/common/42 string operations/meson.build (renamed from test cases/common/42 string formatting/meson.build)12
2 files changed, 19 insertions, 0 deletions
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index c785e88..aac021a 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -2159,6 +2159,13 @@ class Interpreter():
strlist = posargs[0]
check_stringlist(strlist)
return obj.join(strlist)
+ elif method_name == 'version_compare':
+ if len(posargs) != 1:
+ raise InterpreterException('Version_compare() takes exactly one argument.')
+ cmpr = posargs[0]
+ if not isinstance(cmpr, str):
+ raise InterpreterException('Version_compare() argument must be a string.')
+ return mesonlib.version_compare(obj, cmpr)
raise InterpreterException('Unknown method "%s" for a string.' % method_name)
def to_native(self, arg):
diff --git a/test cases/common/42 string formatting/meson.build b/test cases/common/42 string operations/meson.build
index 0d17448..5d7a73d 100644
--- a/test cases/common/42 string formatting/meson.build
+++ b/test cases/common/42 string operations/meson.build
@@ -55,3 +55,15 @@ assert('@0@'.format(true) == 'true', 'bool string formatting failed')
assert(' '.join(['a', 'b', 'c']) == 'a b c', 'join() array broken')
assert(''.join(['a', 'b', 'c']) == 'abc', 'empty join() broken')
assert(' '.join(['a']) == 'a', 'single join broken')
+
+version_number = '1.2.8'
+
+assert(version_number.version_compare('>=1.2.8'), 'Version_compare gt broken')
+assert(not version_number.version_compare('>1.2.8'), 'Version_compare greater broken')
+assert(not version_number.version_compare('<1.2.8'), 'Version_compare less broken')
+assert(version_number.version_compare('<=1.2.8'), 'Version_compare le broken')
+assert(version_number.version_compare('==1.2.8'), 'Version_compare eq broken')
+assert(not version_number.version_compare('!=1.2.8'), 'Version_compare neq broken')
+
+assert(version_number.version_compare('<2.0'), 'Version_compare major less broken')
+assert(version_number.version_compare('>0.9'), 'Version_compare major greater broken')