summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPasi Matilainen <pasi.matilainen@digia.com>2012-08-29 09:51:36 +0300
committerKarsten Heimrich <karsten.heimrich@digia.com>2012-09-26 14:42:45 +0200
commit830522f3a2a57f989f07e4dbd49b899c7fc69e06 (patch)
tree0e8dbf5aaa3c5e96217699aa068e0600720e236b
parentf2064cbd7c8fbdf934130410027c271d21ba586c (diff)
Store installer data in a separate file on Mac to support code signing
Code signing fails on Mac OS X if there's any extra data after the link edit segment in a binary, so store the installer data in a separate file inside the bundle. Task-number: QTIFW-153 Change-Id: Ie1edf21212b4a3bc5b6f32eea3f5d61e8800a0d5 Reviewed-by: Karsten Heimrich <karsten.heimrich@digia.com> Reviewed-by: Lars Knoll <lars.knoll@digia.com> Reviewed-by: Simo Fält <simo.falt@digia.com> Reviewed-by: Niels Weber <niels.weber@digia.com>
-rw-r--r--src/sdk/installerbase.cpp8
-rw-r--r--tools/binarycreator/binarycreator.cpp17
2 files changed, 25 insertions, 0 deletions
diff --git a/src/sdk/installerbase.cpp b/src/sdk/installerbase.cpp
index 03b87bbb2..a06adf500 100644
--- a/src/sdk/installerbase.cpp
+++ b/src/sdk/installerbase.cpp
@@ -244,8 +244,16 @@ int main(int argc, char *argv[])
// the uninstaller for the recorded list of during the installation performed operations
QInstaller::init();
+#ifdef Q_OS_MAC
+ // load the external binary resource
+ QDir resourcePath(QFileInfo(QCoreApplication::applicationFilePath()).dir());
+ resourcePath.cdUp();
+ resourcePath.cd(QLatin1String("Resources"));
+ BinaryContent content = BinaryContent::readAndRegisterFromBinary(resourcePath.filePath(QLatin1String("installer.dat")));
+#else
// load and map the embedded binary resource, registers operations
BinaryContent content = BinaryContent::readAndRegisterFromApplicationFile();
+#endif
// instantiate the installer we are actually going to use
QInstaller::PackageManagerCore core(content.magicMarker(), content.performedOperations());
diff --git a/tools/binarycreator/binarycreator.cpp b/tools/binarycreator/binarycreator.cpp
index 21ed178b7..0f7523590 100644
--- a/tools/binarycreator/binarycreator.cpp
+++ b/tools/binarycreator/binarycreator.cpp
@@ -224,13 +224,30 @@ Q_UNUSED(settings)
}
#endif
+#ifdef Q_OS_MAC
+ QDir resourcePath(QFileInfo(input.outputPath).dir());
+ resourcePath.cdUp();
+ resourcePath.cd(QLatin1String("Resources"));
+ KDSaveFile out(resourcePath.filePath(QLatin1String("installer.dat")));
+#else
KDSaveFile out(input.outputPath);
+#endif
try {
+#ifdef Q_OS_MAC
+ openForWrite(&out, out.fileName());
+
+ QFile exe(input.installerExePath);
+ if (!exe.copy(input.outputPath)) {
+ throw Error(QObject::tr("Could not copy %1 to %2: %3").arg(exe.fileName(), input.outputPath,
+ exe.errorString()));
+ }
+#else
openForWrite(&out, input.outputPath);
QFile exe(input.installerExePath);
openForRead(&exe, exe.fileName());
appendFileData(&out, &exe);
+#endif
const qint64 dataBlockStart = out.pos();
qDebug() << "Data block starts at" << dataBlockStart;