QtVersion: Add a method to query the target device type

Add and implement a method to get the supported target device
types to the BaseQtVersion interface. Implement this for all
Qt versions.

Validate that the Qt version's target device type matches up
with the device type set in the kit and warn on mismatch.

Change-Id: I95da42031022663776afe23a50eae3677bdb1dda
Reviewed-by: Tim Jenssen <tim.jenssen@theqtcompany.com>
This commit is contained in:
Tobias Hunger
2015-11-27 14:02:44 +01:00
parent eebe44d3cf
commit d323d595b7
20 changed files with 92 additions and 41 deletions

View File

@@ -143,6 +143,11 @@ QSet<Core::Id> AndroidQtVersion::availableFeatures() const
return features;
}
QSet<Core::Id> AndroidQtVersion::targetDeviceTypes() const
{
return { Constants::ANDROID_DEVICE_TYPE };
}
QString AndroidQtVersion::platformName() const
{
return QLatin1String(QtSupport::Constants::ANDROID_PLATFORM);

View File

@@ -57,6 +57,7 @@ public:
Utils::Environment qmakeRunEnvironment() const;
QSet<Core::Id> availableFeatures() const;
QSet<Core::Id> targetDeviceTypes() const;
QString platformName() const;
QString platformDisplayName() const;

View File

@@ -119,6 +119,11 @@ QSet<Core::Id> IosQtVersion::availableFeatures() const
return features;
}
QSet<Core::Id> IosQtVersion::targetDeviceTypes() const
{
return { Constants::IOS_DEVICE_TYPE };
}
QString IosQtVersion::platformName() const
{
return QLatin1String(QtSupport::Constants::IOS_PLATFORM);

View File

@@ -56,6 +56,7 @@ public:
void addToEnvironment(const ProjectExplorer::Kit *k, Utils::Environment &env) const override;
QSet<Core::Id> availableFeatures() const override;
QSet<Core::Id> targetDeviceTypes() const override;
QString platformName() const override;
QString platformDisplayName() const override;

View File

@@ -54,9 +54,7 @@ QString QnxDeviceConfigurationFactory::displayNameForId(Core::Id type) const
QList<Core::Id> QnxDeviceConfigurationFactory::availableCreationIds() const
{
QList<Core::Id> result;
result << Core::Id(Constants::QNX_QNX_OS_TYPE);
return result;
return { Constants::QNX_QNX_OS_TYPE };
}
bool QnxDeviceConfigurationFactory::canCreate() const

View File

@@ -85,6 +85,11 @@ QSet<Core::Id> QnxQtVersion::availableFeatures() const
return features;
}
QSet<Core::Id> QnxQtVersion::targetDeviceTypes() const
{
return { Constants::QNX_QNX_OS_TYPE };
}
QString QnxQtVersion::platformName() const
{
return QString::fromLatin1(Constants::QNX_QNX_PLATFORM_NAME);

View File

@@ -57,6 +57,7 @@ public:
QString description() const override;
QSet<Core::Id> availableFeatures() const override;
QSet<Core::Id> targetDeviceTypes() const override;
QString platformName() const override;
QString platformDisplayName() const override;

View File

@@ -484,6 +484,15 @@ QList<Task> BaseQtVersion::validateKit(const Kit *k)
if (qtAbis.isEmpty()) // No need to test if Qt does not know anyway...
return result;
const Id dt = DeviceTypeKitInformation::deviceTypeId(k);
const QSet<Id> tdt = targetDeviceTypes();
if (!tdt.isEmpty() && !tdt.contains(dt)) {
result << Task(Task::Warning,
QCoreApplication::translate("BaseQtVersion",
"Device type is not supported by Qt version."),
FileName(), -1, ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM);
}
ToolChain *tc = ToolChainKitInformation::toolChain(k);
if (tc) {
Abi targetAbi = tc->targetAbi();

View File

@@ -38,6 +38,7 @@
#include <projectexplorer/abi.h>
#include <QSet>
#include <QStringList>
#include <QVariantMap>
@@ -206,6 +207,7 @@ public:
bool fromPath = false);
virtual QSet<Core::Id> availableFeatures() const;
virtual QSet<Core::Id> targetDeviceTypes() const = 0;
virtual QString platformName() const;
virtual QString platformDisplayName() const;
virtual bool supportsPlatform(const QString &platformName) const;

View File

@@ -31,8 +31,14 @@
#include "desktopqtversion.h"
#include "qtsupportconstants.h"
#include <projectexplorer/abi.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <remotelinux/remotelinux_constants.h>
#include <coreplugin/featureprovider.h>
#include <utils/algorithm.h>
#include <utils/hostosinfo.h>
#include <QCoreApplication>
using namespace QtSupport;
@@ -90,6 +96,14 @@ QSet<Core::Id> DesktopQtVersion::availableFeatures() const
return features;
}
QSet<Core::Id> DesktopQtVersion::targetDeviceTypes() const
{
QSet<Core::Id> result = { ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE };
if (Utils::contains(qtAbis(), [](const ProjectExplorer::Abi a) { return a.os() == ProjectExplorer::Abi::LinuxOS; }))
result.insert(RemoteLinux::Constants::GenericLinuxOsType);
return result;
}
QString DesktopQtVersion::platformName() const
{
return QLatin1String(Constants::DESKTOP_PLATFORM);

View File

@@ -52,6 +52,7 @@ public:
QString description() const;
QSet<Core::Id> availableFeatures() const;
QSet<Core::Id> targetDeviceTypes() const;
QString platformName() const;
QString platformDisplayName() const;
};

