diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp index 04167a03e30de20e8c086a68438463f9c6e74a16..3aafe55328af3e8fe589008d572d711239eb1ec8 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp @@ -242,7 +242,7 @@ static inline QString fixBaseNameTarget(const QString &in) return in; } -QString S60DeviceRunConfiguration::basePackageFilePath() const +QString S60DeviceRunConfiguration::packageFileNameWithTargetInfo() const { TargetInformation ti = qt4Target()->qt4Project()->rootProjectNode()->targetInformation(m_proFilePath); if (!ti.valid) @@ -250,7 +250,7 @@ QString S60DeviceRunConfiguration::basePackageFilePath() const QString baseFileName = ti.workingDir + QLatin1Char('/') + ti.target; baseFileName += QLatin1Char('_') + (isDebug() ? QLatin1String("debug") : QLatin1String("release")) - + QLatin1Char('-') + symbianPlatform(); + + QLatin1Char('-') + symbianPlatform() + QLatin1String(".sis"); return baseFileName; } @@ -348,7 +348,10 @@ QString S60DeviceRunConfiguration::localExecutableFileName() const QString S60DeviceRunConfiguration::signedPackage() const { - return QDir::toNativeSeparators(basePackageFilePath() + QLatin1String(".sis")); + TargetInformation ti = qt4Target()->qt4Project()->rootProjectNode()->targetInformation(m_proFilePath); + if (!ti.valid) + return QString(); + return ti.workingDir + QLatin1Char('/') + ti.target + QLatin1String(".sis"); } QStringList S60DeviceRunConfiguration::commandLineArguments() const @@ -466,10 +469,10 @@ S60DeviceRunControlBase::S60DeviceRunControlBase(RunConfiguration *runConfigurat m_serialPortName = s60runConfig->serialPortName(); m_serialPortFriendlyName = SymbianUtils::SymbianDeviceManager::instance()->friendlyNameForPort(m_serialPortName); m_targetName = s60runConfig->targetName(); - m_baseFileName = s60runConfig->basePackageFilePath(); + m_packageFileNameWithTarget = s60runConfig->packageFileNameWithTargetInfo(); m_signedPackage = s60runConfig->signedPackage(); m_commandLineArguments = s60runConfig->commandLineArguments(); - m_workingDirectory = QFileInfo(m_baseFileName).absolutePath(); + m_workingDirectory = QFileInfo(m_signedPackage).absolutePath(); m_qtDir = activeBuildConf->qtVersion()->versionInfo().value("QT_INSTALL_DATA"); if (const QtVersion *qtv = s60runConfig->qtVersion()) m_qtBinPath = qtv->versionInfo().value(QLatin1String("QT_INSTALL_BINS")); @@ -550,31 +553,42 @@ void S60DeviceRunControlBase::start() settingsCategory, settingsPage); return; } - // Be sure to delete old files - if (!ensureDeleteFile(m_signedPackage, &errorMessage)) { - m_deployProgress->reportCanceled(); - error(this, errorMessage); - emit finished(); - } - bool ok = false; - // TODO reconsider - do { - // ABLD up to 4.6.1: Check on file 'targetname_armX_udeb.sis'. - if (QFileInfo(m_signedPackage).isFile()) { - ok = true; - break; + // make sure we have the right name of the sis package + bool ok = true; + QFileInfo packageInfo(m_signedPackage); + { + // support for 4.6.1 and pre, where make sis creates 'targetname_armX_udeb.sis' instead of 'targetname.sis' + QFileInfo packageWithTargetInfo(m_packageFileNameWithTarget); + // does the 4.6.1 version exist? + if (packageWithTargetInfo.exists() && packageWithTargetInfo.isFile()) { + // is the 4.6.1 version newer? (to guard against behavior change Qt Creator 1.3 --> 2.0) + if (!packageInfo.exists() + || packageInfo.lastModified() < packageWithTargetInfo.lastModified()) { + // the 'targetname_armX_udeb.sis' crap exists and is new, rename it + emit addToOutputWindow(this, tr("Renaming new package '%1' to '%2'") + .arg(QDir::toNativeSeparators(m_packageFileNameWithTarget), + QDir::toNativeSeparators(m_signedPackage))); + ok = renameFile(m_packageFileNameWithTarget, m_signedPackage, &errorMessage); + } else { + // the 'targetname_armX_udeb.sis' crap exists but is old, remove it + emit addToOutputWindow(this, tr("Removing old package '%1'") + .arg(QDir::toNativeSeparators(m_packageFileNameWithTarget))); + QFile::remove(m_packageFileNameWithTarget); + } } - // ABLD/makefile-based systems: 'make sis' creates - // 'targetname.sis'. Rename to full name 'targetname_armX_udeb.sis'. - const QString oldName = m_workingDirectory + QLatin1Char('/') + m_targetName + QLatin1String(".sis"); - ok = renameFile(oldName, m_signedPackage, &errorMessage); - } while (false); + } + if (ok) { + if (!packageInfo.exists() || !packageInfo.isFile()) { + errorMessage = tr("Package file not found"); + ok = false; + } + } if (ok) { startDeployment(); } else { m_deployProgress->reportCanceled(); - errorMessage = tr("Failed to create '%1': %2").arg(m_signedPackage, errorMessage); + errorMessage = tr("Failed to find package '%1': %2").arg(m_signedPackage, errorMessage); error(this, errorMessage); stop(); emit finished(); @@ -632,7 +646,7 @@ void S60DeviceRunControlBase::startDeployment() //TODO sisx destination and file path user definable if (!m_commandLineArguments.isEmpty()) m_launcher->setCommandLineArgs(m_commandLineArguments); - const QString copyDst = QString::fromLatin1("C:\\Data\\%1.sis").arg(QFileInfo(m_baseFileName).fileName()); + const QString copyDst = QString::fromLatin1("C:\\Data\\%1").arg(QFileInfo(m_signedPackage).fileName()); const QString runFileName = QString::fromLatin1("C:\\sys\\bin\\%1.exe").arg(m_targetName); m_launcher->setCopyFileName(m_signedPackage, copyDst); m_launcher->setInstallFileName(copyDst); diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h index 217d9140cc587cee8432acb7b7c3fe6020da8643..f29cf537044b26022a587f9f40a24119a9b8f538 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h +++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h @@ -77,7 +77,7 @@ public: void setSerialPortName(const QString &name); QString targetName() const; - QString basePackageFilePath() const; + QString packageFileNameWithTargetInfo() const; QString symbianPlatform() const; QString symbianTarget() const; bool isDebug() const; @@ -187,11 +187,11 @@ private: QString m_serialPortName; QString m_serialPortFriendlyName; QString m_targetName; - QString m_baseFileName; QStringList m_commandLineArguments; QString m_workingDirectory; QString m_executableFileName; QString m_qtDir; + QString m_packageFileNameWithTarget; // Support for 4.6.1 QString m_signedPackage; QString m_qtBinPath; bool m_releaseDeviceAfterLauncherFinish; diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfigurationwidget.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfigurationwidget.cpp index f785c4f83a19f65382322ba08be4076636ab8505..1a02ca2e7afad719417c495ddcda6f12ebe25ba9 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfigurationwidget.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfigurationwidget.cpp @@ -204,7 +204,7 @@ void S60DeviceRunConfigurationWidget::argumentsEdited(const QString &text) void S60DeviceRunConfigurationWidget::updateTargetInformation() { - m_sisFileLabel->setText(m_runConfiguration->signedPackage()); + m_sisFileLabel->setText(QDir::toNativeSeparators(m_runConfiguration->signedPackage())); } void S60DeviceRunConfigurationWidget::setSerialPort(int index)