summaryrefslogtreecommitdiff
path: root/src/plugins/qnx/qnxconfiguration.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/qnx/qnxconfiguration.cpp')
-rw-r--r--src/plugins/qnx/qnxconfiguration.cpp90
1 files changed, 59 insertions, 31 deletions
diff --git a/src/plugins/qnx/qnxconfiguration.cpp b/src/plugins/qnx/qnxconfiguration.cpp
index 48071784fa..4a55f7118f 100644
--- a/src/plugins/qnx/qnxconfiguration.cpp
+++ b/src/plugins/qnx/qnxconfiguration.cpp
@@ -67,6 +67,10 @@ const QLatin1String QNXVersionKey("QNXVersion");
// For backward compatibility
const QLatin1String SdpEnvFileKey("NDKEnvFile");
+const QLatin1String QNXConfiguration("QNX_CONFIGURATION");
+const QLatin1String QNXTarget("QNX_TARGET");
+const QLatin1String QNXHost("QNX_HOST");
+
QnxConfiguration::QnxConfiguration() = default;
QnxConfiguration::QnxConfiguration(const FilePath &sdpEnvFile)
@@ -244,16 +248,18 @@ QList<ToolChain *> QnxConfiguration::autoDetect(const QList<ToolChain *> &alread
void QnxConfiguration::createTools(const Target &target)
{
- QnxToolChain *tc = createToolChain(target);
+ QnxToolChainMap toolchainMap = createToolChain(target);
QVariant debuggerId = createDebugger(target);
- createKit(target, tc, debuggerId);
+ createKit(target, toolchainMap, debuggerId);
}
QVariant QnxConfiguration::createDebugger(const Target &target)
{
+ Utils::Environment sysEnv = Utils::Environment::systemEnvironment();
+ sysEnv.modify(qnxEnvironmentItems());
Debugger::DebuggerItem debugger;
debugger.setCommand(target.m_debuggerPath);
- debugger.reinitializeFromFile();
+ debugger.reinitializeFromFile(sysEnv);
debugger.setAutoDetected(true);
debugger.setUnexpandedDisplayName(
QCoreApplication::translate(
@@ -264,23 +270,31 @@ QVariant QnxConfiguration::createDebugger(const Target &target)
return Debugger::DebuggerItemManager::registerDebugger(debugger);
}
-QnxToolChain *QnxConfiguration::createToolChain(const Target &target)
+QnxConfiguration::QnxToolChainMap QnxConfiguration::createToolChain(const Target &target)
{
- auto toolChain = new QnxToolChain;
- toolChain->setDetection(ToolChain::AutoDetection);
- toolChain->setLanguage(ProjectExplorer::Constants::CXX_LANGUAGE_ID);
- toolChain->setTargetAbi(target.m_abi);
- toolChain->setDisplayName(
- QCoreApplication::translate(
- "Qnx::Internal::QnxConfiguration",
- "QCC for %1 (%2)")
- .arg(displayName())
- .arg(target.shortDescription()));
- toolChain->setSdpPath(sdpPath().toString());
- toolChain->setCpuDir(target.cpuDir());
- toolChain->resetToolChain(qccCompilerPath());
- ToolChainManager::registerToolChain(toolChain);
- return toolChain;
+ QnxToolChainMap toolChainMap;
+
+ for (auto language : { ProjectExplorer::Constants::C_LANGUAGE_ID,
+ ProjectExplorer::Constants::CXX_LANGUAGE_ID}) {
+ auto toolChain = new QnxToolChain;
+ toolChain->setDetection(ToolChain::AutoDetection);
+ toolChain->setLanguage(language);
+ toolChain->setTargetAbi(target.m_abi);
+ toolChain->setDisplayName(
+ QCoreApplication::translate(
+ "Qnx::Internal::QnxConfiguration",
+ "QCC for %1 (%2)")
+ .arg(displayName())
+ .arg(target.shortDescription()));
+ toolChain->setSdpPath(sdpPath().toString());
+ toolChain->setCpuDir(target.cpuDir());
+ toolChain->resetToolChain(qccCompilerPath());
+ ToolChainManager::registerToolChain(toolChain);
+
+ toolChainMap.insert(std::make_pair(language, toolChain));
+ }
+
+ return toolChainMap;
}
QList<ToolChain *> QnxConfiguration::findToolChain(const QList<ToolChain *> &alreadyKnown,
@@ -293,7 +307,7 @@ QList<ToolChain *> QnxConfiguration::findToolChain(const QList<ToolChain *> &alr
});
}
-void QnxConfiguration::createKit(const Target &target, QnxToolChain *toolChain,
+void QnxConfiguration::createKit(const Target &target, const QnxToolChainMap &toolChainMap,
const QVariant &debugger)
{
QnxQtVersion *qnxQt = qnxQtVersion(target);
@@ -303,8 +317,8 @@ void QnxConfiguration::createKit(const Target &target, QnxToolChain *toolChain,
const auto init = [&](Kit *k) {
QtKitAspect::setQtVersion(k, qnxQt);
- ToolChainKitAspect::setToolChain(k, toolChain);
- ToolChainKitAspect::clearToolChain(k, ProjectExplorer::Constants::C_LANGUAGE_ID);
+ ToolChainKitAspect::setToolChain(k, toolChainMap.at(ProjectExplorer::Constants::C_LANGUAGE_ID));
+ ToolChainKitAspect::setToolChain(k, toolChainMap.at(ProjectExplorer::Constants::CXX_LANGUAGE_ID));
if (debugger.isValid())
DebuggerKitAspect::setDebugger(k, debugger);
@@ -328,6 +342,8 @@ void QnxConfiguration::createKit(const Target &target, QnxToolChain *toolChain,
k->setSticky(SysRootKitAspect::id(), true);
k->setSticky(DebuggerKitAspect::id(), true);
k->setSticky(QmakeProjectManager::Constants::KIT_INFORMATION_ID, true);
+
+ EnvironmentKitAspect::setEnvironmentChanges(k, qnxEnvironmentItems());
};
// add kit with device and qt version not sticky
@@ -361,8 +377,8 @@ void QnxConfiguration::readInformation()
return;
foreach (const ConfigInstallInformation &info, installInfoList) {
- if (m_qnxHost == FilePath::fromString(info.host)
- && m_qnxTarget == FilePath::fromString(info.target)) {
+ if (m_qnxHost == FilePath::fromString(info.host).canonicalPath()
+ && m_qnxTarget == FilePath::fromString(info.target).canonicalPath()) {
m_configName = info.name;
setVersion(QnxVersionNumber(info.version));
break;
@@ -376,12 +392,12 @@ void QnxConfiguration::setDefaultConfiguration(const Utils::FilePath &envScript)
m_envFile = envScript;
m_qnxEnv = QnxUtils::qnxEnvironmentFromEnvFile(m_envFile.toString());
foreach (const EnvironmentItem &item, m_qnxEnv) {
- if (item.name == QLatin1String("QNX_CONFIGURATION"))
- m_qnxConfiguration = FilePath::fromString(item.value);
- else if (item.name == QLatin1String("QNX_TARGET"))
- m_qnxTarget = FilePath::fromString(item.value);
- else if (item.name == QLatin1String("QNX_HOST"))
- m_qnxHost = FilePath::fromString(item.value);
+ if (item.name == QNXConfiguration)
+ m_qnxConfiguration = FilePath::fromString(item.value).canonicalPath();
+ else if (item.name == QNXTarget)
+ m_qnxTarget = FilePath::fromString(item.value).canonicalPath();
+ else if (item.name == QNXHost)
+ m_qnxHost = FilePath::fromString(item.value).canonicalPath();
}
FilePath qccPath = FilePath::fromString(HostOsInfo::withExecutableSuffix(
@@ -401,6 +417,16 @@ void QnxConfiguration::setDefaultConfiguration(const Utils::FilePath &envScript)
});
}
+EnvironmentItems QnxConfiguration::qnxEnvironmentItems() const
+{
+ Utils::EnvironmentItems envList;
+ envList.push_back(EnvironmentItem(QNXConfiguration, m_qnxConfiguration.toString()));
+ envList.push_back(EnvironmentItem(QNXTarget, m_qnxTarget.toString()));
+ envList.push_back(EnvironmentItem(QNXHost, m_qnxHost.toString()));
+
+ return envList;
+}
+
const QnxConfiguration::Target *QnxConfiguration::findTargetByDebuggerPath(
const FilePath &path) const
{
@@ -423,12 +449,14 @@ void QnxConfiguration::assignDebuggersToTargets()
QStringList debuggerNames = hostUsrBinDir.entryList(
QStringList(HostOsInfo::withExecutableSuffix(QLatin1String("nto*-gdb"))),
QDir::Files);
+ Utils::Environment sysEnv = Utils::Environment::systemEnvironment();
+ sysEnv.modify(qnxEnvironmentItems());
foreach (const QString &debuggerName, debuggerNames) {
const FilePath debuggerPath = FilePath::fromString(hostUsrBinDir.path())
.pathAppended(debuggerName);
DebuggerItem item;
item.setCommand(debuggerPath);
- item.reinitializeFromFile();
+ item.reinitializeFromFile(sysEnv);
bool found = false;
foreach (const Abi &abi, item.abis()) {
for (Target &target : m_targets) {