From f6caac38117a99782513db0b62bfd29b921f873c Mon Sep 17 00:00:00 2001 From: dec05eba Date: Fri, 15 May 2020 22:53:08 +0200 Subject: Fix version =,< and <= not working. Also fix incorrect platform family handling --- include/Platform.hpp | 6 ++---- src/Platform.cpp | 4 ++-- src/VersionParser.cpp | 48 +++++++++++++++++++++++++++++++++--------------- 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_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::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(); -- cgit v1.2.3