QtSupport: Add supportsMultipleQtAbis getter

Introduce bool QtSupport::supportsMultipleQtAbis().

Let AndroidQtVersion respond according to the QVersionNumber.

This allows to replace the version arithmetics in several
places with straight forward (and better findable) function calls.

Task-number: QTCREATORBUG-24471
Change-Id: Ib6e39fd6485a54e08ad66f84d4e2582989043419
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Alessandro Portale
2020-08-20 13:58:21 +02:00
parent 13b72eb621
commit a650997448
9 changed files with 19 additions and 6 deletions

View File

@@ -390,7 +390,7 @@ void AndroidBuildApkStep::doRun()
QJsonObject deploySettings = Android::AndroidManager::deploymentSettings(target());
QString applicationBinary;
if (version->qtVersion() < QtSupport::QtVersionNumber(5, 14, 0)) {
if (!version->supportsMultipleQtAbis()) {
QTC_ASSERT(androidAbis.size() == 1, return false);
applicationBinary = buildSystem()->buildTarget(buildKey).targetFilePath.toString();
FilePath androidLibsDir = buildDirectory() / "android-build/libs" / androidAbis.first();

View File

@@ -235,7 +235,7 @@ QWidget *AndroidBuildApkWidget::createAdvancedGroup()
auto vbox = new QVBoxLayout(group);
QtSupport::BaseQtVersion *version = QtSupport::QtKitAspect::qtVersion(step()->target()->kit());
if (version && version->qtVersion() >= QtSupport::QtVersionNumber{5,14}) {
if (version && version->supportsMultipleQtAbis()) {
auto buildAAB = new QCheckBox(tr("Build .aab (Android App Bundle)"), group);
buildAAB->setChecked(m_step->buildAAB());
connect(buildAAB, &QAbstractButton::toggled, m_step, &AndroidBuildApkStep::setBuildAAB);

View File

@@ -287,7 +287,7 @@ QJsonObject AndroidManager::deploymentSettings(const Target *target)
settings["qt"] = qt->prefix().toString();
settings["ndk"] = AndroidConfigurations::currentConfig().ndkLocation(qt).toString();
settings["sdk"] = AndroidConfigurations::currentConfig().sdkLocation().toString();
if (qt->qtVersion() < QtSupport::QtVersionNumber(5, 14, 0)) {
if (!qt->supportsMultipleQtAbis()) {
const QStringList abis = applicationAbis(target);
QTC_ASSERT(abis.size() == 1, return {});
settings["stdcpp-path"] = (AndroidConfigurations::currentConfig().toolchainPath(qt)

View File

@@ -84,6 +84,11 @@ QString AndroidQtVersion::invalidReason() const
return tmp;
}
bool AndroidQtVersion::supportsMultipleQtAbis() const
{
return qtVersion() >= QtSupport::QtVersionNumber{5, 14};
}
Abis AndroidQtVersion::detectQtAbis() const
{
auto androidAbi2Abi = [](const QString &androidAbi) {
@@ -165,7 +170,7 @@ int AndroidQtVersion::minimumNDK() const
void AndroidQtVersion::parseMkSpec(ProFileEvaluator *evaluator) const
{
if (qtVersion() >= QtSupport::QtVersionNumber{5, 14})
if (supportsMultipleQtAbis())
m_androidAbis = evaluator->values("ALL_ANDROID_ABIS");
else
m_androidAbis = QStringList{evaluator->value("ANDROID_TARGET_ARCH")};

View File

@@ -43,6 +43,7 @@ public:
bool isValid() const override;
QString invalidReason() const override;
bool supportsMultipleQtAbis() const override;
ProjectExplorer::Abis detectQtAbis() const override;
void addToEnvironment(const ProjectExplorer::Kit *k, Utils::Environment &env) const override;

View File

@@ -166,7 +166,7 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Utils::Id id)
initialArgs.append(QString::fromLatin1("-DANDROID_ABI:STRING=%1").arg(preferredAbi));
QtSupport::BaseQtVersion *qt = QtSupport::QtKitAspect::qtVersion(k);
if (qt && qt->qtVersion() >= QtSupport::QtVersionNumber{5, 14, 0}) {
if (qt && qt->supportsMultipleQtAbis()) {
auto sdkLocation = bs->data(Android::Constants::SdkLocation).value<FilePath>();
initialArgs.append(
QString::fromLatin1("-DANDROID_SDK:PATH=%1").arg(sdkLocation.toString()));

View File

@@ -423,7 +423,7 @@ bool QmakeProFileNode::setData(Utils::Id role, const QVariant &value) const
int flags = QmakeProjectManager::Internal::ProWriter::ReplaceValues;
if (Target *target = m_buildSystem->target()) {
QtSupport::BaseQtVersion *version = QtSupport::QtKitAspect::qtVersion(target->kit());
if (version && version->qtVersion() < QtSupport::QtVersionNumber(5, 14, 0)) {
if (version && !version->supportsMultipleQtAbis()) {
const QString arch = pro->singleVariableValue(Variable::AndroidArch);
scope = "contains(ANDROID_TARGET_ARCH," + arch + ')';
flags |= QmakeProjectManager::Internal::ProWriter::MultiLine;

View File

@@ -1692,6 +1692,11 @@ Tasks BaseQtVersion::reportIssuesImpl(const QString &proFile, const QString &bui
return results;
}
bool BaseQtVersion::supportsMultipleQtAbis() const
{
return false;
}
Tasks BaseQtVersion::reportIssues(const QString &proFile, const QString &buildDir) const
{
Tasks results = reportIssuesImpl(proFile, buildDir);

View File

@@ -235,6 +235,8 @@ public:
QSet<Utils::Id> features() const;
virtual bool supportsMultipleQtAbis() const;
protected:
BaseQtVersion();
BaseQtVersion(const BaseQtVersion &other) = delete;