forked from qt-creator/qt-creator
Android: Adjust to changes in Qt 6.9
Qt 6.9 changes the format of the module JSON files. Adjust to those changes, and make sure that we still can read the old format. Fixes: QTCREATORBUG-32000 Change-Id: Iefe545521bebb25dbdd4bbb2083813c97059e6b2 Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
committed by
Joerg Bornemann
parent
1c40dfd419
commit
17f864979c
@@ -29,6 +29,7 @@
|
|||||||
|
|
||||||
#include <qtsupport/qtversionfactory.h>
|
#include <qtsupport/qtversionfactory.h>
|
||||||
|
|
||||||
|
#include <QJsonArray>
|
||||||
#include <QJsonDocument>
|
#include <QJsonDocument>
|
||||||
#include <QJsonObject>
|
#include <QJsonObject>
|
||||||
#include <QRegularExpression>
|
#include <QRegularExpression>
|
||||||
@@ -158,7 +159,7 @@ AndroidQtVersion::BuiltWith AndroidQtVersion::builtWith(bool *ok) const
|
|||||||
if (coreModuleJson.exists()) {
|
if (coreModuleJson.exists()) {
|
||||||
Utils::FileReader reader;
|
Utils::FileReader reader;
|
||||||
if (reader.fetch(coreModuleJson))
|
if (reader.fetch(coreModuleJson))
|
||||||
return parseBuiltWith(reader.data(), ok);
|
return parseModulesCoreJson(reader.data(), ok);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ok)
|
if (ok)
|
||||||
@@ -175,12 +176,10 @@ static int versionFromPlatformString(const QString &string, bool *ok = nullptr)
|
|||||||
return match.hasMatch() ? match.captured(1).toInt(ok) : -1;
|
return match.hasMatch() ? match.captured(1).toInt(ok) : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
AndroidQtVersion::BuiltWith AndroidQtVersion::parseBuiltWith(const QByteArray &modulesCoreJsonData,
|
static AndroidQtVersion::BuiltWith parseBuiltWith(const QJsonObject &jsonObject, bool *ok)
|
||||||
bool *ok)
|
|
||||||
{
|
{
|
||||||
bool validPlatformString = false;
|
bool validPlatformString = false;
|
||||||
AndroidQtVersion::BuiltWith result;
|
AndroidQtVersion::BuiltWith result;
|
||||||
const QJsonObject jsonObject = QJsonDocument::fromJson(modulesCoreJsonData).object();
|
|
||||||
if (const QJsonValue builtWith = jsonObject.value("built_with"); !builtWith.isUndefined()) {
|
if (const QJsonValue builtWith = jsonObject.value("built_with"); !builtWith.isUndefined()) {
|
||||||
if (const QJsonValue android = builtWith["android"]; !android.isUndefined()) {
|
if (const QJsonValue android = builtWith["android"]; !android.isUndefined()) {
|
||||||
if (const QJsonValue apiVersion = android["api_version"]; !apiVersion.isUndefined()) {
|
if (const QJsonValue apiVersion = android["api_version"]; !apiVersion.isUndefined()) {
|
||||||
@@ -201,6 +200,48 @@ AndroidQtVersion::BuiltWith AndroidQtVersion::parseBuiltWith(const QByteArray &m
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static AndroidQtVersion::BuiltWith parsePlatforms(const QJsonObject &jsonObject, bool *ok)
|
||||||
|
{
|
||||||
|
AndroidQtVersion::BuiltWith result;
|
||||||
|
if (ok)
|
||||||
|
*ok = false;
|
||||||
|
for (const QJsonValue &platformValue : jsonObject.value("platforms").toArray()) {
|
||||||
|
const QJsonObject platform = platformValue.toObject();
|
||||||
|
if (platform.value("name").toString() != QLatin1String("Android"))
|
||||||
|
continue;
|
||||||
|
for (const QJsonValue &targetsValue : platform.value("targets").toArray()) {
|
||||||
|
const QJsonObject target = targetsValue.toObject();
|
||||||
|
const QString apiVersionString = target.value("api_version").toString();
|
||||||
|
if (apiVersionString.isNull())
|
||||||
|
return {};
|
||||||
|
bool apiVersionOK = false;
|
||||||
|
result.apiVersion = versionFromPlatformString(apiVersionString, &apiVersionOK);
|
||||||
|
if (!apiVersionOK)
|
||||||
|
return {};
|
||||||
|
const QString ndkVersionString = target.value("ndk_version").toString();
|
||||||
|
if (ndkVersionString.isNull())
|
||||||
|
return {};
|
||||||
|
result.ndkVersion = QVersionNumber::fromString(ndkVersionString);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ok)
|
||||||
|
*ok = true;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
AndroidQtVersion::BuiltWith AndroidQtVersion::parseModulesCoreJson(const QByteArray &data, bool *ok)
|
||||||
|
{
|
||||||
|
AndroidQtVersion::BuiltWith result;
|
||||||
|
const QJsonObject jsonObject = QJsonDocument::fromJson(data).object();
|
||||||
|
const int schemaVersion = jsonObject.value("schema_version").toInt(1);
|
||||||
|
if (schemaVersion >= 2)
|
||||||
|
result = parsePlatforms(jsonObject, ok);
|
||||||
|
else
|
||||||
|
result = parseBuiltWith(jsonObject, ok);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
void AndroidQtVersion::parseMkSpec(ProFileEvaluator *evaluator) const
|
void AndroidQtVersion::parseMkSpec(ProFileEvaluator *evaluator) const
|
||||||
{
|
{
|
||||||
m_androidAbis = evaluator->values("ALL_ANDROID_ABIS");
|
m_androidAbis = evaluator->values("ALL_ANDROID_ABIS");
|
||||||
@@ -306,6 +347,33 @@ void AndroidQtVersionTest::testAndroidQtVersionParseBuiltWith_data()
|
|||||||
<< true
|
<< true
|
||||||
<< QVersionNumber(25, 1, 8937393)
|
<< QVersionNumber(25, 1, 8937393)
|
||||||
<< 31;
|
<< 31;
|
||||||
|
|
||||||
|
QTest::newRow("Android Qt 6.9")
|
||||||
|
<< R"({
|
||||||
|
"schema_version": 2,
|
||||||
|
"name": "Core",
|
||||||
|
"repository": "qtbase",
|
||||||
|
"version": "6.9.0",
|
||||||
|
"platforms": [
|
||||||
|
{
|
||||||
|
"name": "Android",
|
||||||
|
"version": "1",
|
||||||
|
"compiler_id": "Clang",
|
||||||
|
"compiler_version": "17.0.2",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"api_version": "android-34",
|
||||||
|
"ndk_version": "26.1.10909125",
|
||||||
|
"architecture": "arm",
|
||||||
|
"abi": "arm-little_endian-ilp32-eabi"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})"
|
||||||
|
<< true
|
||||||
|
<< QVersionNumber(26, 1, 10909125)
|
||||||
|
<< 34;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AndroidQtVersionTest::testAndroidQtVersionParseBuiltWith()
|
void AndroidQtVersionTest::testAndroidQtVersionParseBuiltWith()
|
||||||
@@ -317,7 +385,7 @@ void AndroidQtVersionTest::testAndroidQtVersionParseBuiltWith()
|
|||||||
|
|
||||||
bool ok = false;
|
bool ok = false;
|
||||||
const AndroidQtVersion::BuiltWith bw =
|
const AndroidQtVersion::BuiltWith bw =
|
||||||
AndroidQtVersion::parseBuiltWith(modulesCoreJson.toUtf8(), &ok);
|
AndroidQtVersion::parseModulesCoreJson(modulesCoreJson.toUtf8(), &ok);
|
||||||
QCOMPARE(ok, hasInfo);
|
QCOMPARE(ok, hasInfo);
|
||||||
QCOMPARE(bw.apiVersion, apiVersion);
|
QCOMPARE(bw.apiVersion, apiVersion);
|
||||||
QCOMPARE(bw.ndkVersion, ndkVersion);
|
QCOMPARE(bw.ndkVersion, ndkVersion);
|
||||||
|
@@ -35,7 +35,8 @@ public:
|
|||||||
int apiVersion = -1;
|
int apiVersion = -1;
|
||||||
QVersionNumber ndkVersion;
|
QVersionNumber ndkVersion;
|
||||||
};
|
};
|
||||||
static BuiltWith parseBuiltWith(const QByteArray &modulesCoreJsonData, bool *ok = nullptr);
|
static BuiltWith parseModulesCoreJson(const QByteArray &modulesCoreJsonData,
|
||||||
|
bool *ok = nullptr);
|
||||||
BuiltWith builtWith(bool *ok = nullptr) const;
|
BuiltWith builtWith(bool *ok = nullptr) const;
|
||||||
|
|
||||||
bool isAndroidQtVersion() const override { return true; };
|
bool isAndroidQtVersion() const override { return true; };
|
||||||
|
Reference in New Issue
Block a user