diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp index 6ab6e38e52fa0028305fd85db7ec94b5a190aac9..7b3ca0c888c0ccdcb3a99368bee00b669a605eb7 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp @@ -47,6 +47,8 @@ #include <projectexplorer/session.h> #include <QtCore/QDebug> + +#include <QtCore/QPair> #include <QtCore/QProcess> #include <QtCore/QSharedPointer> @@ -104,6 +106,7 @@ public: protected: void startDeployment(bool forDebugging); + void deploy(); void stopDeployment(); bool isDeploying() const; const QString executableOnHost() const; @@ -123,14 +126,13 @@ private slots: protected: ErrorDumper dumper; MaemoRunConfiguration *runConfig; // TODO this pointer can be invalid + const MaemoDeviceConfigurations::DeviceConfig devConfig; private: QProcess deployProcess; bool deployingExecutable; bool deployingDumperLib; - -protected: - const MaemoDeviceConfigurations::DeviceConfig devConfig; + QList<QPair<QString, QString> > deployables; }; class MaemoRunControl : public AbstractMaemoRunControl @@ -405,7 +407,8 @@ const QString MaemoRunConfiguration::cmd(const QString &cmdName) const const MaemoToolChain *MaemoRunConfiguration::toolchain() const { - Qt4BuildConfiguration *qt4bc = qobject_cast<Qt4BuildConfiguration *>(project()->activeBuildConfiguration()); + Qt4BuildConfiguration *qt4bc = qobject_cast<Qt4BuildConfiguration *> + (project()->activeBuildConfiguration()); QTC_ASSERT(qt4bc, return 0); MaemoToolChain *tc = dynamic_cast<MaemoToolChain *>( qt4bc->toolChain() ); @@ -1033,30 +1036,42 @@ AbstractMaemoRunControl::AbstractMaemoRunControl(RunConfiguration *rc) void AbstractMaemoRunControl::startDeployment(bool forDebugging) { QTC_ASSERT(runConfig, return); - if (!devConfig.isValid()) { - deploymentFinished(false); - return; - } - QStringList deployables; - if (runConfig->currentlyNeedsDeployment()) { - deployingExecutable = true; - deployables << executableFileName(); - } else { - deployingExecutable = false; - } - if (forDebugging && runConfig->debuggingHelpersNeedDeployment()) { - deployables << runConfig->dumperLib(); - deployingDumperLib = true; + + if (devConfig.isValid()) { + deployables.clear(); + if (runConfig->currentlyNeedsDeployment()) { + deployingExecutable = true; + deployables.append(qMakePair(executableFileName(), + QFileInfo(executableOnHost()).canonicalPath())); + } else { + deployingExecutable = false; + } + + if (forDebugging && runConfig->debuggingHelpersNeedDeployment()) { + deployingDumperLib = true; + const QFileInfo &info(runConfig->dumperLib()); + deployables.append(qMakePair(info.fileName(), info.canonicalPath())); + } else { + deployingDumperLib = false; + } + + deploy(); } else { - deployingDumperLib = false; + deploymentFinished(false); } +} + +void AbstractMaemoRunControl::deploy() +{ if (!deployables.isEmpty()) { - emit addToOutputWindow(this, tr("Files to deploy: %1.") - .arg(deployables.join(" "))); + QPair<QString, QString> pair = deployables.at(0); + emit addToOutputWindow(this, tr("File to deploy: %1.").arg(pair.first)); + QStringList cmdArgs; - cmdArgs << "-P" << port() << options() << deployables - << (devConfig.uname + "@" + devConfig.host + ":" + remoteDir()); - deployProcess.setWorkingDirectory(QFileInfo(executableOnHost()).absolutePath()); + cmdArgs << "-P" << port() << options() << pair.first << (devConfig.uname + + "@" + devConfig.host + ":" + remoteDir()); + deployProcess.setWorkingDirectory(QFileInfo(pair.second).absolutePath()); + deployProcess.start(runConfig->scpCmd(), cmdArgs); if (!deployProcess.waitForStarted()) { emit error(this, tr("Could not start scp. Deployment failed.")); @@ -1089,11 +1104,15 @@ void AbstractMaemoRunControl::deployProcessFinished() runConfig->wasDeployed(); if (deployingDumperLib) runConfig->debuggingHelpersDeployed(); + deployables.removeFirst(); } else { emit error(this, tr("Deployment failed.")); success = false; } - deploymentFinished(success); + if (deployables.isEmpty() || !success) + deploymentFinished(success); + else + deploy(); } const QString AbstractMaemoRunControl::executableOnHost() const @@ -1146,7 +1165,8 @@ const QString AbstractMaemoRunControl::targetCmdLinePrefix() const bool AbstractMaemoRunControl::setProcessEnvironment(QProcess &process) { QTC_ASSERT(runConfig, return false); - Qt4BuildConfiguration *qt4bc = qobject_cast<Qt4BuildConfiguration *>(runConfig->project()->activeBuildConfiguration()); + Qt4BuildConfiguration *qt4bc = qobject_cast<Qt4BuildConfiguration*> + (runConfig->project()->activeBuildConfiguration()); QTC_ASSERT(qt4bc, return false); Environment env = Environment::systemEnvironment(); qt4bc->toolChain()->addToEnvironment(env);