forked from qt-creator/qt-creator
qmake: Add test functions for comparing version numbers
qmake really lacks version comparing functions: users either use ugly constructions to compare versions by components, such as greaterThan(QT_CLANG_MAJOR_VERSION, 3)|greaterThan(QT_CLANG_MINOR_VERSION, 4): or even incorrectly compare versions as strings: !lessThan(apple_clang_ver, "5.1")|!lessThan(reg_clang_ver, "3.4"): Add test functions versionAtLeast and versionAtMost which use QVersionNumber to compare version numbers by components. Task-number: QTBUG-62984 Change-Id: I65e6b3c296d0301d544b7e38bf3d44f8d555c7fc Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io> (cherry picked from qtbase/8a3e8856e5606ec616d4420ff8c4f77969432390)
This commit is contained in:
committed by
Eike Ziller
parent
82e0eefc8d
commit
b884f6fdbc
@@ -46,6 +46,7 @@
|
||||
#ifdef PROEVALUATOR_THREAD_SAFE
|
||||
# include <qthreadpool.h>
|
||||
#endif
|
||||
#include <qversionnumber.h>
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
@@ -93,6 +94,7 @@ enum ExpandFunc {
|
||||
|
||||
enum TestFunc {
|
||||
T_INVALID = 0, T_REQUIRES, T_GREATERTHAN, T_LESSTHAN, T_EQUALS,
|
||||
T_VERSION_AT_LEAST, T_VERSION_AT_MOST,
|
||||
T_EXISTS, T_EXPORT, T_CLEAR, T_UNSET, T_EVAL, T_CONFIG, T_SYSTEM,
|
||||
T_DEFINED, T_DISCARD_FROM, T_CONTAINS, T_INFILE,
|
||||
T_COUNT, T_ISEMPTY, T_PARSE_JSON, T_INCLUDE, T_LOAD, T_DEBUG, T_LOG, T_MESSAGE, T_WARNING, T_ERROR, T_IF,
|
||||
@@ -166,6 +168,8 @@ void QMakeEvaluator::initFunctionStatics()
|
||||
{"lessThan", T_LESSTHAN},
|
||||
{"equals", T_EQUALS},
|
||||
{"isEqual", T_EQUALS},
|
||||
{"versionAtLeast", T_VERSION_AT_LEAST},
|
||||
{"versionAtMost", T_VERSION_AT_MOST},
|
||||
{"exists", T_EXISTS},
|
||||
{"export", T_EXPORT},
|
||||
{"clear", T_CLEAR},
|
||||
@@ -1492,6 +1496,19 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
|
||||
}
|
||||
return returnBool(values(map(args.at(0))).join(statics.field_sep)
|
||||
== args.at(1).toQString(m_tmp1));
|
||||
case T_VERSION_AT_LEAST:
|
||||
case T_VERSION_AT_MOST: {
|
||||
if (args.count() != 2) {
|
||||
evalError(fL1S("%1(variable, versionNumber) requires two arguments.")
|
||||
.arg(function.toQString(m_tmp1)));
|
||||
return ReturnFalse;
|
||||
}
|
||||
const QVersionNumber lvn = QVersionNumber::fromString(values(args.at(0).toKey()).join('.'));
|
||||
const QVersionNumber rvn = QVersionNumber::fromString(args.at(1).toQString());
|
||||
if (func_t == T_VERSION_AT_LEAST)
|
||||
return returnBool(lvn >= rvn);
|
||||
return returnBool(lvn <= rvn);
|
||||
}
|
||||
case T_CLEAR: {
|
||||
if (args.count() != 1) {
|
||||
evalError(fL1S("%1(variable) requires one argument.")
|
||||
|
Reference in New Issue
Block a user