ProbeABI findBestMatchingABI(const ProbeABI &targetABI, const QVector<ProbeABI> &availableABIs) { QVector<ProbeABI> compatABIs; foreach (const ProbeABI &abi, availableABIs) { if (targetABI.isCompatible(abi)) compatABIs.push_back(abi); } if (compatABIs.isEmpty()) return ProbeABI(); std::sort(compatABIs.begin(), compatABIs.end()); return compatABIs.last(); }
void testProbeABICompat() { #ifndef Q_OS_WIN const ProbeABI targetABI = ProbeABI::fromString(QStringLiteral("qt5_2-x86_64")); const ProbeABI probeABI = ProbeABI::fromString(QStringLiteral("qt5_1-x86_64")); #if defined(Q_OS_MAC) const bool debugAbiMatters = true; #else const bool debugAbiMatters = false; #endif const bool compilerAbiMatters = false; #else const ProbeABI targetABI = ProbeABI::fromString(QStringLiteral("qt5_2-MSVC-140-x86_64")); const ProbeABI probeABI = ProbeABI::fromString(QStringLiteral("qt5_1-MSVC-140-x86_64")); const bool debugAbiMatters = true; const bool compilerAbiMatters = true; #endif // full match, or same major version and older probe QVERIFY(targetABI.isCompatible(targetABI)); QVERIFY(targetABI.isCompatible(probeABI)); // incompatible // newer minor version probe QVERIFY(!probeABI.isCompatible(targetABI)); // different major version ProbeABI incompatABI(probeABI); incompatABI.setQtVersion(4, 8); QVERIFY(!targetABI.isCompatible(incompatABI)); QVERIFY(!incompatABI.isCompatible(targetABI)); // different architecture incompatABI = targetABI; incompatABI.setArchitecture(QStringLiteral("i686")); QVERIFY(!targetABI.isCompatible(incompatABI)); // different debug/release mode incompatABI = targetABI; incompatABI.setIsDebug(true); QCOMPARE(targetABI.isCompatible(incompatABI), !debugAbiMatters); // different compiler incompatABI = targetABI; incompatABI.setCompiler(QStringLiteral("Clang")); QCOMPARE(targetABI.isCompatible(incompatABI), !compilerAbiMatters); }