From 5fb7e6f1f7d5e09bf6fb2ee168a1de6d0bb8f4b3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tobias=20N=C3=A4tterlund?= <tobias.naetterlund.qnx@kdab.com>
Date: Fri, 18 Oct 2013 16:08:56 +0200
Subject: [PATCH] QNX: Use slog2info on pure QNX devices for debug output

If available, slog2info should be used even for pure QNX devices
to get hold of the debug output.

Task-number: QTCREATORBUG-10442

Change-Id: If85855e94803a4b8648e84c0295bfdd2271e8d76
Reviewed-by: Nicolas Arnaud-Cormos <nicolas@kdab.com>
---
 src/plugins/qnx/qnxruncontrol.cpp | 26 ++++++++++++++++++++++++--
 src/plugins/qnx/qnxruncontrol.h   |  7 +++++++
 src/plugins/qnx/slog2inforunner.h |  4 +++-
 3 files changed, 34 insertions(+), 3 deletions(-)

diff --git a/src/plugins/qnx/qnxruncontrol.cpp b/src/plugins/qnx/qnxruncontrol.cpp
index 1aef6ca9595..0f717d83beb 100644
--- a/src/plugins/qnx/qnxruncontrol.cpp
+++ b/src/plugins/qnx/qnxruncontrol.cpp
@@ -30,16 +30,38 @@
 ****************************************************************************/
 
 #include "qnxruncontrol.h"
+#include "qnxdeviceconfiguration.h"
 #include "qnxrunconfiguration.h"
+#include "slog2inforunner.h"
 
+#include <projectexplorer/kitinformation.h>
 #include <projectexplorer/runconfiguration.h>
-#include <remotelinux/remotelinuxrunconfiguration.h>
+#include <projectexplorer/target.h>
+
+#include <QFileInfo>
 
 using namespace Qnx;
 using namespace Qnx::Internal;
 using namespace RemoteLinux;
 
 QnxRunControl::QnxRunControl(ProjectExplorer::RunConfiguration *runConfig)
-        : RemoteLinuxRunControl(runConfig)
+    : RemoteLinuxRunControl(runConfig)
+    , m_slog2Info(0)
+{
+    ProjectExplorer::IDevice::ConstPtr dev = ProjectExplorer::DeviceKitInformation::device(runConfig->target()->kit());
+    QnxDeviceConfiguration::ConstPtr qnxDevice = dev.dynamicCast<const QnxDeviceConfiguration>();
+
+    QnxRunConfiguration *qnxRunConfig = qobject_cast<QnxRunConfiguration *>(runConfig);
+    QTC_CHECK(qnxRunConfig);
+
+    const QString applicationId = QFileInfo(qnxRunConfig->remoteExecutableFilePath()).fileName();
+    m_slog2Info = new Slog2InfoRunner(applicationId, qnxDevice, this);
+    connect(m_slog2Info, SIGNAL(output(QString,Utils::OutputFormat)), this, SLOT(appendMessage(QString,Utils::OutputFormat)));
+    connect(this, SIGNAL(started()), m_slog2Info, SLOT(start()));
+}
+
+ProjectExplorer::RunControl::StopResult QnxRunControl::stop()
 {
+    m_slog2Info->stop();
+    return RemoteLinuxRunControl::stop();
 }
diff --git a/src/plugins/qnx/qnxruncontrol.h b/src/plugins/qnx/qnxruncontrol.h
index c064d153281..20368e60891 100644
--- a/src/plugins/qnx/qnxruncontrol.h
+++ b/src/plugins/qnx/qnxruncontrol.h
@@ -37,11 +37,18 @@
 namespace Qnx {
 namespace Internal {
 
+class Slog2InfoRunner;
+
 class QnxRunControl : public RemoteLinux::RemoteLinuxRunControl
 {
     Q_OBJECT
 public:
     explicit QnxRunControl(ProjectExplorer::RunConfiguration *runConfig);
+
+    RemoteLinux::RemoteLinuxRunControl::StopResult stop();
+
+private:
+    Slog2InfoRunner *m_slog2Info;
 };
 
 } // namespace Internal
diff --git a/src/plugins/qnx/slog2inforunner.h b/src/plugins/qnx/slog2inforunner.h
index 52455e24660..9728f3aa7b6 100644
--- a/src/plugins/qnx/slog2inforunner.h
+++ b/src/plugins/qnx/slog2inforunner.h
@@ -52,11 +52,13 @@ class Slog2InfoRunner : public QObject
 public:
     explicit Slog2InfoRunner(const QString &applicationId, const RemoteLinux::LinuxDevice::ConstPtr &device, QObject *parent = 0);
 
-    void start();
     void stop();
 
     bool commandFound() const;
 
+public slots:
+    void start();
+
 signals:
     void commandMissing();
     void started();
-- 
GitLab