forked from qt-creator/qt-creator
Qnx: Refactor BlackBerryApiLevelConfiguration class
Add a QnxBaseConfiguration class as base class for the BlackBerryApiLevelConfiguration and the new QnxConfiguarion classes. The split of the BlackBerryApiLevelConfiguration logic makes the code more flexible to add support for the user's SDP/Qnx configurations. Upcoming patches adding support for the SDP/Qnx configuration will depend on this change. Change-Id: I44258d9a9f0dc44bb196f4178974ad04d4caf70a Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
This commit is contained in:
committed by
Mehdi Fekari
parent
ec94e042d9
commit
4e78a95263
@@ -67,7 +67,6 @@ using namespace Debugger;
|
||||
namespace Qnx {
|
||||
namespace Internal {
|
||||
|
||||
const QLatin1String NDKEnvFileKey("NDKEnvFile");
|
||||
const QLatin1String NDKPathKey("NDKPath");
|
||||
const QLatin1String NDKDisplayNameKey("NDKDisplayName");
|
||||
const QLatin1String NDKTargetKey("NDKTarget");
|
||||
@@ -81,16 +80,13 @@ bool BlackBerryApiLevelConfiguration::m_fakeConfig = false;
|
||||
#endif
|
||||
|
||||
BlackBerryApiLevelConfiguration::BlackBerryApiLevelConfiguration(const NdkInstallInformation &ndkInstallInfo)
|
||||
: QnxBaseConfiguration(FileName::fromString(
|
||||
QnxUtils::envFilePath(ndkInstallInfo.path, ndkInstallInfo.version)))
|
||||
{
|
||||
QString envFilePath = QnxUtils::envFilePath(ndkInstallInfo.path, ndkInstallInfo.version);
|
||||
QTC_ASSERT(!envFilePath.isEmpty(), return);
|
||||
m_ndkEnvFile = Utils::FileName::fromString(envFilePath);
|
||||
m_displayName = ndkInstallInfo.name;
|
||||
m_qnxEnv = QnxUtils::qnxEnvironmentFromNdkFile(m_ndkEnvFile.toString());
|
||||
QString sep = QString::fromLatin1("/qnx6");
|
||||
// The QNX_TARGET value is using Unix-like separator on all platforms.
|
||||
m_targetName = ndkInstallInfo.target.split(sep).first().split(QLatin1Char('/')).last();
|
||||
m_qnxHost = ndkInstallInfo.host;
|
||||
m_sysRoot = FileName::fromString(ndkInstallInfo.target);
|
||||
m_version = BlackBerryVersionNumber(ndkInstallInfo.version);
|
||||
m_autoDetectionSource = Utils::FileName::fromString(ndkInstallInfo.installationXmlFilePath);
|
||||
@@ -98,32 +94,17 @@ BlackBerryApiLevelConfiguration::BlackBerryApiLevelConfiguration(const NdkInstal
|
||||
}
|
||||
|
||||
BlackBerryApiLevelConfiguration::BlackBerryApiLevelConfiguration(const FileName &ndkEnvFile)
|
||||
: m_autoDetectionSource(Utils::FileName())
|
||||
: QnxBaseConfiguration(ndkEnvFile)
|
||||
{
|
||||
QTC_ASSERT(!QFileInfo(ndkEnvFile.toString()).isDir(), return);
|
||||
m_ndkEnvFile = ndkEnvFile;
|
||||
QString ndkPath = m_ndkEnvFile.parentDir().toString();
|
||||
m_displayName = ndkPath.split(QDir::separator()).last();
|
||||
m_qnxEnv = QnxUtils::qnxEnvironmentFromNdkFile(m_ndkEnvFile.toString());
|
||||
|
||||
QString ndkTarget;
|
||||
foreach (const Utils::EnvironmentItem &item, m_qnxEnv) {
|
||||
if (item.name == QLatin1String("QNX_TARGET"))
|
||||
ndkTarget = item.value;
|
||||
|
||||
else if (item.name == QLatin1String("QNX_HOST"))
|
||||
m_qnxHost = item.value;
|
||||
|
||||
}
|
||||
|
||||
m_displayName = ndkPath().split(QDir::separator()).last();
|
||||
QString ndkTarget = qnxTarget().toString();
|
||||
// The QNX_TARGET value is using Unix-like separator on all platforms.
|
||||
QString sep = QString::fromLatin1("/qnx6");
|
||||
m_targetName = ndkTarget.split(sep).first().split(QLatin1Char('/')).last();
|
||||
|
||||
if (QDir(ndkTarget).exists())
|
||||
m_sysRoot = FileName::fromString(ndkTarget);
|
||||
|
||||
m_version = BlackBerryVersionNumber::fromNdkEnvFileName(QFileInfo(m_ndkEnvFile.toString()).baseName());
|
||||
m_version = BlackBerryVersionNumber::fromNdkEnvFileName(QFileInfo(envFile().toString()).baseName());
|
||||
if (m_version.isEmpty())
|
||||
m_version = BlackBerryVersionNumber::fromTargetName(m_targetName);
|
||||
|
||||
@@ -131,16 +112,12 @@ BlackBerryApiLevelConfiguration::BlackBerryApiLevelConfiguration(const FileName
|
||||
}
|
||||
|
||||
BlackBerryApiLevelConfiguration::BlackBerryApiLevelConfiguration(const QVariantMap &data)
|
||||
: QnxBaseConfiguration(data)
|
||||
{
|
||||
QString envFilePath = data.value(NDKEnvFileKey).toString();
|
||||
QTC_ASSERT(!envFilePath.isEmpty(), return);
|
||||
m_ndkEnvFile = Utils::FileName::fromString(envFilePath);
|
||||
m_displayName = data.value(NDKDisplayNameKey).toString();
|
||||
m_qnxEnv = QnxUtils::qnxEnvironmentFromNdkFile(m_ndkEnvFile.toString());
|
||||
QString sep = QString::fromLatin1("/qnx6");
|
||||
// The QNX_TARGET value is using Unix-like separator on all platforms.
|
||||
m_targetName = data.value(NDKTargetKey).toString().split(sep).first().split(QLatin1Char('/')).last();
|
||||
m_qnxHost = data.value(NDKHostKey).toString();
|
||||
m_sysRoot = FileName::fromString(data.value(NDKTargetKey).toString());
|
||||
m_version = BlackBerryVersionNumber(data.value(NDKVersionKey).toString());
|
||||
if (data.value(QLatin1String(NDKAutoDetectedKey)).toBool())
|
||||
@@ -151,31 +128,19 @@ BlackBerryApiLevelConfiguration::BlackBerryApiLevelConfiguration(const QVariantM
|
||||
|
||||
void BlackBerryApiLevelConfiguration::ctor()
|
||||
{
|
||||
FileName qmake4Path = QnxUtils::executableWithExtension(FileName::fromString(m_qnxHost + QLatin1String("/usr/bin/qmake")));
|
||||
FileName qmake5Path = QnxUtils::executableWithExtension(FileName::fromString(m_qnxHost + QLatin1String("/usr/bin/qt5/qmake")));
|
||||
FileName gccPath = QnxUtils::executableWithExtension(FileName::fromString(m_qnxHost + QLatin1String("/usr/bin/qcc")));
|
||||
FileName deviceGdbPath = QnxUtils::executableWithExtension(FileName::fromString(m_qnxHost + QLatin1String("/usr/bin/ntoarm-gdb")));
|
||||
FileName simulatorGdbPath = QnxUtils::executableWithExtension(FileName::fromString(m_qnxHost + QLatin1String("/usr/bin/ntox86-gdb")));
|
||||
|
||||
QString host = qnxHost().toString();
|
||||
FileName qmake4Path = QnxUtils::executableWithExtension(FileName::fromString(host + QLatin1String("/usr/bin/qmake")));
|
||||
FileName qmake5Path = QnxUtils::executableWithExtension(FileName::fromString(host + QLatin1String("/usr/bin/qt5/qmake")));
|
||||
if (qmake4Path.toFileInfo().exists())
|
||||
m_qmake4BinaryFile = qmake4Path;
|
||||
|
||||
if (qmake5Path.toFileInfo().exists())
|
||||
m_qmake5BinaryFile = qmake5Path;
|
||||
|
||||
if (gccPath.toFileInfo().exists())
|
||||
m_gccCompiler = gccPath;
|
||||
|
||||
if (deviceGdbPath.toFileInfo().exists())
|
||||
m_deviceDebugger = deviceGdbPath;
|
||||
|
||||
if (simulatorGdbPath.toFileInfo().exists())
|
||||
m_simulatorDebugger = simulatorGdbPath;
|
||||
}
|
||||
|
||||
QString BlackBerryApiLevelConfiguration::ndkPath() const
|
||||
{
|
||||
return m_ndkEnvFile.parentDir().toString();
|
||||
return envFile().parentDir().toString();
|
||||
}
|
||||
|
||||
QString BlackBerryApiLevelConfiguration::displayName() const
|
||||
@@ -188,11 +153,6 @@ QString BlackBerryApiLevelConfiguration::targetName() const
|
||||
return m_targetName;
|
||||
}
|
||||
|
||||
QString BlackBerryApiLevelConfiguration::qnxHost() const
|
||||
{
|
||||
return m_qnxHost;
|
||||
}
|
||||
|
||||
BlackBerryVersionNumber BlackBerryApiLevelConfiguration::version() const
|
||||
{
|
||||
return m_version;
|
||||
@@ -212,7 +172,7 @@ bool BlackBerryApiLevelConfiguration::isActive() const
|
||||
{
|
||||
foreach (Kit *kit, KitManager::kits()) {
|
||||
if (kit->isAutoDetected() &&
|
||||
kit->autoDetectionSource() == m_ndkEnvFile.toString())
|
||||
kit->autoDetectionSource() == envFile().toString())
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -226,17 +186,13 @@ bool BlackBerryApiLevelConfiguration::isValid() const
|
||||
return true;
|
||||
#endif
|
||||
|
||||
return ((!m_qmake4BinaryFile.isEmpty() || !m_qmake5BinaryFile.isEmpty()) && !m_gccCompiler.isEmpty()
|
||||
&& !m_deviceDebugger.isEmpty() && !m_simulatorDebugger.isEmpty()
|
||||
&& m_ndkEnvFile.toFileInfo().exists() && (m_autoDetectionSource.isEmpty() ||
|
||||
m_autoDetectionSource.toFileInfo().exists())
|
||||
&& m_sysRoot.toFileInfo().exists());
|
||||
return QnxBaseConfiguration::isValid() &&
|
||||
((!m_qmake4BinaryFile.isEmpty() || !m_qmake5BinaryFile.isEmpty())
|
||||
&& (m_autoDetectionSource.isEmpty() ||
|
||||
m_autoDetectionSource.toFileInfo().exists())
|
||||
&& (!m_sysRoot.isEmpty() && m_sysRoot.toFileInfo().exists()));
|
||||
}
|
||||
|
||||
FileName BlackBerryApiLevelConfiguration::ndkEnvFile() const
|
||||
{
|
||||
return m_ndkEnvFile;
|
||||
}
|
||||
|
||||
FileName BlackBerryApiLevelConfiguration::qmake4BinaryFile() const
|
||||
{
|
||||
@@ -248,41 +204,19 @@ FileName BlackBerryApiLevelConfiguration::qmake5BinaryFile() const
|
||||
return m_qmake5BinaryFile;
|
||||
}
|
||||
|
||||
FileName BlackBerryApiLevelConfiguration::gccCompiler() const
|
||||
{
|
||||
return m_gccCompiler;
|
||||
}
|
||||
|
||||
FileName BlackBerryApiLevelConfiguration::deviceDebuger() const
|
||||
{
|
||||
return m_deviceDebugger;
|
||||
}
|
||||
|
||||
FileName BlackBerryApiLevelConfiguration::simulatorDebuger() const
|
||||
{
|
||||
return m_simulatorDebugger;
|
||||
}
|
||||
|
||||
FileName BlackBerryApiLevelConfiguration::sysRoot() const
|
||||
{
|
||||
return m_sysRoot;
|
||||
}
|
||||
|
||||
QList<Utils::EnvironmentItem> BlackBerryApiLevelConfiguration::qnxEnv() const
|
||||
{
|
||||
return m_qnxEnv;
|
||||
}
|
||||
|
||||
QVariantMap BlackBerryApiLevelConfiguration::toMap() const
|
||||
{
|
||||
QVariantMap data;
|
||||
QVariantMap data = QnxBaseConfiguration::toMap();
|
||||
data.insert(QLatin1String(Qnx::Constants::QNX_BB_KEY_CONFIGURATION_TYPE),
|
||||
QLatin1String(Qnx::Constants::QNX_BB_APILEVEL_TYPE));
|
||||
data.insert(QLatin1String(NDKEnvFileKey), m_ndkEnvFile.toString());
|
||||
data.insert(QLatin1String(NDKDisplayNameKey), m_displayName);
|
||||
data.insert(QLatin1String(NDKPathKey), ndkPath());
|
||||
data.insert(QLatin1String(NDKTargetKey), m_sysRoot.toString());
|
||||
data.insert(QLatin1String(NDKHostKey), m_qnxHost);
|
||||
data.insert(QLatin1String(NDKVersionKey), m_version.toString());
|
||||
data.insert(QLatin1String(NDKAutoDetectionSourceKey), m_autoDetectionSource.toString());
|
||||
data.insert(QLatin1String(NDKAutoDetectedKey), isAutoDetected());
|
||||
@@ -293,38 +227,12 @@ QnxAbstractQtVersion *BlackBerryApiLevelConfiguration::createQtVersion(
|
||||
const FileName &qmakePath, Qnx::QnxArchitecture arch, const QString &versionName)
|
||||
{
|
||||
QnxAbstractQtVersion *version = new BlackBerryQtVersion(
|
||||
arch, qmakePath, true, QString(), m_ndkEnvFile.toString());
|
||||
arch, qmakePath, true, QString(), envFile().toString());
|
||||
version->setDisplayName(tr("Qt %1 for %2").arg(version->qtVersionString(), versionName));
|
||||
QtVersionManager::addVersion(version);
|
||||
return version;
|
||||
}
|
||||
|
||||
QnxToolChain *BlackBerryApiLevelConfiguration::createToolChain(
|
||||
ProjectExplorer::Abi abi, const QString &versionName)
|
||||
{
|
||||
QnxToolChain* toolChain = new QnxToolChain(ToolChain::AutoDetection);
|
||||
toolChain->setDisplayName(tr("QCC for %1").arg(versionName));
|
||||
toolChain->setCompilerCommand(m_gccCompiler);
|
||||
toolChain->setNdkPath(ndkPath());
|
||||
if (abi.isValid())
|
||||
toolChain->setTargetAbi(abi);
|
||||
ToolChainManager::registerToolChain(toolChain);
|
||||
return toolChain;
|
||||
}
|
||||
|
||||
QVariant BlackBerryApiLevelConfiguration::createDebuggerItem(
|
||||
QList<ProjectExplorer::Abi> abis, Qnx::QnxArchitecture arch, const QString &versionName)
|
||||
{
|
||||
Utils::FileName command = arch == X86 ? m_simulatorDebugger : m_deviceDebugger;
|
||||
DebuggerItem debugger;
|
||||
debugger.setCommand(command);
|
||||
debugger.setEngineType(GdbEngineType);
|
||||
debugger.setAutoDetected(true);
|
||||
debugger.setAbis(abis);
|
||||
debugger.setDisplayName(tr("Debugger for %1").arg(versionName));
|
||||
return DebuggerItemManager::registerDebugger(debugger);
|
||||
}
|
||||
|
||||
Kit *BlackBerryApiLevelConfiguration::createKit(
|
||||
QnxAbstractQtVersion *version, QnxToolChain *toolChain, const QVariant &debuggerItemId)
|
||||
{
|
||||
@@ -354,7 +262,7 @@ Kit *BlackBerryApiLevelConfiguration::createKit(
|
||||
kit->setIconPath(FileName::fromString(QLatin1String(Constants::QNX_BB_CATEGORY_ICON)));
|
||||
|
||||
kit->setAutoDetected(true);
|
||||
kit->setAutoDetectionSource(m_ndkEnvFile.toString());
|
||||
kit->setAutoDetectionSource(envFile().toString());
|
||||
kit->setMutable(DeviceKitInformation::id(), true);
|
||||
|
||||
kit->setSticky(QtKitInformation::id(), true);
|
||||
@@ -368,25 +276,30 @@ Kit *BlackBerryApiLevelConfiguration::createKit(
|
||||
return kit;
|
||||
}
|
||||
|
||||
QStringList BlackBerryApiLevelConfiguration::validationErrors() const
|
||||
{
|
||||
QStringList errorStrings = QnxBaseConfiguration::validationErrors();
|
||||
if (m_qmake4BinaryFile.isEmpty() && m_qmake5BinaryFile.isEmpty())
|
||||
errorStrings << tr("- No Qt version found.");
|
||||
|
||||
if (!m_autoDetectionSource.isEmpty() && !m_autoDetectionSource.toFileInfo().exists())
|
||||
errorStrings << tr("- No auto detection source found.");
|
||||
|
||||
if (m_sysRoot.isEmpty() && m_sysRoot.toFileInfo().exists())
|
||||
errorStrings << tr("- No sysroot found.");
|
||||
|
||||
|
||||
return errorStrings;
|
||||
}
|
||||
|
||||
bool BlackBerryApiLevelConfiguration::activate()
|
||||
{
|
||||
if (!isValid()) {
|
||||
if (!m_autoDetectionSource.isEmpty())
|
||||
return false;
|
||||
|
||||
QString errorMessage = tr("The following errors occurred while activating target: %1").arg(m_targetName);
|
||||
if (m_qmake4BinaryFile.isEmpty() && m_qmake5BinaryFile.isEmpty())
|
||||
errorMessage += QLatin1Char('\n') + tr("- No Qt version found.");
|
||||
|
||||
if (m_gccCompiler.isEmpty())
|
||||
errorMessage += QLatin1Char('\n') + tr("- No GCC compiler found.");
|
||||
|
||||
if (m_deviceDebugger.isEmpty())
|
||||
errorMessage += QLatin1Char('\n') + tr("- No GDB debugger found for BB10 Device.");
|
||||
|
||||
if (!m_simulatorDebugger.isEmpty())
|
||||
errorMessage += QLatin1Char('\n') + tr("- No GDB debugger found for BB10 Simulator.");
|
||||
|
||||
QString errorMessage = tr("The following errors occurred while activating target: %1\n").arg(m_targetName);
|
||||
errorMessage.append(validationErrors().join(QLatin1String("\n")));
|
||||
QMessageBox::warning(Core::ICore::mainWindow(), tr("Cannot Set up BB10 Configuration"),
|
||||
errorMessage, QMessageBox::Ok);
|
||||
return false;
|
||||
@@ -425,25 +338,29 @@ bool BlackBerryApiLevelConfiguration::activate()
|
||||
x86Abis << abi;
|
||||
}
|
||||
|
||||
// create toolchains
|
||||
QnxToolChain *armToolChain = createToolChain(
|
||||
!armAbis.isEmpty() ? armAbis.first() : Abi(), armVersionName);
|
||||
QnxToolChain *x86ToolChain = createToolChain(
|
||||
!x86Abis.isEmpty() ? x86Abis.first() : Abi(), x86VersionName);
|
||||
// Create tool chains
|
||||
QnxToolChain *armvle7ToolChain = createToolChain(QnxArchitecture::ArmLeV7,
|
||||
tr("QCC for %1").arg(armVersionName),
|
||||
ndkPath());
|
||||
QnxToolChain *x86ToolChain = createToolChain(QnxArchitecture::X86,
|
||||
tr("QCC for %1").arg(x86VersionName),
|
||||
ndkPath());
|
||||
// Create debuggers
|
||||
QVariant armDebuggerId = createDebuggerItem(QnxArchitecture::ArmLeV7,
|
||||
tr("Debugger for %1").arg(armVersionName));
|
||||
|
||||
// create debuggers
|
||||
QVariant armDebuggerItemId = createDebuggerItem(armAbis, Qnx::ArmLeV7, armVersionName);
|
||||
QVariant x86DebuggerItemId = createDebuggerItem(x86Abis, Qnx::X86, x86VersionName);
|
||||
QVariant x86DebuggerId = createDebuggerItem(QnxArchitecture::X86,
|
||||
tr("Debugger for %1").arg(x86VersionName));
|
||||
|
||||
// create kits
|
||||
if (qt4ArmVersion)
|
||||
createKit(qt4ArmVersion, armToolChain, armDebuggerItemId);
|
||||
createKit(qt4ArmVersion, armvle7ToolChain, armDebuggerId);
|
||||
if (qt4X86Version)
|
||||
createKit(qt4X86Version, x86ToolChain, x86DebuggerItemId);
|
||||
createKit(qt4X86Version, x86ToolChain, x86DebuggerId);
|
||||
if (qt5ArmVersion)
|
||||
createKit(qt5ArmVersion, armToolChain, armDebuggerItemId);
|
||||
createKit(qt5ArmVersion, armvle7ToolChain, armDebuggerId);
|
||||
if (qt5X86Version)
|
||||
createKit(qt5X86Version, x86ToolChain, x86DebuggerItemId);
|
||||
createKit(qt5X86Version, x86ToolChain, x86DebuggerId);
|
||||
|
||||
BlackBerryConfigurationManager::instance()->emitSettingsChanged();
|
||||
|
||||
@@ -458,7 +375,7 @@ void BlackBerryApiLevelConfiguration::deactivate()
|
||||
|
||||
foreach (Kit *kit, KitManager::kits()) {
|
||||
if (kit->isAutoDetected() &&
|
||||
kit->autoDetectionSource() == ndkEnvFile().toString()) {
|
||||
kit->autoDetectionSource() == envFile().toString()) {
|
||||
BaseQtVersion *version = QtKitInformation::qtVersion(kit);
|
||||
ToolChain *toolChain = ToolChainKitInformation::toolChain(kit);
|
||||
const DebuggerItem *debugger = DebuggerKitInformation::debugger(kit);
|
||||
@@ -498,6 +415,7 @@ bool BlackBerryApiLevelConfiguration::fakeConfig()
|
||||
{
|
||||
return m_fakeConfig;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
} // namespace Internal
|
||||
|
||||
Reference in New Issue
Block a user