aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2020-05-15 22:53:08 +0200
committerdec05eba <dec05eba@protonmail.com>2020-07-06 07:39:58 +0200
commitf6caac38117a99782513db0b62bfd29b921f873c (patch)
treecc1bbc54339a3044898b1618a69d425e1b178dcb
parentd0aad1c2cf1c734c650d277d4ad61b3e593a9d01 (diff)
Fix version =,< and <= not working. Also fix incorrect platform family handling
-rw-r--r--include/Platform.hpp6
-rw-r--r--src/Platform.cpp4
-rw-r--r--src/VersionParser.cpp48
3 files changed, 37 insertions, 21 deletions
diff --git a/include/Platform.hpp b/include/Platform.hpp
index 2c9feb5..a7e343b 100644
--- a/include/Platform.hpp
+++ b/include/Platform.hpp
@@ -42,9 +42,8 @@ namespace sibs
PLATFORM_LINUX_ARM32 = 1ULL << 28ULL | PLATFORM_LINUX32,
PLATFORM_LINUX_ARM64 = 1ULL << 29ULL | PLATFORM_LINUX64,
- PLATFORM_LINUX_X86 = 1ULL << 30ULL | PLATFORM_LINUX,
- PLATFORM_LINUX_X86_32 = 1ULL << 31ULL | PLATFORM_LINUX32,
- PLATFORM_LINUX_X86_64 = 1ULL << 32ULL | PLATFORM_LINUX64
+ PLATFORM_LINUX_X86 = 1ULL << 30ULL | PLATFORM_LINUX32,
+ PLATFORM_LINUX_X86_64 = 1ULL << 31ULL | PLATFORM_LINUX64
};
const StringViewMap<Platform> PLATFORM_BY_NAME = {
@@ -72,7 +71,6 @@ namespace sibs
{ "linux_arm32", PLATFORM_LINUX_ARM32 },
{ "linux_arm64", PLATFORM_LINUX_ARM64 },
{ "linux_x86", PLATFORM_LINUX_X86 },
- { "linux_x86_32", PLATFORM_LINUX_X86_32 },
{ "linux_x86_64", PLATFORM_LINUX_X86_64 }
};
diff --git a/src/Platform.cpp b/src/Platform.cpp
index f92e1ea..55c2188 100644
--- a/src/Platform.cpp
+++ b/src/Platform.cpp
@@ -94,12 +94,12 @@ namespace sibs
bool isSamePlatformFamily(Platform a, Platform b)
{
- return a & b;
+ return (a & b) == a;
}
bool isBaseForPlatform(Platform base, Platform platform)
{
- return base == PLATFORM_ANY || base == platform || (isSamePlatformFamily(platform, base) && countSetBits(base) < countSetBits(platform));
+ return base == PLATFORM_ANY || base == platform || isSamePlatformFamily(base, platform);
}
Platform getPlatformGenericType(Platform platform)
diff --git a/src/VersionParser.cpp b/src/VersionParser.cpp
index eccd109..2b7936a 100644
--- a/src/VersionParser.cpp
+++ b/src/VersionParser.cpp
@@ -196,8 +196,16 @@ namespace sibs
if(token == VersionToken::END_OF_FILE)
{
- if(!versionRange.startDefined)
+ if(!versionRange.startDefined && !versionRange.endDefined)
return Result<PackageVersionRange>::Err("version can't be empty");
+
+ if(!versionRange.startDefined) {
+ versionRange.start.major = 0;
+ versionRange.start.minor = 0;
+ versionRange.start.patch = 0;
+ versionRange.startDefined = true;
+ versionRange.startOperation = VersionOperation::GREATER_EQUAL;
+ }
if(versionRange.startOperation == VersionOperation::NONE)
{
@@ -264,40 +272,50 @@ namespace sibs
}
else if(token == VersionToken::OPERATION)
{
- versionRange.startOperation = tokenizer.operation;
+ VersionOperation operation = tokenizer.operation;
token = tokenizer.next();
if(token == VersionToken::VERSION_NUMBER)
{
- versionRange.start = tokenizer.version;
- versionRange.startDefined = true;
- switch(versionRange.startOperation)
+ token = tokenizer.next();
+ switch(operation)
{
case VersionOperation::LESS:
{
- token = VersionToken::INVALID;
- tokenizer.errMsg = "Unexpected version end when start version is expected to less than ";
- tokenizer.errMsg += versionRange.start.toString();
+ versionRange.end = tokenizer.version;
+ versionRange.endDefined = true;
+ versionRange.endOperation = operation;
return token;
}
case VersionOperation::LESS_EQUAL:
{
- token = VersionToken::INVALID;
- tokenizer.errMsg = "Unexpected version end when start version is expected to be less or equal to ";
- tokenizer.errMsg += versionRange.start.toString();
+ versionRange.end = tokenizer.version;
+ versionRange.endDefined = true;
+ versionRange.endOperation = operation;
return token;
}
case VersionOperation::EQUAL:
{
- token = VersionToken::INVALID;
- tokenizer.errMsg = "Unexpected version end when start version is expected to be exactly ";
- tokenizer.errMsg += versionRange.start.toString();
+ versionRange.start = tokenizer.version;
+ versionRange.startDefined = true;
+ versionRange.startOperation = operation;
return token;
}
+ case VersionOperation::GREATER:
+ {
+ versionRange.start = tokenizer.version;
+ versionRange.startDefined = true;
+ versionRange.startOperation = operation;
+ }
+ case VersionOperation::GREATER_EQUAL:
+ {
+ versionRange.start = tokenizer.version;
+ versionRange.startDefined = true;
+ versionRange.startOperation = operation;
+ }
default:
break;
}
- token = tokenizer.next();
if(token == VersionToken::AND)
{
return parseEnd();