Allow parsing sub-variants of mingw-w64 packages

This might be useful for providing additional targets in the future. The
exact names of those sub-variants are still subject to change.
This commit is contained in:
Martchus 2024-02-18 15:54:58 +01:00
parent 56ee1325f0
commit cc05267338
2 changed files with 8 additions and 3 deletions

View File

@ -1041,8 +1041,9 @@ bool PackageNameData::isVcsPackage() const
PackageNameData PackageNameData::decompose(std::string_view packageName)
{
static constexpr auto targetPrefixBrackets = 2;
static const auto packageNameRegex
= std::regex("((lib32|mingw-w64|android-aarch64|android-x86-64|android-x86|android-armv7a-eabi|arm-none-eabi|aarch64-linux-"
= std::regex("((lib32|mingw-w64(-(ucrt|clang-x86_64|clang-aarch64))?|android-aarch64|android-x86-64|android-x86|android-armv7a-eabi|arm-none-eabi|aarch64-linux-"
"gnu|static-compat|riscv64-linux|avr|psp)-)?(.*?)((-(cvs|svn|hg|darcs|bzr|git|custom|compat|static|qt\\d+|doc|cli|gui))*)");
auto data = PackageNameData{};
auto match = std::cmatch{};
@ -1054,8 +1055,8 @@ PackageNameData PackageNameData::decompose(std::string_view packageName)
regexMatch.first + offset, static_cast<std::size_t>(regexMatch.length() - static_cast<std::cmatch::difference_type>(offset)));
};
data.targetPrefix = matchToStringView(match[2]);
data.actualName = matchToStringView(match[3]);
data.vcsSuffix = match[4].length() ? matchToStringView(match[4], 1) : std::string_view{};
data.actualName = matchToStringView(match[3 + targetPrefixBrackets]);
data.vcsSuffix = match[4 + targetPrefixBrackets].length() ? matchToStringView(match[4 + targetPrefixBrackets], 1) : std::string_view{};
return data;
}

View File

@ -128,6 +128,10 @@ void ParserTests::testParsingPackageName()
CPPUNIT_ASSERT_EQUAL("gcc"sv, mingwGCC.actualName);
CPPUNIT_ASSERT_EQUAL("mingw-w64"sv, mingwGCC.targetPrefix);
CPPUNIT_ASSERT_EQUAL(""sv, mingwGCC.vcsSuffix);
const auto mingwUcrtCppWinrt = PackageNameData::decompose("mingw-w64-ucrt-cppwinrt");
CPPUNIT_ASSERT_EQUAL("cppwinrt"sv, mingwUcrtCppWinrt.actualName);
CPPUNIT_ASSERT_EQUAL("mingw-w64-ucrt"sv, mingwUcrtCppWinrt.targetPrefix);
CPPUNIT_ASSERT_EQUAL(""sv, mingwUcrtCppWinrt.vcsSuffix);
const auto staticCompatQt6 = PackageNameData::decompose("static-compat-qt6-base");
CPPUNIT_ASSERT_EQUAL("qt6-base"sv, staticCompatQt6.actualName);
CPPUNIT_ASSERT_EQUAL("static-compat"sv, staticCompatQt6.targetPrefix);