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; return features;
} }
QSet<Core::Id> AndroidQtVersion::targetDeviceTypes() const
{
return { Constants::ANDROID_DEVICE_TYPE };
}
QString AndroidQtVersion::platformName() const QString AndroidQtVersion::platformName() const
{ {
return QLatin1String(QtSupport::Constants::ANDROID_PLATFORM); return QLatin1String(QtSupport::Constants::ANDROID_PLATFORM);

View File

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

View File

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

View File

@@ -56,6 +56,7 @@ public:
void addToEnvironment(const ProjectExplorer::Kit *k, Utils::Environment &env) const override; void addToEnvironment(const ProjectExplorer::Kit *k, Utils::Environment &env) const override;
QSet<Core::Id> availableFeatures() const override; QSet<Core::Id> availableFeatures() const override;
QSet<Core::Id> targetDeviceTypes() const override;
QString platformName() const override; QString platformName() const override;
QString platformDisplayName() 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> QnxDeviceConfigurationFactory::availableCreationIds() const
{ {
QList<Core::Id> result; return { Constants::QNX_QNX_OS_TYPE };
result << Core::Id(Constants::QNX_QNX_OS_TYPE);
return result;
} }
bool QnxDeviceConfigurationFactory::canCreate() const bool QnxDeviceConfigurationFactory::canCreate() const

View File

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

View File

@@ -57,6 +57,7 @@ public:
QString description() const override; QString description() const override;
QSet<Core::Id> availableFeatures() const override; QSet<Core::Id> availableFeatures() const override;
QSet<Core::Id> targetDeviceTypes() const override;
QString platformName() const override; QString platformName() const override;
QString platformDisplayName() 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... if (qtAbis.isEmpty()) // No need to test if Qt does not know anyway...
return result; 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); ToolChain *tc = ToolChainKitInformation::toolChain(k);
if (tc) { if (tc) {
Abi targetAbi = tc->targetAbi(); Abi targetAbi = tc->targetAbi();

View File

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

View File

@@ -31,8 +31,14 @@
#include "desktopqtversion.h" #include "desktopqtversion.h"
#include "qtsupportconstants.h" #include "qtsupportconstants.h"
#include <projectexplorer/abi.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <remotelinux/remotelinux_constants.h>
#include <coreplugin/featureprovider.h> #include <coreplugin/featureprovider.h>
#include <utils/algorithm.h>
#include <utils/hostosinfo.h>
#include <QCoreApplication> #include <QCoreApplication>
using namespace QtSupport; using namespace QtSupport;
@@ -90,6 +96,14 @@ QSet<Core::Id> DesktopQtVersion::availableFeatures() const
return features; 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 QString DesktopQtVersion::platformName() const
{ {
return QLatin1String(Constants::DESKTOP_PLATFORM); return QLatin1String(Constants::DESKTOP_PLATFORM);

View File

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

View File

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

View File

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

View File

@@ -32,6 +32,7 @@
#include "remotelinux_constants.h" #include "remotelinux_constants.h"
#include <coreplugin/id.h>
#include <qtsupport/qtsupportconstants.h> #include <qtsupport/qtsupportconstants.h>
#include <QCoreApplication> #include <QCoreApplication>
@@ -39,19 +40,12 @@
namespace RemoteLinux { namespace RemoteLinux {
namespace Internal { namespace Internal {
EmbeddedLinuxQtVersion::EmbeddedLinuxQtVersion()
: BaseQtVersion()
{ }
EmbeddedLinuxQtVersion::EmbeddedLinuxQtVersion(const Utils::FileName &path, bool isAutodetected, const QString &autodetectionSource) EmbeddedLinuxQtVersion::EmbeddedLinuxQtVersion(const Utils::FileName &path, bool isAutodetected, const QString &autodetectionSource)
: BaseQtVersion(path, isAutodetected, autodetectionSource) : BaseQtVersion(path, isAutodetected, autodetectionSource)
{ {
setUnexpandedDisplayName(defaultUnexpandedDisplayName(path, false)); setUnexpandedDisplayName(defaultUnexpandedDisplayName(path, false));
} }
EmbeddedLinuxQtVersion::~EmbeddedLinuxQtVersion()
{ }
EmbeddedLinuxQtVersion *EmbeddedLinuxQtVersion::clone() const EmbeddedLinuxQtVersion *EmbeddedLinuxQtVersion::clone() const
{ {
return new EmbeddedLinuxQtVersion(*this); 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"); 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 QString EmbeddedLinuxQtVersion::platformName() const
{ {
return QLatin1String(QtSupport::Constants::EMBEDDED_LINUX_PLATFORM); return QLatin1String(QtSupport::Constants::EMBEDDED_LINUX_PLATFORM);

View File

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

View File

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

View File

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

View File

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

View File

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