diff options
Diffstat (limited to 'src/plugins/qnx/qnxconfiguration.cpp')
-rw-r--r-- | src/plugins/qnx/qnxconfiguration.cpp | 90 |
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) { |