View File

@@ -35,6 +35,9 @@
#include "qtversionmanager.h"
#include "qtparser.h"
#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/task.h>
#include <utils/algorithm.h>
#include <utils/buildablehelperlibrary.h>
#include <utils/macroexpander.h>
@@ -51,8 +54,8 @@ QtKitInformation::QtKitInformation()
setId(QtKitInformation::id());
setPriority(26000);
connect(ProjectExplorer::KitManager::instance(), SIGNAL(kitsLoaded()),
this, SLOT(kitsWereLoaded()));
connect(KitManager::instance(), &KitManager::kitsLoaded,
this, &QtKitInformation::kitsWereLoaded);
}
QVariant QtKitInformation::defaultValue(ProjectExplorer::Kit *k) const
@@ -85,11 +88,11 @@ QVariant QtKitInformation::defaultValue(ProjectExplorer::Kit *k) const
QList<ProjectExplorer::Task> QtKitInformation::validate(const ProjectExplorer::Kit *k) const
{
QList<ProjectExplorer::Task> result;
QTC_ASSERT(QtVersionManager::isLoaded(), return result);
QTC_ASSERT(QtVersionManager::isLoaded(), return { });
BaseQtVersion *version = qtVersion(k);
if (!version)
return result;
return { };
return version->validateKit(k);
}

View File

