From e8b4e180cd0eb3752116284415b327f0946be833 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Fri, 27 Jan 2017 14:28:49 +0100 Subject: RunConfiguration: Introduce buildSystemTarget() Introduce a method that maps a RunConfiguration to the build system target that created the executable. Implement the method in all RunConfigurations where that makes sense (e.g. no CustomExecutables). Change-Id: Ifaac859c2cd9b2806a0d7c185b2239312a67752a Reviewed-by: Christian Kandeler Reviewed-by: Tim Jenssen --- src/plugins/baremetal/baremetalrunconfiguration.cpp | 9 +++++++++ src/plugins/baremetal/baremetalrunconfiguration.h | 2 ++ src/plugins/cmakeprojectmanager/cmakerunconfiguration.h | 2 ++ src/plugins/ios/iosrunconfiguration.cpp | 5 +++++ src/plugins/ios/iosrunconfiguration.h | 2 ++ src/plugins/projectexplorer/runconfiguration.h | 4 ++++ src/plugins/qbsprojectmanager/qbsnodes.cpp | 2 +- src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp | 2 +- src/plugins/qbsprojectmanager/qbsrunconfiguration.h | 2 +- src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.cpp | 5 +++++ src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.h | 2 ++ src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp | 5 +++++ src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.h | 2 ++ src/plugins/qmakeprojectmanager/qmakeproject.cpp | 7 +++++++ src/plugins/qmakeprojectmanager/qmakeproject.h | 2 ++ src/plugins/remotelinux/remotelinuxrunconfiguration.cpp | 5 +++++ src/plugins/remotelinux/remotelinuxrunconfiguration.h | 2 ++ src/plugins/winrt/winrtrunconfiguration.cpp | 7 +++++++ src/plugins/winrt/winrtrunconfiguration.h | 2 ++ 19 files changed, 66 insertions(+), 3 deletions(-) diff --git a/src/plugins/baremetal/baremetalrunconfiguration.cpp b/src/plugins/baremetal/baremetalrunconfiguration.cpp index eb57e3549b..b7fcf1b62e 100644 --- a/src/plugins/baremetal/baremetalrunconfiguration.cpp +++ b/src/plugins/baremetal/baremetalrunconfiguration.cpp @@ -155,6 +155,15 @@ QString BareMetalRunConfiguration::projectFilePath() const return m_projectFilePath; } +QString BareMetalRunConfiguration::buildSystemTarget() const +{ + const BuildTargetInfoList targets = target()->applicationTargets(); + const Utils::FileName projectFilePath = Utils::FileName::fromString(m_projectFilePath); + auto bst = std::find_if(targets.list.constBegin(), targets.list.constEnd(), + [&projectFilePath](const BuildTargetInfo &bti) { return bti.projectFilePath == projectFilePath; }); + return (bst == targets.list.constEnd()) ? QString() : bst->targetName; +} + void BareMetalRunConfiguration::setDisabledReason(const QString &reason) const { m_disabledReason = reason; diff --git a/src/plugins/baremetal/baremetalrunconfiguration.h b/src/plugins/baremetal/baremetalrunconfiguration.h index 9d24cb27e7..ef400cb203 100644 --- a/src/plugins/baremetal/baremetalrunconfiguration.h +++ b/src/plugins/baremetal/baremetalrunconfiguration.h @@ -58,6 +58,8 @@ public: QString projectFilePath() const; + QString buildSystemTarget() const final; + static const char *IdPrefix; signals: diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h index eb7ef71abb..b89c23ffc4 100644 --- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h +++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h @@ -56,6 +56,8 @@ public: bool isEnabled() const override; QString disabledReason() const override; + QString buildSystemTarget() const final { return m_buildTarget; } + protected: CMakeRunConfiguration(ProjectExplorer::Target *parent, CMakeRunConfiguration *source); bool fromMap(const QVariantMap &map) override; diff --git a/src/plugins/ios/iosrunconfiguration.cpp b/src/plugins/ios/iosrunconfiguration.cpp index e6e7010874..d33e2eaf76 100644 --- a/src/plugins/ios/iosrunconfiguration.cpp +++ b/src/plugins/ios/iosrunconfiguration.cpp @@ -274,6 +274,11 @@ QVariantMap IosRunConfiguration::toMap() const return res; } +QString IosRunConfiguration::buildSystemTarget() const +{ + return static_cast(target()->project())->mapProFilePathToTarget(m_profilePath); +} + bool IosRunConfiguration::isEnabled() const { if (m_parseInProgress || !m_parseSuccess) diff --git a/src/plugins/ios/iosrunconfiguration.h b/src/plugins/ios/iosrunconfiguration.h index 8d1b50251e..09919e5b3b 100644 --- a/src/plugins/ios/iosrunconfiguration.h +++ b/src/plugins/ios/iosrunconfiguration.h @@ -68,6 +68,8 @@ public: bool fromMap(const QVariantMap &map) override; QVariantMap toMap() const override; + QString buildSystemTarget() const final; + protected: IosRunConfiguration(ProjectExplorer::Target *parent, IosRunConfiguration *source); diff --git a/src/plugins/projectexplorer/runconfiguration.h b/src/plugins/projectexplorer/runconfiguration.h index e63b5bdee5..6d0dbda775 100644 --- a/src/plugins/projectexplorer/runconfiguration.h +++ b/src/plugins/projectexplorer/runconfiguration.h @@ -266,6 +266,10 @@ public: virtual Runnable runnable() const; virtual Abi abi() const; + // Return the name of the build system target that created this run configuration. + // May return an empty string if no target built the executable! + virtual QString buildSystemTarget() const { return QString(); } + void addExtraAspect(IRunConfigurationAspect *aspect); signals: diff --git a/src/plugins/qbsprojectmanager/qbsnodes.cpp b/src/plugins/qbsprojectmanager/qbsnodes.cpp index e7b0678bcd..092e842453 100644 --- a/src/plugins/qbsprojectmanager/qbsnodes.cpp +++ b/src/plugins/qbsprojectmanager/qbsnodes.cpp @@ -665,7 +665,7 @@ QList QbsProductNode::runConfigurations() c QbsRunConfiguration *qbsRc = qobject_cast(rc); if (!qbsRc) continue; - if (qbsRc->uniqueProductName() == QbsProject::uniqueProductName(qbsProductData())) + if (qbsRc->buildSystemTarget() == QbsProject::uniqueProductName(qbsProductData())) result << qbsRc; } diff --git a/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp b/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp index 90c65b42f9..49cf0a7f4f 100644 --- a/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp +++ b/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp @@ -297,7 +297,7 @@ void QbsRunConfiguration::addToBaseEnvironment(Utils::Environment &env) const env.prependOrSetLibrarySearchPath(qtVersion->qmakeProperty("QT_INSTALL_LIBS")); } -QString QbsRunConfiguration::uniqueProductName() const +QString QbsRunConfiguration::buildSystemTarget() const { return m_uniqueProductName; } diff --git a/src/plugins/qbsprojectmanager/qbsrunconfiguration.h b/src/plugins/qbsprojectmanager/qbsrunconfiguration.h index 51c2f2f384..5fab929aa0 100644 --- a/src/plugins/qbsprojectmanager/qbsrunconfiguration.h +++ b/src/plugins/qbsprojectmanager/qbsrunconfiguration.h @@ -75,7 +75,7 @@ public: void addToBaseEnvironment(Utils::Environment &env) const; - QString uniqueProductName() const; + QString buildSystemTarget() const final; bool isConsoleApplication() const; signals: diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.cpp b/src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.cpp index 8da6dd2320..49f1013018 100644 --- a/src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.cpp +++ b/src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.cpp @@ -136,6 +136,11 @@ QString QmakeAndroidRunConfiguration::disabledReason() const return QString(); } +QString QmakeAndroidRunConfiguration::buildSystemTarget() const +{ + return qmakeProject()->mapProFilePathToTarget(m_proFilePath); +} + void QmakeAndroidRunConfiguration::proFileUpdated(QmakeProjectManager::QmakeProFileNode *pro, bool success, bool parseInProgress) { QmakeProject *project = qmakeProject(); diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.h b/src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.h index d67fdf01b5..4fbaf29590 100644 --- a/src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.h +++ b/src/plugins/qmakeandroidsupport/qmakeandroidrunconfiguration.h @@ -51,6 +51,8 @@ public: bool isEnabled() const override; QString disabledReason() const override; + QString buildSystemTarget() const final; + protected: QmakeAndroidRunConfiguration(ProjectExplorer::Target *parent, QmakeAndroidRunConfiguration *source); diff --git a/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp b/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp index faf7bba961..af9c7e9601 100644 --- a/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp +++ b/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp @@ -422,6 +422,11 @@ void DesktopQmakeRunConfiguration::addToBaseEnvironment(Environment &env) const env.prependOrSetLibrarySearchPath(qtVersion->qmakeProperty("QT_INSTALL_LIBS")); } +QString DesktopQmakeRunConfiguration::buildSystemTarget() const +{ + return qmakeProject()->mapProFilePathToTarget(m_proFilePath); +} + Utils::FileName DesktopQmakeRunConfiguration::proFilePath() const { return m_proFilePath; diff --git a/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.h b/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.h index b9c7aebe1b..144745b07b 100644 --- a/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.h +++ b/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.h @@ -78,6 +78,8 @@ public: void addToBaseEnvironment(Utils::Environment &env) const; + QString buildSystemTarget() const final; + signals: void baseWorkingDirectoryChanged(const QString&); void usingDyldImageSuffixChanged(bool); diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.cpp b/src/plugins/qmakeprojectmanager/qmakeproject.cpp index a57a30294d..702ae7a24a 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeproject.cpp @@ -1546,6 +1546,13 @@ QmakeProject::AsyncUpdateState QmakeProject::asyncUpdateState() const return m_asyncUpdateState; } +QString QmakeProject::mapProFilePathToTarget(const FileName &proFilePath) +{ + const QmakeProjectManager::QmakeProFileNode *root = rootProjectNode(); + const QmakeProjectManager::QmakeProFileNode *node = root ? root->findProFileFor(proFilePath) : nullptr; + return node ? node->targetInformation().target : QString(); +} + } // namespace QmakeProjectManager #include "qmakeproject.moc" diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.h b/src/plugins/qmakeprojectmanager/qmakeproject.h index c109dd8e2c..3784daa6b5 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.h +++ b/src/plugins/qmakeprojectmanager/qmakeproject.h @@ -136,6 +136,8 @@ public: enum AsyncUpdateState { Base, AsyncFullUpdatePending, AsyncPartialUpdatePending, AsyncUpdateInProgress, ShuttingDown }; AsyncUpdateState asyncUpdateState() const; + QString mapProFilePathToTarget(const Utils::FileName &proFilePath); + signals: void proFileUpdated(QmakeProjectManager::QmakeProFileNode *node, bool, bool); void buildDirectoryInitialized(); diff --git a/src/plugins/remotelinux/remotelinuxrunconfiguration.cpp b/src/plugins/remotelinux/remotelinuxrunconfiguration.cpp index fbbe4ba2e1..4dcca9c9cc 100644 --- a/src/plugins/remotelinux/remotelinuxrunconfiguration.cpp +++ b/src/plugins/remotelinux/remotelinuxrunconfiguration.cpp @@ -151,6 +151,11 @@ QVariantMap RemoteLinuxRunConfiguration::toMap() const return map; } +QString RemoteLinuxRunConfiguration::buildSystemTarget() const +{ + return d->targetName; +} + bool RemoteLinuxRunConfiguration::fromMap(const QVariantMap &map) { if (!RunConfiguration::fromMap(map)) diff --git a/src/plugins/remotelinux/remotelinuxrunconfiguration.h b/src/plugins/remotelinux/remotelinuxrunconfiguration.h index a13cad77b5..6060b4540a 100644 --- a/src/plugins/remotelinux/remotelinuxrunconfiguration.h +++ b/src/plugins/remotelinux/remotelinuxrunconfiguration.h @@ -77,6 +77,8 @@ public: QVariantMap toMap() const override; + QString buildSystemTarget() const final; + static const char *IdPrefix; signals: diff --git a/src/plugins/winrt/winrtrunconfiguration.cpp b/src/plugins/winrt/winrtrunconfiguration.cpp index 1c91142a14..4a29b722e8 100644 --- a/src/plugins/winrt/winrtrunconfiguration.cpp +++ b/src/plugins/winrt/winrtrunconfiguration.cpp @@ -32,6 +32,7 @@ #include #include #include +#include namespace WinRt { namespace Internal { @@ -84,5 +85,11 @@ void WinRtRunConfiguration::setUninstallAfterStop(bool b) emit uninstallAfterStopChanged(m_uninstallAfterStop); } +QString WinRtRunConfiguration::buildSystemTarget() const +{ + return static_cast(target()->project()) + ->mapProFilePathToTarget(Utils::FileName::fromString(m_proFilePath)); +} + } // namespace Internal } // namespace WinRt diff --git a/src/plugins/winrt/winrtrunconfiguration.h b/src/plugins/winrt/winrtrunconfiguration.h index dc4d6e15e6..36bcf1ad43 100644 --- a/src/plugins/winrt/winrtrunconfiguration.h +++ b/src/plugins/winrt/winrtrunconfiguration.h @@ -47,6 +47,8 @@ public: bool uninstallAfterStop() const { return m_uninstallAfterStop; } void setUninstallAfterStop(bool b); + QString buildSystemTarget() const final; + signals: void argumentsChanged(QString); void uninstallAfterStopChanged(bool); -- cgit v1.2.1