In earlier GCC versions, the Debian/Ubuntu provided mingw toolchains were packaged in /usr/lib/gcc/<triple> with version strings such as "5.3-win32", which were matched and found since 6afcd64eb65fca233a7b173f88cffb2c2c9c114c. However in recent versions, they have stopped including the minor version number and only have version strings such as "10-win32" and "10-posix". Generalize the parsing code to tolerate the patch suffix to be present on a version number with only a major number. Refactor the string parsing code to highlight the overall structure of the parsing. This implementation should yield the same result as before, except for when there's only one segment and it has trailing, non-number contents. This allows Clang to find the GCC libraries and headers in Debian/Ubuntu provided MinGW cross compilers.
61 lines
1.8 KiB
C++
61 lines
1.8 KiB
C++
//===- unittests/Driver/GCCVersionTest.cpp --- GCCVersion parser tests ----===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Unit tests for Generic_GCC::GCCVersion
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "../../lib/Driver/ToolChains/Gnu.h"
|
|
#include "gtest/gtest.h"
|
|
|
|
// The Generic_GCC class is hidden in dylib/shared library builds, so
|
|
// this test can only be built if neither of those configurations are
|
|
// enabled.
|
|
#if !defined(LLVM_BUILD_LLVM_DYLIB) && !defined(LLVM_BUILD_SHARED_LIBS)
|
|
|
|
using namespace clang;
|
|
using namespace clang::driver;
|
|
|
|
namespace {
|
|
|
|
struct VersionParseTest {
|
|
std::string Text;
|
|
|
|
int Major, Minor, Patch;
|
|
std::string MajorStr, MinorStr, PatchSuffix;
|
|
};
|
|
|
|
const VersionParseTest TestCases[] = {
|
|
{"5", 5, -1, -1, "5", "", ""},
|
|
{"4.4", 4, 4, -1, "4", "4", ""},
|
|
{"4.4-patched", 4, 4, -1, "4", "4", "-patched"},
|
|
{"4.4.0", 4, 4, 0, "4", "4", ""},
|
|
{"4.4.x", 4, 4, -1, "4", "4", ""},
|
|
{"4.4.2-rc4", 4, 4, 2, "4", "4", "-rc4"},
|
|
{"4.4.x-patched", 4, 4, -1, "4", "4", ""},
|
|
{"not-a-version", -1, -1, -1, "", "", ""},
|
|
{"10-win32", 10, -1, -1, "10", "", "-win32"},
|
|
};
|
|
|
|
TEST(GCCVersionTest, Parse) {
|
|
for (const auto &TC : TestCases) {
|
|
auto V = toolchains::Generic_GCC::GCCVersion::Parse(TC.Text);
|
|
EXPECT_EQ(V.Text, TC.Text);
|
|
EXPECT_EQ(V.Major, TC.Major);
|
|
EXPECT_EQ(V.Minor, TC.Minor);
|
|
EXPECT_EQ(V.Patch, TC.Patch);
|
|
EXPECT_EQ(V.MajorStr, TC.MajorStr);
|
|
EXPECT_EQ(V.MinorStr, TC.MinorStr);
|
|
EXPECT_EQ(V.PatchSuffix, TC.PatchSuffix);
|
|
}
|
|
}
|
|
|
|
} // end anonymous namespace
|
|
|
|
#endif
|