@@ -31,18 +31,14 @@
#include "winceqtversion.h"
#include "qtsupportconstants.h"
#include <coreplugin/id.h>
#include <QCoreApplication>
#include <QStringList>
using namespace QtSupport;
using namespace QtSupport::Internal;
WinCeQtVersion::WinCeQtVersion()
: BaseQtVersion(),
m_archType(ProjectExplorer::Abi::ArmArchitecture)
{
}
WinCeQtVersion::WinCeQtVersion(const Utils::FileName &path, const QString &archType,
bool isAutodetected, const QString &autodetectionSource)
: BaseQtVersion(path, isAutodetected, autodetectionSource),
@@ -55,10 +51,6 @@ WinCeQtVersion::WinCeQtVersion(const Utils::FileName &path, const QString &archT
setUnexpandedDisplayName(defaultUnexpandedDisplayName(path, false));
}
WinCeQtVersion::~WinCeQtVersion()
{
}
WinCeQtVersion *WinCeQtVersion::clone() const
{
return new WinCeQtVersion(*this);
@@ -113,3 +105,8 @@ QString WinCeQtVersion::platformDisplayName() const
{
return QLatin1String(Constants::WINDOWS_CE_PLATFORM_TR);
}
QSet<Core::Id> WinCeQtVersion::targetDeviceTypes() const
{
return QSet<Core::Id>();
}

View File

@@ -39,10 +39,10 @@ namespace Internal {
class WinCeQtVersion : public BaseQtVersion
{
public:
WinCeQtVersion();
WinCeQtVersion() = default;
WinCeQtVersion(const Utils::FileName &path, const QString &archType,
bool isAutodetected = false, const QString &autodetectionSource = QString());
~WinCeQtVersion();
~WinCeQtVersion() = default;
WinCeQtVersion *clone() const;
QString type() const;
@@ -55,9 +55,10 @@ public:
QString platformName() const;
QString platformDisplayName() const;
QSet<Core::Id> targetDeviceTypes() const;
private:
ProjectExplorer::Abi::Architecture m_archType;
ProjectExplorer::Abi::Architecture m_archType = ProjectExplorer::Abi::ArmArchitecture;
};
} // Internal

View File

@@ -32,6 +32,7 @@
#include "remotelinux_constants.h"
#include <coreplugin/id.h>
#include <qtsupport/qtsupportconstants.h>
#include <QCoreApplication>
@@ -39,19 +40,12 @@
namespace RemoteLinux {
namespace Internal {
EmbeddedLinuxQtVersion::EmbeddedLinuxQtVersion()
: BaseQtVersion()
{ }
EmbeddedLinuxQtVersion::EmbeddedLinuxQtVersion(const Utils::FileName &path, bool isAutodetected, const QString &autodetectionSource)
: BaseQtVersion(path, isAutodetected, autodetectionSource)
{
setUnexpandedDisplayName(defaultUnexpandedDisplayName(path, false));
}
EmbeddedLinuxQtVersion::~EmbeddedLinuxQtVersion()
{ }
EmbeddedLinuxQtVersion *EmbeddedLinuxQtVersion::clone() const
{
return new EmbeddedLinuxQtVersion(*this);
@@ -72,6 +66,11 @@ QString EmbeddedLinuxQtVersion::description() const
return QCoreApplication::translate("QtVersion", "Embedded Linux", "Qt Version is used for embedded Linux development");
}
QSet<Core::Id> EmbeddedLinuxQtVersion::targetDeviceTypes() const
{
return { Constants::GenericLinuxOsType };
}
QString EmbeddedLinuxQtVersion::platformName() const
{
return QLatin1String(QtSupport::Constants::EMBEDDED_LINUX_PLATFORM);

View File

@@ -39,9 +39,9 @@ namespace Internal {
class EmbeddedLinuxQtVersion : public QtSupport::BaseQtVersion
{
public:
EmbeddedLinuxQtVersion();
EmbeddedLinuxQtVersion() = default;
EmbeddedLinuxQtVersion(const Utils::FileName &path, bool isAutodetected = false, const QString &autodetectionSource = QString());
~EmbeddedLinuxQtVersion();
~EmbeddedLinuxQtVersion() = default;
EmbeddedLinuxQtVersion *clone() const;
QString type() const;
@@ -50,6 +50,7 @@ public:
QString description() const;
QSet<Core::Id> targetDeviceTypes() const;
QString platformName() const;
QString platformDisplayName() const;
};

View File

@@ -31,16 +31,15 @@
#include "winrtphoneqtversion.h"
#include "winrtconstants.h"
#include <coreplugin/id.h>
#include <qtsupport/qtsupportconstants.h>
#include <QSet>
namespace WinRt {
namespace Internal {
WinRtPhoneQtVersion::WinRtPhoneQtVersion()
: WinRtQtVersion()
{
}
WinRtPhoneQtVersion::WinRtPhoneQtVersion(const Utils::FileName &path, bool isAutodetected,
const QString &autodetectionSource)
: WinRtQtVersion(path, isAutodetected, autodetectionSource)
@@ -72,5 +71,10 @@ QString WinRtPhoneQtVersion::platformDisplayName() const
return QLatin1String(QtSupport::Constants::WINDOWS_PHONE_PLATFORM_TR);
}
QSet<Core::Id> WinRtPhoneQtVersion::targetDeviceTypes() const
{
return { Constants::WINRT_DEVICE_TYPE_PHONE, Constants::WINRT_DEVICE_TYPE_EMULATOR };
}
} // Internal
} // WinRt

View File

@@ -40,7 +40,7 @@ class WinRtPhoneQtVersion : public WinRtQtVersion
{
Q_DECLARE_TR_FUNCTIONS(WinRt::Internal::WinRtQtVersion)
public:
WinRtPhoneQtVersion();
WinRtPhoneQtVersion() = default;
WinRtPhoneQtVersion(const Utils::FileName &path, bool isAutodetected,
const QString &autodetectionSource);
@@ -49,6 +49,7 @@ public:
QString type() const;
QString platformName() const;
QString platformDisplayName() const;
QSet<Core::Id> targetDeviceTypes() const;
};
} // Internal

View File

@@ -38,10 +38,6 @@
namespace WinRt {
namespace Internal {
WinRtQtVersion::WinRtQtVersion()
{
}
WinRtQtVersion::WinRtQtVersion(const Utils::FileName &path, bool isAutodetected,
const QString &autodetectionSource)
: BaseQtVersion(path, isAutodetected, autodetectionSource)
@@ -89,5 +85,10 @@ QList<ProjectExplorer::Abi> WinRtQtVersion::detectQtAbis() const
return qtAbisFromLibrary(qtCorePaths(versionInfo(), qtVersionString()));
}
QSet<Core::Id> WinRtQtVersion::targetDeviceTypes() const
{
return { Constants::WINRT_DEVICE_TYPE_LOCAL, Constants::WINRT_DEVICE_TYPE_EMULATOR };
}
} // Internal
} // WinRt

View File

@@ -40,7 +40,7 @@ class WinRtQtVersion : public QtSupport::BaseQtVersion
{
Q_DECLARE_TR_FUNCTIONS(WinRt::Internal::WinRtQtVersion)
public:
WinRtQtVersion();
WinRtQtVersion() = default;
WinRtQtVersion(const Utils::FileName &path, bool isAutodetected,
const QString &autodetectionSource);
@@ -51,6 +51,8 @@ public:
QString platformName() const;
QString platformDisplayName() const;
QList<ProjectExplorer::Abi> detectQtAbis() const;
QSet<Core::Id> targetDeviceTypes() const;
};
} // Internal