From 1d66348438b6966ba8046723f38a41e8e5deaf4c Mon Sep 17 00:00:00 2001
From: con <qtc-committer@nokia.com>
Date: Thu, 1 Apr 2010 15:43:47 +0200
Subject: [PATCH] Agree on a default sis package name.

Instead of renaming it first. We agree on always deploying
target.sis (where target is the qmake TARGET).
For older Qt for Symbian versions we rename to match this.
---
 .../qt-s60/s60devicerunconfiguration.cpp      | 64 +++++++++++--------
 .../qt-s60/s60devicerunconfiguration.h        |  4 +-
 .../s60devicerunconfigurationwidget.cpp       |  2 +-
 3 files changed, 42 insertions(+), 28 deletions(-)

diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
index 04167a03e30..3aafe55328a 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 217d9140cc5..f29cf537044 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 f785c4f83a1..1a02ca2e7af 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)
-- 
GitLab