forked from qt-creator/qt-creator
QtSupport: Replace QtVersionFactory::canCreate
... by a functor checking some ad-hoc custom structure content. This effectively replaces one ugliness (access to qmake specific variable via qmake specific ProFileEvaluator) by an indirection layer with similarly ungeneric contents, but I like the latter setup better. Change-Id: Iaee07c992fce4aabee2f4eae32a2413d772fe945 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
@@ -26,9 +26,6 @@
|
|||||||
#include "androidqtversionfactory.h"
|
#include "androidqtversionfactory.h"
|
||||||
#include "androidqtversion.h"
|
#include "androidqtversion.h"
|
||||||
#include "androidconstants.h"
|
#include "androidconstants.h"
|
||||||
#include <qtsupport/qtsupportconstants.h>
|
|
||||||
#include <utils/qtcassert.h>
|
|
||||||
#include <proparser/profileevaluator.h>
|
|
||||||
|
|
||||||
namespace Android {
|
namespace Android {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
@@ -38,15 +35,12 @@ AndroidQtVersionFactory::AndroidQtVersionFactory()
|
|||||||
setQtVersionCreator([] { return new AndroidQtVersion; });
|
setQtVersionCreator([] { return new AndroidQtVersion; });
|
||||||
setSupportedType(Constants::ANDROIDQT);
|
setSupportedType(Constants::ANDROIDQT);
|
||||||
setPriority(90);
|
setPriority(90);
|
||||||
}
|
|
||||||
|
|
||||||
bool AndroidQtVersionFactory::canCreate(ProFileEvaluator *evaluator) const
|
setRestrictionChecker([](const SetupData &setup) {
|
||||||
{
|
return !setup.config.contains("android-no-sdk")
|
||||||
if (evaluator->values("CONFIG").contains("android-no-sdk"))
|
&& (setup.config.contains("android")
|
||||||
return false;
|
|| setup.platforms.contains("android"));
|
||||||
|
});
|
||||||
return evaluator->values("CONFIG").contains("android")
|
|
||||||
|| evaluator->value("QMAKE_PLATFORM") == "android";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // Internal
|
} // Internal
|
||||||
|
@@ -34,8 +34,6 @@ class AndroidQtVersionFactory : public QtSupport::QtVersionFactory
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
AndroidQtVersionFactory();
|
AndroidQtVersionFactory();
|
||||||
|
|
||||||
bool canCreate(ProFileEvaluator *evaluator) const override;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
@@ -26,8 +26,6 @@
|
|||||||
#include "iosqtversionfactory.h"
|
#include "iosqtversionfactory.h"
|
||||||
#include "iosqtversion.h"
|
#include "iosqtversion.h"
|
||||||
#include "iosconstants.h"
|
#include "iosconstants.h"
|
||||||
#include <qtsupport/qtsupportconstants.h>
|
|
||||||
#include <proparser/profileevaluator.h>
|
|
||||||
|
|
||||||
namespace Ios {
|
namespace Ios {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
@@ -37,11 +35,10 @@ IosQtVersionFactory::IosQtVersionFactory()
|
|||||||
setQtVersionCreator([] { return new IosQtVersion; });
|
setQtVersionCreator([] { return new IosQtVersion; });
|
||||||
setSupportedType(Constants::IOSQT);
|
setSupportedType(Constants::IOSQT);
|
||||||
setPriority(90);
|
setPriority(90);
|
||||||
}
|
|
||||||
|
|
||||||
bool IosQtVersionFactory::canCreate(ProFileEvaluator *evaluator) const
|
setRestrictionChecker([](const SetupData &setup) {
|
||||||
{
|
return setup.platforms.contains("ios");
|
||||||
return evaluator->values("QMAKE_PLATFORM").contains("ios");
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
} // Internal
|
} // Internal
|
||||||
|
@@ -34,8 +34,6 @@ class IosQtVersionFactory : public QtSupport::QtVersionFactory
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
IosQtVersionFactory();
|
IosQtVersionFactory();
|
||||||
|
|
||||||
bool canCreate(ProFileEvaluator *evaluator) const override;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
@@ -28,8 +28,6 @@
|
|||||||
#include "qnxconstants.h"
|
#include "qnxconstants.h"
|
||||||
#include "qnxqtversion.h"
|
#include "qnxqtversion.h"
|
||||||
|
|
||||||
#include <qtsupport/profilereader.h>
|
|
||||||
|
|
||||||
using namespace Qnx;
|
using namespace Qnx;
|
||||||
using namespace Qnx::Internal;
|
using namespace Qnx::Internal;
|
||||||
|
|
||||||
@@ -38,9 +36,6 @@ QnxQtVersionFactory::QnxQtVersionFactory()
|
|||||||
setQtVersionCreator([] { return new QnxQtVersion; });
|
setQtVersionCreator([] { return new QnxQtVersion; });
|
||||||
setSupportedType(Constants::QNX_QNX_QT);
|
setSupportedType(Constants::QNX_QNX_QT);
|
||||||
setPriority(50);
|
setPriority(50);
|
||||||
|
setRestrictionChecker([](const SetupData &setup) { return setup.isQnx; });
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QnxQtVersionFactory::canCreate(ProFileEvaluator *evaluator) const
|
|
||||||
{
|
|
||||||
return evaluator->contains("QNX_CPUDIR");
|
|
||||||
}
|
|
||||||
|
@@ -34,8 +34,6 @@ class QnxQtVersionFactory : public QtSupport::QtVersionFactory
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
QnxQtVersionFactory();
|
QnxQtVersionFactory();
|
||||||
|
|
||||||
bool canCreate(ProFileEvaluator *evaluator) const override;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
@@ -71,18 +71,6 @@ BaseQtVersion *QtVersionFactory::restore(const QString &type, const QVariantMap
|
|||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
|
|
||||||
BaseQtVersion *QtVersionFactory::create() const
|
|
||||||
{
|
|
||||||
QTC_ASSERT(m_creator, return nullptr);
|
|
||||||
return m_creator();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool QtVersionFactory::canCreate(ProFileEvaluator *evaluator) const
|
|
||||||
{
|
|
||||||
Q_UNUSED(evaluator);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
BaseQtVersion *QtVersionFactory::createQtVersionFromQMakePath(const Utils::FileName &qmakePath, bool isAutoDetected, const QString &autoDetectionSource, QString *error)
|
BaseQtVersion *QtVersionFactory::createQtVersionFromQMakePath(const Utils::FileName &qmakePath, bool isAutoDetected, const QString &autoDetectionSource, QString *error)
|
||||||
{
|
{
|
||||||
QHash<ProKey, ProString> versionInfo;
|
QHash<ProKey, ProString> versionInfo;
|
||||||
@@ -109,9 +97,15 @@ BaseQtVersion *QtVersionFactory::createQtVersionFromQMakePath(const Utils::FileN
|
|||||||
if (!fi.exists() || !fi.isExecutable() || !fi.isFile())
|
if (!fi.exists() || !fi.isExecutable() || !fi.isFile())
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
|
SetupData setup;
|
||||||
|
setup.config = evaluator.values("CONFIG");
|
||||||
|
setup.platforms = evaluator.values("QMAKE_PLATFORM"); // It's a list in general.
|
||||||
|
setup.isQnx = !evaluator.value("QNX_CPUDIR").isEmpty();
|
||||||
|
|
||||||
foreach (QtVersionFactory *factory, factories) {
|
foreach (QtVersionFactory *factory, factories) {
|
||||||
if (factory->canCreate(&evaluator)) {
|
if (!factory->m_restrictionChecker || factory->m_restrictionChecker(setup)) {
|
||||||
BaseQtVersion *ver = factory->create();
|
QTC_ASSERT(factory->m_creator, continue);
|
||||||
|
BaseQtVersion *ver = factory->m_creator();
|
||||||
QTC_ASSERT(ver, continue);
|
QTC_ASSERT(ver, continue);
|
||||||
ver->setupQmakePathAndId(qmakePath);
|
ver->setupQmakePathAndId(qmakePath);
|
||||||
ver->setAutoDetectionSource(autoDetectionSource);
|
ver->setAutoDetectionSource(autoDetectionSource);
|
||||||
@@ -133,6 +127,11 @@ void QtVersionFactory::setQtVersionCreator(const std::function<BaseQtVersion *()
|
|||||||
m_creator = creator;
|
m_creator = creator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QtVersionFactory::setRestrictionChecker(const std::function<bool(const SetupData &)> &checker)
|
||||||
|
{
|
||||||
|
m_restrictionChecker = checker;
|
||||||
|
}
|
||||||
|
|
||||||
void QtVersionFactory::setSupportedType(const QString &type)
|
void QtVersionFactory::setSupportedType(const QString &type)
|
||||||
{
|
{
|
||||||
m_supportedType = type;
|
m_supportedType = type;
|
||||||
|
@@ -29,10 +29,6 @@
|
|||||||
|
|
||||||
#include <QVariantMap>
|
#include <QVariantMap>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
|
||||||
class ProFileEvaluator;
|
|
||||||
QT_END_NAMESPACE
|
|
||||||
|
|
||||||
namespace Utils { class FileName; }
|
namespace Utils { class FileName; }
|
||||||
|
|
||||||
namespace QtSupport {
|
namespace QtSupport {
|
||||||
@@ -55,20 +51,26 @@ public:
|
|||||||
/// the desktop factory claims to handle all paths
|
/// the desktop factory claims to handle all paths
|
||||||
int priority() const { return m_priority; }
|
int priority() const { return m_priority; }
|
||||||
|
|
||||||
BaseQtVersion *create() const;
|
|
||||||
virtual bool canCreate(ProFileEvaluator *evaluator) const;
|
|
||||||
|
|
||||||
static BaseQtVersion *createQtVersionFromQMakePath(
|
static BaseQtVersion *createQtVersionFromQMakePath(
|
||||||
const Utils::FileName &qmakePath, bool isAutoDetected = false,
|
const Utils::FileName &qmakePath, bool isAutoDetected = false,
|
||||||
const QString &autoDetectionSource = QString(), QString *error = nullptr);
|
const QString &autoDetectionSource = QString(), QString *error = nullptr);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
struct SetupData
|
||||||
|
{
|
||||||
|
QStringList platforms;
|
||||||
|
QStringList config;
|
||||||
|
bool isQnx = false; // eeks...
|
||||||
|
};
|
||||||
|
|
||||||
void setQtVersionCreator(const std::function<BaseQtVersion *()> &creator);
|
void setQtVersionCreator(const std::function<BaseQtVersion *()> &creator);
|
||||||
|
void setRestrictionChecker(const std::function<bool(const SetupData &)> &checker);
|
||||||
void setSupportedType(const QString &type);
|
void setSupportedType(const QString &type);
|
||||||
void setPriority(int priority);
|
void setPriority(int priority);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::function<BaseQtVersion *()> m_creator;
|
std::function<BaseQtVersion *()> m_creator;
|
||||||
|
std::function<bool(const SetupData &)> m_restrictionChecker;
|
||||||
QString m_supportedType;
|
QString m_supportedType;
|
||||||
int m_priority = 0;
|
int m_priority = 0;
|
||||||
};
|
};
|
||||||
|
@@ -28,8 +28,6 @@
|
|||||||
#include "embeddedlinuxqtversion.h"
|
#include "embeddedlinuxqtversion.h"
|
||||||
#include "remotelinux_constants.h"
|
#include "remotelinux_constants.h"
|
||||||
|
|
||||||
#include <QFileInfo>
|
|
||||||
|
|
||||||
namespace RemoteLinux {
|
namespace RemoteLinux {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
@@ -38,12 +36,8 @@ EmbeddedLinuxQtVersionFactory::EmbeddedLinuxQtVersionFactory()
|
|||||||
setQtVersionCreator([] { return new EmbeddedLinuxQtVersion; });
|
setQtVersionCreator([] { return new EmbeddedLinuxQtVersion; });
|
||||||
setSupportedType(RemoteLinux::Constants::EMBEDDED_LINUX_QT);
|
setSupportedType(RemoteLinux::Constants::EMBEDDED_LINUX_QT);
|
||||||
setPriority(10);
|
setPriority(10);
|
||||||
}
|
|
||||||
|
|
||||||
bool EmbeddedLinuxQtVersionFactory::canCreate(ProFileEvaluator *evaluator) const
|
|
||||||
{
|
|
||||||
Q_UNUSED(evaluator);
|
|
||||||
|
|
||||||
|
setRestrictionChecker([](const SetupData &) {
|
||||||
EmbeddedLinuxQtVersion tempVersion;
|
EmbeddedLinuxQtVersion tempVersion;
|
||||||
QList<ProjectExplorer::Abi> abis = tempVersion.qtAbis();
|
QList<ProjectExplorer::Abi> abis = tempVersion.qtAbis();
|
||||||
|
|
||||||
@@ -51,6 +45,7 @@ bool EmbeddedLinuxQtVersionFactory::canCreate(ProFileEvaluator *evaluator) const
|
|||||||
return abis.count() == 1
|
return abis.count() == 1
|
||||||
&& abis.at(0).os() == ProjectExplorer::Abi::LinuxOS
|
&& abis.at(0).os() == ProjectExplorer::Abi::LinuxOS
|
||||||
&& !ProjectExplorer::Abi::hostAbi().isCompatibleWith(abis.at(0));
|
&& !ProjectExplorer::Abi::hostAbi().isCompatibleWith(abis.at(0));
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
@@ -34,8 +34,6 @@ class EmbeddedLinuxQtVersionFactory : public QtSupport::QtVersionFactory
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
EmbeddedLinuxQtVersionFactory();
|
EmbeddedLinuxQtVersionFactory();
|
||||||
|
|
||||||
bool canCreate(ProFileEvaluator *evaluator) const override;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // Internal
|
} // Internal
|
||||||
|
@@ -28,8 +28,6 @@
|
|||||||
#include "winrtconstants.h"
|
#include "winrtconstants.h"
|
||||||
#include "winrtphoneqtversion.h"
|
#include "winrtphoneqtversion.h"
|
||||||
|
|
||||||
#include <proparser/profileevaluator.h>
|
|
||||||
|
|
||||||
namespace WinRt {
|
namespace WinRt {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
@@ -37,27 +35,17 @@ WinRtQtVersionFactory::WinRtQtVersionFactory()
|
|||||||
{
|
{
|
||||||
setQtVersionCreator([] { return new WinRtQtVersion; });
|
setQtVersionCreator([] { return new WinRtQtVersion; });
|
||||||
setSupportedType(Constants::WINRT_WINRTQT);
|
setSupportedType(Constants::WINRT_WINRTQT);
|
||||||
|
setRestrictionChecker([](const SetupData &setup) { return setup.platforms.contains("winrt"); });
|
||||||
setPriority(10);
|
setPriority(10);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool WinRtQtVersionFactory::canCreate(ProFileEvaluator *evaluator) const
|
|
||||||
{
|
|
||||||
return evaluator->values("QMAKE_PLATFORM").contains("winrt");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
WinRtPhoneQtVersionFactory::WinRtPhoneQtVersionFactory()
|
WinRtPhoneQtVersionFactory::WinRtPhoneQtVersionFactory()
|
||||||
{
|
{
|
||||||
setQtVersionCreator([] { return new WinRtPhoneQtVersion; });
|
setQtVersionCreator([] { return new WinRtPhoneQtVersion; });
|
||||||
setSupportedType(Constants::WINRT_WINPHONEQT);
|
setSupportedType(Constants::WINRT_WINPHONEQT);
|
||||||
|
setRestrictionChecker([](const SetupData &setup) { return setup.platforms.contains("winphone"); });
|
||||||
setPriority(10);
|
setPriority(10);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool WinRtPhoneQtVersionFactory::canCreate(ProFileEvaluator *evaluator) const
|
|
||||||
{
|
|
||||||
return evaluator->values("QMAKE_PLATFORM").contains("winphone");
|
|
||||||
}
|
|
||||||
|
|
||||||
} // Internal
|
} // Internal
|
||||||
} // WinRt
|
} // WinRt
|
||||||
|
@@ -34,16 +34,12 @@ class WinRtQtVersionFactory : public QtSupport::QtVersionFactory
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
WinRtQtVersionFactory();
|
WinRtQtVersionFactory();
|
||||||
|
|
||||||
bool canCreate(ProFileEvaluator *evaluator) const override;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class WinRtPhoneQtVersionFactory : public QtSupport::QtVersionFactory
|
class WinRtPhoneQtVersionFactory : public QtSupport::QtVersionFactory
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
WinRtPhoneQtVersionFactory();
|
WinRtPhoneQtVersionFactory();
|
||||||
|
|
||||||
bool canCreate(ProFileEvaluator *evaluator) const override;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // Internal
|
} // Internal
|
||||||
|
Reference in New Issue
Block a user