From 49201fdb99ee6ca7f6bee296f51f5036345017c6 Mon Sep 17 00:00:00 2001
From: Katja Marttila <katja.marttila@qt.io>
Date: Wed, 14 Sep 2016 13:15:05 +0000
Subject: [PATCH] Revert "Allow signing maintenancetool in Windows"

This reverts commit 76fd6e8f2953347ea0bf7a57b643968784bc9acc.
The change caused that two installation files were needed -
one executable and one dat file. Many users did not find it acceptable.
We need to figure out something else.

Change-Id: Ief12cd47f9897cee8a234d8611a5c18296d42b1c
Reviewed-by: Iikka Eklund <iikka.eklund@qt.io>
---
 src/libs/installer/packagemanagercore_p.cpp | 13 ++++-------
 src/sdk/sdkapp.h                            | 24 +++++++--------------
 tools/binarycreator/binarycreator.cpp       |  9 ++------
 tools/devtool/main.cpp                      | 11 +---------
 4 files changed, 15 insertions(+), 42 deletions(-)

diff --git a/src/libs/installer/packagemanagercore_p.cpp b/src/libs/installer/packagemanagercore_p.cpp
index 019bbfe7..b972545c 100644
--- a/src/libs/installer/packagemanagercore_p.cpp
+++ b/src/libs/installer/packagemanagercore_p.cpp
@@ -995,14 +995,12 @@ void PackageManagerCorePrivate::writeMaintenanceToolBinary(QFile *const input, q
 
     QInstaller::appendData(&out, input, size);
     if (writeBinaryLayout) {
-#if defined Q_OS_OSX || defined Q_OS_WIN
-        QDir resourcePath(QFileInfo(maintenanceToolRenamedName).dir());
 #ifdef Q_OS_OSX
+        QDir resourcePath(QFileInfo(maintenanceToolRenamedName).dir());
         if (!resourcePath.path().endsWith(QLatin1String("Contents/MacOS")))
             throw Error(tr("Maintenance tool is not a bundle"));
         resourcePath.cdUp();
         resourcePath.cd(QLatin1String("Resources"));
-#endif
         // It's a bit odd to have only the magic in the data file, but this simplifies
         // other code a lot (since installers don't have any appended data either)
         QTemporaryFile dataOut;
@@ -1029,7 +1027,7 @@ void PackageManagerCorePrivate::writeMaintenanceToolBinary(QFile *const input, q
         dataOut.setAutoRemove(false);
         dataOut.setPermissions(dataOut.permissions() | QFile::WriteUser | QFile::ReadGroup
             | QFile::ReadOther);
-#elif defined(Q_OS_LINUX)
+#else
         QInstaller::appendInt64(&out, 0);   // operations start
         QInstaller::appendInt64(&out, 0);   // operations end
         QInstaller::appendInt64(&out, 0);   // resource count
@@ -1298,15 +1296,12 @@ void PackageManagerCorePrivate::writeMaintenanceTool(OperationList performedOper
             QInstaller::openForRead(&input);
             layout = BinaryContent::binaryLayout(&input, BinaryContent::MagicCookieDat);
         } catch (const Error &/*error*/) {
-#if defined Q_OS_OSX || defined Q_OS_WIN
-            // On Mac and Windows data is always in a separate file
-            // so that the binary can be signed
+#ifdef Q_OS_OSX
+            // On Mac, data is always in a separate file so that the binary can be signed
             QString binaryName = isInstaller() ? installerBinaryPath() : maintenanceToolName();
             QDir dataPath(QFileInfo(binaryName).dir());
-#ifdef Q_OS_OSX
             dataPath.cdUp();
             dataPath.cd(QLatin1String("Resources"));
-#endif
             input.setFileName(dataPath.filePath(QLatin1String("installer.dat")));
 
             QInstaller::openForRead(&input);
diff --git a/src/sdk/sdkapp.h b/src/sdk/sdkapp.h
index d06cd9eb..c5cc4ca5 100644
--- a/src/sdk/sdkapp.h
+++ b/src/sdk/sdkapp.h
@@ -76,26 +76,21 @@ public:
         installer binary itself, which contains the binary layout and the binary content. In case
         of an maintenance tool, it will return a binary that has just a binary layout append.
 
-        Note on OS X and Windows: For compatibility reason this function will return the .dat file
-        as the binary layout cannot be appended to the actual installer / maintenance tool binary
-        itself because of signing. .dat file is located inside the resource folder in the application
-        bundle in OS X and next to maintenance tool in Windows.
+        Note on OS X: For compatibility reason this function will return the a .dat file located
+        inside the resource folder in the application bundle, as on OS X the binary layout cannot
+        be appended to the actual installer / maintenance tool binary itself because of signing.
     */
     QString binaryFile() const
     {
         QString binaryFile = QCoreApplication::applicationFilePath();
-#if defined Q_OS_OSX || defined Q_OS_WIN
-        // The installer binary on OSX and Windows does not contain the binary
-        // content, it's put into the resources folder as separate file.
-        // Adjust the actual binary path. No error checking here since we
-        // will fail later while reading the binary content.
-        QDir resourcePath(QFileInfo(binaryFile).dir());
-
 #ifdef Q_OS_OSX
+        // The installer binary on OSX does not contain the binary content, it's put into
+        // the resources folder as separate file. Adjust the actual binary path. No error
+        // checking here since we will fail later while reading the binary content.
+        QDir resourcePath(QFileInfo(binaryFile).dir());
         resourcePath.cdUp();
         resourcePath.cd(QLatin1String("Resources"));
-#endif
-        binaryFile = resourcePath.filePath(QLatin1String("installer.dat"));
+        return resourcePath.filePath(QLatin1String("installer.dat"));
 #endif
         return binaryFile;
     }
@@ -119,9 +114,6 @@ public:
             QString bundlePath;
             if (QInstaller::isInBundle(fi.absoluteFilePath(), &bundlePath))
                 fi.setFile(bundlePath);
-#ifdef Q_OS_WIN
-            return fi.absoluteDir().filePath(qApp->applicationName() + QLatin1String(".dat"));
-#endif
             return fi.absoluteDir().filePath(fi.baseName() + QLatin1String(".dat"));
         }
         return QString();
diff --git a/tools/binarycreator/binarycreator.cpp b/tools/binarycreator/binarycreator.cpp
index 23261211..1a6a1047 100644
--- a/tools/binarycreator/binarycreator.cpp
+++ b/tools/binarycreator/binarycreator.cpp
@@ -241,12 +241,10 @@ static int assemble(Input input, const QInstaller::Settings &settings, const QSt
 
     QTemporaryFile out;
     QString targetName = input.outputPath;
-#if defined Q_OS_OSX || defined Q_OS_WIN
-    QDir resourcePath(QFileInfo(input.outputPath).dir());
 #ifdef Q_OS_OSX
+    QDir resourcePath(QFileInfo(input.outputPath).dir());
     resourcePath.cdUp();
     resourcePath.cd(QLatin1String("Resources"));
-#endif
     targetName = resourcePath.filePath(QLatin1String("installer.dat"));
 #endif
 
@@ -264,10 +262,7 @@ static int assemble(Input input, const QInstaller::Settings &settings, const QSt
         QInstaller::openForWrite(&out);
         QFile exe(input.installerExePath);
 
-#if defined Q_OS_OSX || defined Q_OS_WIN
-        // remove the target
-        if (QFile::exists(input.outputPath))
-            QFile::remove(input.outputPath);
+#ifdef Q_OS_OSX
         if (!exe.copy(input.outputPath)) {
             throw Error(QString::fromLatin1("Cannot copy %1 to %2: %3").arg(exe.fileName(),
                 input.outputPath, exe.errorString()));
diff --git a/tools/devtool/main.cpp b/tools/devtool/main.cpp
index 27c459ec..c9aaab71 100644
--- a/tools/devtool/main.cpp
+++ b/tools/devtool/main.cpp
@@ -173,11 +173,6 @@ int main(int argc, char *argv[])
     if (QInstaller::isInBundle(path, &bundlePath))
         path = QDir(bundlePath).filePath(QLatin1String("Contents/Resources/installer.dat"));
 
-#ifdef Q_OS_WIN
-    QDir resourcePath(path);
-    resourcePath.cdUp();
-    path = resourcePath.filePath(QLatin1String("installer.dat"));
-#endif
     int result = EXIT_FAILURE;
     QVector<QByteArray> resourceMappings;
     quint64 cookie = QInstaller::BinaryContent::MagicCookie;
@@ -196,12 +191,8 @@ int main(int argc, char *argv[])
                 QFileInfo fi(path);
                 if (QInstaller::isInBundle(fi.absoluteFilePath(), &bundlePath))
                     fi.setFile(bundlePath);
-#ifdef Q_OS_WIN
-                QFileInfo appName = arguments.first();
-                path = fi.absoluteDir().filePath(appName.baseName() + QLatin1String(".dat"));
-#else
                 path = fi.absolutePath() + QLatin1Char('/') + fi.baseName() + QLatin1String(".dat");
-#endif
+
                 tmp.close();
                 tmp.setFileName(path);
                 QInstaller::openForRead(&tmp);