diff --git a/src/plugins/winrt/winrtrunconfiguration.cpp b/src/plugins/winrt/winrtrunconfiguration.cpp index 6e83042dc98..4b01d2f9e99 100644 --- a/src/plugins/winrt/winrtrunconfiguration.cpp +++ b/src/plugins/winrt/winrtrunconfiguration.cpp @@ -32,6 +32,8 @@ #include #include #include +#include + #include namespace WinRt { @@ -93,5 +95,44 @@ QString WinRtRunConfiguration::buildSystemTarget() const ->mapProFilePathToTarget(Utils::FileName::fromString(m_proFilePath)); } +ProjectExplorer::Runnable WinRtRunConfiguration::runnable() const +{ + ProjectExplorer::StandardRunnable r; + r.executable = executable(); + r.commandLineArguments = arguments(); + return r; +} + +QString WinRtRunConfiguration::executable() const +{ + QmakeProjectManager::QmakeProject *project + = static_cast(target()->project()); + if (!project) + return QString(); + + QmakeProjectManager::QmakeProFile *rootProFile = project->rootProFile(); + if (!rootProFile) + return QString(); + + const QmakeProjectManager::QmakeProFile *pro + = rootProFile->findProFile(Utils::FileName::fromString(m_proFilePath)); + if (!pro) + return QString(); + + QmakeProjectManager::TargetInformation ti = pro->targetInformation(); + if (!ti.valid) + return QString(); + + QString destDir = ti.destDir.toString(); + if (destDir.isEmpty()) + destDir = ti.buildDir.toString(); + else if (QDir::isRelativePath(destDir)) + destDir = QDir::cleanPath(ti.buildDir.toString() + '/' + destDir); + + QString executable = QDir::cleanPath(destDir + '/' + ti.target); + executable = Utils::HostOsInfo::withExecutableSuffix(executable); + return executable; +} + } // namespace Internal } // namespace WinRt diff --git a/src/plugins/winrt/winrtrunconfiguration.h b/src/plugins/winrt/winrtrunconfiguration.h index 9e3c13878c7..b96e8c2580a 100644 --- a/src/plugins/winrt/winrtrunconfiguration.h +++ b/src/plugins/winrt/winrtrunconfiguration.h @@ -48,6 +48,8 @@ public: QString buildSystemTarget() const final; + ProjectExplorer::Runnable runnable() const override; + signals: void argumentsChanged(QString); void uninstallAfterStopChanged(bool); @@ -58,6 +60,8 @@ private: QString m_proFilePath; bool m_uninstallAfterStop = false; + + QString executable() const; }; } // namespace Internal