diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index f23d339a0426528582321a646218006ffda15188..3514883baf50a5eafde572d4cc2f138b6740696b 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -709,7 +709,9 @@ void CMakeProject::updateApplicationAndDeploymentTargets() deploymentData.addFile(ct.executable, deploymentPrefix + buildDir.relativeFilePath(QFileInfo(ct.executable).dir().path()), DeployableFile::TypeExecutable); if (!ct.library) { // TODO: Put a path to corresponding .cbp file into projectFilePath? - appTargetList.list << BuildTargetInfo(ct.executable, ct.executable); + appTargetList.list << BuildTargetInfo(ct.title, + Utils::FileName::fromString(ct.executable), + Utils::FileName::fromString(ct.executable)); } } diff --git a/src/plugins/projectexplorer/buildtargetinfo.h b/src/plugins/projectexplorer/buildtargetinfo.h index fa59ca566e552305039fffcde1841c7f0fa9a78d..cbdab12f5c785f21990ca45d7b06d2d80b01835f 100644 --- a/src/plugins/projectexplorer/buildtargetinfo.h +++ b/src/plugins/projectexplorer/buildtargetinfo.h @@ -31,6 +31,7 @@ #include "projectexplorer_export.h" +#include <utils/algorithm.h> #include <utils/fileutils.h> #include <QList> @@ -42,26 +43,24 @@ class PROJECTEXPLORER_EXPORT BuildTargetInfo { public: BuildTargetInfo() {} - BuildTargetInfo(const Utils::FileName &targetFilePath, const Utils::FileName &projectFilePath) - : targetFilePath(targetFilePath), projectFilePath(projectFilePath) - { - } - - BuildTargetInfo(const QString &targetFilePath, const QString &projectFilePath) - : targetFilePath(Utils::FileName::fromUserInput(targetFilePath)), - projectFilePath(Utils::FileName::fromUserInput(projectFilePath)) + BuildTargetInfo(const QString &targetName, const Utils::FileName &targetFilePath, + const Utils::FileName &projectFilePath) + : targetName(targetName) + , targetFilePath(targetFilePath) + , projectFilePath(projectFilePath) { } + QString targetName; Utils::FileName targetFilePath; Utils::FileName projectFilePath; - bool isValid() const { return !targetFilePath.isEmpty(); } + bool isValid() const { return !targetName.isEmpty(); } }; inline bool operator==(const BuildTargetInfo &ti1, const BuildTargetInfo &ti2) { - return ti1.targetFilePath == ti2.targetFilePath; + return ti1.targetName == ti2.targetName; } inline bool operator!=(const BuildTargetInfo &ti1, const BuildTargetInfo &ti2) @@ -71,7 +70,7 @@ inline bool operator!=(const BuildTargetInfo &ti1, const BuildTargetInfo &ti2) inline uint qHash(const BuildTargetInfo &ti) { - return qHash(ti.targetFilePath); + return qHash(ti.targetName); } @@ -92,6 +91,18 @@ public: return Utils::FileName(); } + bool hasTarget(const QString &targetName) { + return Utils::anyOf(list, [&targetName](const BuildTargetInfo &ti) { + return ti.targetName == targetName; + }); + } + + Utils::FileName targetFilePath(const QString &targetName) { + return Utils::findOrDefault(list, [&targetName](const BuildTargetInfo &ti) { + return ti.targetName == targetName; + }).targetFilePath; + } + QList<BuildTargetInfo> list; }; diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp index c3789249be501159c9c99c17d4e26f9efaa141c2..fdd48cb3e8e1af95783a31f12ce0d54dcef52382 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.cpp +++ b/src/plugins/qbsprojectmanager/qbsproject.cpp @@ -769,7 +769,8 @@ void QbsProject::updateApplicationTargets(const qbs::ProjectData &projectData) if (!productData.isEnabled() || !productData.isRunnable()) continue; if (productData.targetArtifacts().isEmpty()) { // No build yet. - applications.list << ProjectExplorer::BuildTargetInfo(Utils::FileName(), + applications.list << ProjectExplorer::BuildTargetInfo(productData.name(), + Utils::FileName(), Utils::FileName::fromString(productData.location().fileName())); continue; } @@ -777,7 +778,8 @@ void QbsProject::updateApplicationTargets(const qbs::ProjectData &projectData) QTC_ASSERT(ta.isValid(), continue); if (!ta.isExecutable()) continue; - applications.list << ProjectExplorer::BuildTargetInfo(Utils::FileName::fromString(ta.filePath()), + applications.list << ProjectExplorer::BuildTargetInfo(productData.name(), + Utils::FileName::fromString(ta.filePath()), Utils::FileName::fromString(productData.location().fileName())); } } diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.cpp b/src/plugins/qmakeprojectmanager/qmakeproject.cpp index 01010629052394dba7cf96841ee6c2a47fd70736..89eef3cc424aaae1692348bd5b09ead9a36b7942 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeproject.cpp @@ -1497,8 +1497,11 @@ void QmakeProject::updateBuildSystemData() target->setDeploymentData(deploymentData); BuildTargetInfoList appTargetList; - foreach (const QmakeProFileNode * const node, applicationProFiles()) - appTargetList.list << BuildTargetInfo(executableFor(node), node->path()); + foreach (const QmakeProFileNode * const node, applicationProFiles()) { + appTargetList.list << BuildTargetInfo(node->targetInformation().target, + Utils::FileName::fromString(executableFor(node)), + Utils::FileName::fromString(node->path())); + } target->setApplicationTargets(appTargetList); } diff --git a/src/plugins/qnx/qnxrunconfiguration.cpp b/src/plugins/qnx/qnxrunconfiguration.cpp index c52ef1720ccf611ded7d4a22748c25fedcfbdb2a..620ef2869dfc2535297102985c04ccd18a80586d 100644 --- a/src/plugins/qnx/qnxrunconfiguration.cpp +++ b/src/plugins/qnx/qnxrunconfiguration.cpp @@ -45,8 +45,8 @@ namespace { const char QtLibPathKey[] = "Qt4ProjectManager.QnxRunConfiguration.QtLibPath"; } -QnxRunConfiguration::QnxRunConfiguration(ProjectExplorer::Target *parent, Core::Id id, const QString &proFilePath) - : RemoteLinux::RemoteLinuxRunConfiguration(parent, id, proFilePath) +QnxRunConfiguration::QnxRunConfiguration(ProjectExplorer::Target *parent, Core::Id id, const QString &targetName) + : RemoteLinux::RemoteLinuxRunConfiguration(parent, id, targetName) { } diff --git a/src/plugins/qnx/qnxrunconfiguration.h b/src/plugins/qnx/qnxrunconfiguration.h index 127af4c4efb536a6369ca2419a4748ddfc7de8b4..f46ef1c8da78e9806a3e9ac7639e87540540e6d6 100644 --- a/src/plugins/qnx/qnxrunconfiguration.h +++ b/src/plugins/qnx/qnxrunconfiguration.h @@ -44,7 +44,7 @@ class QnxRunConfiguration : public RemoteLinux::RemoteLinuxRunConfiguration Q_OBJECT public: QnxRunConfiguration(ProjectExplorer::Target *parent, Core::Id id, - const QString &projectFilePath); + const QString &targetName); Utils::Environment environment() const; diff --git a/src/plugins/qnx/qnxrunconfigurationfactory.cpp b/src/plugins/qnx/qnxrunconfigurationfactory.cpp index f05c0cf40b4ea0b3750a63bbf6848c6d9cee720b..8dc0f977c64a694dca00ea85447b70b444652d76 100644 --- a/src/plugins/qnx/qnxrunconfigurationfactory.cpp +++ b/src/plugins/qnx/qnxrunconfigurationfactory.cpp @@ -97,7 +97,17 @@ bool QnxRunConfigurationFactory::canCreate(ProjectExplorer::Target *parent, Core ProjectExplorer::RunConfiguration *QnxRunConfigurationFactory::doCreate(ProjectExplorer::Target *parent, Core::Id id) { - return new QnxRunConfiguration(parent, id, pathFromId(id)); + const QString projectFilePath = pathFromId(id); + const QmakeProjectManager::QmakeProject * const qt4Project + = qobject_cast<QmakeProjectManager::QmakeProject *>(parent->project()); + QTC_ASSERT(qt4Project, return 0); + foreach (const QmakeProjectManager::QmakeProFileNode * const node, + qt4Project->applicationProFiles()) { + if (node->path() == projectFilePath) + return new QnxRunConfiguration(parent, id, node->targetInformation().target); + } + QTC_CHECK(false); + return 0; } bool QnxRunConfigurationFactory::canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const diff --git a/src/plugins/remotelinux/remotelinuxrunconfiguration.cpp b/src/plugins/remotelinux/remotelinuxrunconfiguration.cpp index 162c1c4d57aa2efa5022bac87bee675cd02b8389..f2a9278543c0f4511d9f289929b6d88d05071b1c 100644 --- a/src/plugins/remotelinux/remotelinuxrunconfiguration.cpp +++ b/src/plugins/remotelinux/remotelinuxrunconfiguration.cpp @@ -46,7 +46,7 @@ namespace RemoteLinux { namespace Internal { namespace { const char ArgumentsKey[] = "Qt4ProjectManager.MaemoRunConfiguration.Arguments"; -const char ProFileKey[] = "Qt4ProjectManager.MaemoRunConfiguration.ProFile"; +const char TargetNameKey[] = "Qt4ProjectManager.MaemoRunConfiguration.TargetName"; const char UseAlternateExeKey[] = "RemoteLinux.RunConfig.UseAlternateRemoteExecutable"; const char AlternateExeKey[] = "RemoteLinux.RunConfig.AlternateRemoteExecutable"; const char WorkingDirectoryKey[] = "RemoteLinux.RunConfig.WorkingDirectory"; @@ -55,14 +55,14 @@ const char WorkingDirectoryKey[] = "RemoteLinux.RunConfig.WorkingDirectory"; class RemoteLinuxRunConfigurationPrivate { public: - RemoteLinuxRunConfigurationPrivate(const QString &projectFilePath) - : projectFilePath(projectFilePath), + RemoteLinuxRunConfigurationPrivate(const QString &targetName) + : targetName(targetName), useAlternateRemoteExecutable(false) { } RemoteLinuxRunConfigurationPrivate(const RemoteLinuxRunConfigurationPrivate *other) - : projectFilePath(other->projectFilePath), + : targetName(other->targetName), arguments(other->arguments), useAlternateRemoteExecutable(other->useAlternateRemoteExecutable), alternateRemoteExecutable(other->alternateRemoteExecutable), @@ -70,7 +70,7 @@ public: { } - QString projectFilePath; + QString targetName; QStringList arguments; bool useAlternateRemoteExecutable; QString alternateRemoteExecutable; @@ -82,9 +82,9 @@ public: using namespace Internal; RemoteLinuxRunConfiguration::RemoteLinuxRunConfiguration(Target *parent, Core::Id id, - const QString &proFilePath) + const QString &targetName) : AbstractRemoteLinuxRunConfiguration(parent, id), - d(new RemoteLinuxRunConfigurationPrivate(proFilePath)) + d(new RemoteLinuxRunConfigurationPrivate(targetName)) { init(); } @@ -135,7 +135,7 @@ QVariantMap RemoteLinuxRunConfiguration::toMap() const QVariantMap map(RunConfiguration::toMap()); map.insert(QLatin1String(ArgumentsKey), d->arguments); const QDir dir = QDir(target()->project()->projectDirectory().toString()); - map.insert(QLatin1String(ProFileKey), dir.relativeFilePath(d->projectFilePath)); + map.insert(QLatin1String(TargetNameKey), d->targetName); map.insert(QLatin1String(UseAlternateExeKey), d->useAlternateRemoteExecutable); map.insert(QLatin1String(AlternateExeKey), d->alternateRemoteExecutable); map.insert(QLatin1String(WorkingDirectoryKey), d->workingDirectory); @@ -149,8 +149,8 @@ bool RemoteLinuxRunConfiguration::fromMap(const QVariantMap &map) d->arguments = map.value(QLatin1String(ArgumentsKey)).toStringList(); const QDir dir = QDir(target()->project()->projectDirectory().toString()); - d->projectFilePath - = QDir::cleanPath(dir.filePath(map.value(QLatin1String(ProFileKey)).toString())); + d->targetName + = QDir::cleanPath(dir.filePath(map.value(QLatin1String(TargetNameKey)).toString())); d->useAlternateRemoteExecutable = map.value(QLatin1String(UseAlternateExeKey), false).toBool(); d->alternateRemoteExecutable = map.value(QLatin1String(AlternateExeKey)).toString(); d->workingDirectory = map.value(QLatin1String(WorkingDirectoryKey)).toString(); @@ -162,9 +162,9 @@ bool RemoteLinuxRunConfiguration::fromMap(const QVariantMap &map) QString RemoteLinuxRunConfiguration::defaultDisplayName() { - if (!d->projectFilePath.isEmpty()) + if (!d->targetName.isEmpty()) //: %1 is the name of a project which is being run on remote Linux - return tr("%1 (on Remote Device)").arg(QFileInfo(d->projectFilePath).completeBaseName()); + return tr("%1 (on Remote Device)").arg(d->targetName); //: Remote Linux run configuration default display name return tr("Run on Remote Device"); } @@ -183,8 +183,7 @@ Environment RemoteLinuxRunConfiguration::environment() const QString RemoteLinuxRunConfiguration::localExecutableFilePath() const { - return target()->applicationTargets() - .targetForProject(Utils::FileName::fromString(d->projectFilePath)).toString(); + return target()->applicationTargets().targetFilePath(d->targetName).toString(); } QString RemoteLinuxRunConfiguration::defaultRemoteExecutableFilePath() const @@ -241,11 +240,6 @@ void RemoteLinuxRunConfiguration::handleBuildSystemDataUpdated() updateEnabledState(); } -QString RemoteLinuxRunConfiguration::projectFilePath() const -{ - return d->projectFilePath; -} - const char *RemoteLinuxRunConfiguration::IdPrefix = "RemoteLinuxRunConfiguration:"; } // namespace RemoteLinux diff --git a/src/plugins/remotelinux/remotelinuxrunconfiguration.h b/src/plugins/remotelinux/remotelinuxrunconfiguration.h index 6829920c005a0fff3ff20cd6378b240b6b927657..1ce18fef92f704181f5d370aae9d864087351363 100644 --- a/src/plugins/remotelinux/remotelinuxrunconfiguration.h +++ b/src/plugins/remotelinux/remotelinuxrunconfiguration.h @@ -60,7 +60,7 @@ class REMOTELINUX_EXPORT RemoteLinuxRunConfiguration : public AbstractRemoteLinu public: RemoteLinuxRunConfiguration(ProjectExplorer::Target *parent, Core::Id id, - const QString &projectFilePath); + const QString &targetName); ~RemoteLinuxRunConfiguration(); bool isEnabled() const; @@ -83,8 +83,6 @@ public: QVariantMap toMap() const; - QString projectFilePath() const; - static const char *IdPrefix; signals: diff --git a/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.cpp b/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.cpp index 2acb0e12a50f0b527fa63b244367869f40a7ec83..5d787ff3997962d64166f23bf955bd956fb36aa9 100644 --- a/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.cpp +++ b/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.cpp @@ -38,7 +38,6 @@ #include <projectexplorer/target.h> #include <utils/qtcassert.h> -#include <QFileInfo> #include <QString> using namespace ProjectExplorer; @@ -47,7 +46,7 @@ namespace RemoteLinux { namespace Internal { namespace { -QString pathFromId(Core::Id id) +QString stringFromId(Core::Id id) { QByteArray idStr = id.name(); if (!idStr.startsWith(RemoteLinuxRunConfiguration::IdPrefix)) @@ -72,7 +71,7 @@ bool RemoteLinuxRunConfigurationFactory::canCreate(Target *parent, Core::Id id) if (!canHandle(parent)) return false; return id == RemoteLinuxCustomRunConfiguration::runConfigId() - || !parent->applicationTargets().targetForProject(pathFromId(id)).isEmpty(); + || parent->applicationTargets().hasTarget(stringFromId(id)); } bool RemoteLinuxRunConfigurationFactory::canRestore(Target *parent, const QVariantMap &map) const @@ -100,7 +99,7 @@ QList<Core::Id> RemoteLinuxRunConfigurationFactory::availableCreationIds(Target const Core::Id base = Core::Id(RemoteLinuxRunConfiguration::IdPrefix); foreach (const BuildTargetInfo &bti, parent->applicationTargets().list) - result << base.withSuffix(bti.projectFilePath.toString()); + result << base.withSuffix(bti.targetName); result << RemoteLinuxCustomRunConfiguration::runConfigId(); return result; } @@ -109,15 +108,14 @@ QString RemoteLinuxRunConfigurationFactory::displayNameForId(Core::Id id) const { if (id == RemoteLinuxCustomRunConfiguration::runConfigId()) return RemoteLinuxCustomRunConfiguration::runConfigDefaultDisplayName(); - return QFileInfo(pathFromId(id)).completeBaseName() - + QLatin1Char(' ') + tr("(on Remote Generic Linux Host)"); + return stringFromId(id) + QLatin1Char(' ') + tr("(on Remote Generic Linux Host)"); } RunConfiguration *RemoteLinuxRunConfigurationFactory::doCreate(Target *parent, Core::Id id) { if (id == RemoteLinuxCustomRunConfiguration::runConfigId()) return new RemoteLinuxCustomRunConfiguration(parent); - return new RemoteLinuxRunConfiguration(parent, id, pathFromId(id)); + return new RemoteLinuxRunConfiguration(parent, id, stringFromId(id)); } RunConfiguration *RemoteLinuxRunConfigurationFactory::doRestore(Target *parent,