diff options
author | Tim Jenssen <tim.jenssen@digia.com> | 2013-03-21 17:04:03 +0100 |
---|---|---|
committer | Tim Jenssen <tim.jenssen@digia.com> | 2013-03-21 17:04:32 +0100 |
commit | 3d9fc71e899702fff6124351cf0d5b1fa0c07b41 (patch) | |
tree | a9b8eb1ca5fd45c7f9ffb4a92588e2fa6a294443 /src/libs/installer | |
parent | 7e9b2651d0bba127ab8197ffa1ddbd5805a211d2 (diff) | |
parent | 3fb931187386aadd4329e763b8a276ee0bc5ab77 (diff) |
Merge remote-tracking branch 'origin/1.3'
Change-Id: Ibe38be81d8e763fb58899e2594641b8b062c5504
Diffstat (limited to 'src/libs/installer')
-rw-r--r-- | src/libs/installer/fileutils.cpp | 40 | ||||
-rw-r--r-- | src/libs/installer/init.cpp | 15 | ||||
-rw-r--r-- | src/libs/installer/resources/files-to-patch-linux | 74 | ||||
-rw-r--r-- | src/libs/installer/resources/files-to-patch-linux-emb-arm | 8 | ||||
-rw-r--r-- | src/libs/installer/resources/files-to-patch-macx | 48 | ||||
-rw-r--r-- | src/libs/installer/resources/files-to-patch-windows | 57 | ||||
-rw-r--r-- | src/libs/installer/resources/files-to-patch-windows-emb-arm | 7 |
7 files changed, 66 insertions, 183 deletions
diff --git a/src/libs/installer/fileutils.cpp b/src/libs/installer/fileutils.cpp index df7ac7a94..87d46282d 100644 --- a/src/libs/installer/fileutils.cpp +++ b/src/libs/installer/fileutils.cpp @@ -49,6 +49,7 @@ #include <QtCore/QTemporaryFile> #include <QtCore/QThread> #include <QtCore/QUrl> +#include <QImageReader> #include <errno.h> @@ -357,7 +358,6 @@ void QInstaller::removeSystemGeneratedFiles(const QString &path) void QInstaller::copyDirectoryContents(const QString &sourceDir, const QString &targetDir) { - qDebug() << "Copying" << sourceDir << "to" << targetDir; Q_ASSERT(QFileInfo(sourceDir).isDir()); Q_ASSERT(!QFileInfo(targetDir).exists() || QFileInfo(targetDir).isDir()); if (!QDir().mkpath(targetDir)) @@ -382,7 +382,6 @@ void QInstaller::copyDirectoryContents(const QString &sourceDir, const QString & void QInstaller::moveDirectoryContents(const QString &sourceDir, const QString &targetDir) { - qDebug() << "Moving" << sourceDir << "to" << targetDir; Q_ASSERT(QFileInfo(sourceDir).isDir()); Q_ASSERT(!QFileInfo(targetDir).exists() || QFileInfo(targetDir).isDir()); if (!QDir().mkpath(targetDir)) @@ -392,8 +391,11 @@ void QInstaller::moveDirectoryContents(const QString &sourceDir, const QString & while (it.hasNext()) { const QFileInfo i(it.next()); if (i.isDir()) { - moveDirectoryContents(QDir(sourceDir).absoluteFilePath(i.fileName()), - QDir(targetDir).absoluteFilePath(i.fileName())); + // only copy directories that are not the target to avoid loop dir creations + QString newSource = QDir(sourceDir).absoluteFilePath(i.fileName()); + if (QDir(newSource) != QDir(targetDir)) { + moveDirectoryContents(newSource, QDir(targetDir).absoluteFilePath(i.fileName())); + } } else { QFile f(i.filePath()); const QString target = QDir(targetDir).absoluteFilePath(i.fileName()); @@ -557,20 +559,21 @@ typedef struct { void QInstaller::setApplicationIcon(const QString &application, const QString &icon) { - wchar_t* const path = new wchar_t[application.length() + 1]; - QDir::toNativeSeparators(application).toWCharArray(path); - path[application.length()] = 0; - - HANDLE updateRes = BeginUpdateResource(path, false); - delete[] path; - QFile iconFile(icon); - if (!iconFile.open(QIODevice::ReadOnly)) + if (!iconFile.open(QIODevice::ReadOnly)) { + qWarning() << QString::fromLatin1("Could not use '%1' as application icon: %2.") + .arg(icon, iconFile.errorString()); return; + } - QByteArray temp = iconFile.readAll(); + if (QImageReader::imageFormat(icon) != "ico") { + qWarning() << QString::fromLatin1("Could not use '%1' as application icon, unsupported format %2.") + .arg(icon, QLatin1String(QImageReader::imageFormat(icon))); + return; + } - ICONDIR* ig = reinterpret_cast< ICONDIR* >(temp.data()); + QByteArray temp = iconFile.readAll(); + ICONDIR* ig = reinterpret_cast<ICONDIR*> (temp.data()); DWORD newSize = sizeof(GRPICONDIR) + sizeof(GRPICONDIRENTRY) * (ig->idCount - 1); GRPICONDIR* newDir = reinterpret_cast< GRPICONDIR* >(new char[newSize]); @@ -578,6 +581,7 @@ void QInstaller::setApplicationIcon(const QString &application, const QString &i newDir->idType = ig->idType; newDir->idCount = ig->idCount; + HANDLE updateRes = BeginUpdateResourceW((wchar_t*)QDir::toNativeSeparators(application).utf16(), false); for (int i = 0; i < ig->idCount; ++i) { char* temp1 = temp.data() + ig->idEntries[i].dwImageOffset; DWORD size1 = ig->idEntries[i].dwBytesInRes; @@ -591,16 +595,16 @@ void QInstaller::setApplicationIcon(const QString &application, const QString &i newDir->idEntries[i].dwBytesInRes = ig->idEntries[i].dwBytesInRes; newDir->idEntries[i].nID = i + 1; - UpdateResource(updateRes, RT_ICON, MAKEINTRESOURCE(i + 1), + UpdateResourceW(updateRes, RT_ICON, MAKEINTRESOURCE(i + 1), MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), temp1, size1); } - UpdateResource(updateRes, RT_GROUP_ICON, L"IDI_ICON1", MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), newDir - , newSize); + UpdateResourceW(updateRes, RT_GROUP_ICON, L"IDI_ICON1", MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), + newDir, newSize); delete [] newDir; - EndUpdateResource(updateRes, false); + EndUpdateResourceW(updateRes, false); } #endif diff --git a/src/libs/installer/init.cpp b/src/libs/installer/init.cpp index 579446ebf..4e567c8c3 100644 --- a/src/libs/installer/init.cpp +++ b/src/libs/installer/init.cpp @@ -85,6 +85,8 @@ #include <unix/C/7zCrc.h> +#include <QtPlugin> + #include <iostream> namespace NArchive { @@ -151,10 +153,17 @@ static void initArchives() CrcGenerateTable(); } +#if defined(QT_STATIC) static void initResources() { Q_INIT_RESOURCE(patch_file_lists); + Q_INIT_RESOURCE(installer); +# if QT_VERSION < 0x050000 + Q_IMPORT_PLUGIN(qico) + Q_UNUSED(qt_plugin_instance_qico()); +# endif } +#endif static QByteArray trimAndPrepend(QtMsgType type, const QByteArray &msg) { @@ -220,7 +229,10 @@ void messageHandler(QtMsgType type, const QMessageLogContext &context, const QSt void QInstaller::init() { +#if defined(QT_STATIC) + ::initArchives(); ::initResources(); +#endif UpdateOperationFactory &factory = UpdateOperationFactory::instance(); factory.registerUpdateOperation<CreateShortcutOperation>(QLatin1String("CreateShortcut")); @@ -262,9 +274,6 @@ void QInstaller::init() factory.registerUpdateOperation<MacReplaceInstallNamesOperation>(QLatin1String("ReplaceInstallNames")); #endif // Q_OS_MAC - // load 7z stuff, if we're a static lib - ::initArchives(); - // qDebug -> verbose() #if QT_VERSION < 0x050000 qInstallMsgHandler(messageHandler); diff --git a/src/libs/installer/resources/files-to-patch-linux b/src/libs/installer/resources/files-to-patch-linux index 9c7b39f4a..760127f99 100644 --- a/src/libs/installer/resources/files-to-patch-linux +++ b/src/libs/installer/resources/files-to-patch-linux @@ -2,71 +2,9 @@ bin/qmake bin/lrelease lib/libQtCore.so %% -lib/libQtCore.la -lib/libQt3Support.la -lib/libQtCLucene.la -lib/libQtDBus.la -lib/libQtDeclarative.la -lib/libQtGui.la -lib/libQtHelp.la -lib/libQtMultimedia.la -lib/libQtNetwork.la -lib/libQtOpenGL.la -lib/libphonon.la -lib/libQtScript.la -lib/libQtScriptTools.la -lib/libQtSql.la -lib/libQtSvg.la -lib/libQtTest.la -lib/libQtWebKit.la -lib/libQtXml.la -lib/libQtXmlPatterns.la -demos/shared/libdemo_shared.prl -lib/libQt3Support.prl -lib/libQtAssistantClient.prl -lib/libQtCLucene.prl -lib/libQtCore.prl -lib/libQtDBus.prl -lib/libQtDesignerComponents.prl -lib/libQtDesigner.prl -lib/libQtDeclarative.prl -lib/libQtGui.prl -lib/libQtHelp.prl -lib/libQtMultimedia.prl -lib/libQtNetwork.prl -lib/libQtOpenGL.prl -lib/libQtScript.prl -lib/libQtScriptTools.prl -lib/libQtSql.prl -lib/libQtSvg.prl -lib/libQtTest.prl -lib/libQtUiTools.prl -lib/libQtWebKit.prl -lib/libQtXmlPatterns.prl -lib/libQtXml.prl -lib/libphonon.prl -lib/libqtmain.prl -lib/pkgconfig/phonon.pc -lib/pkgconfig/Qt3Support.pc -lib/pkgconfig/QtAssistantClient.pc -lib/pkgconfig/QtCLucene.pc -lib/pkgconfig/QtCore.pc -lib/pkgconfig/QtDBus.pc -lib/pkgconfig/QtDeclarative.pc -lib/pkgconfig/QtDesignerComponents.pc -lib/pkgconfig/QtDesigner.pc -lib/pkgconfig/QtGui.pc -lib/pkgconfig/QtHelp.pc -lib/pkgconfig/QtMultimedia.pc -lib/pkgconfig/QtNetwork.pc -lib/pkgconfig/QtOpenGL.pc -lib/pkgconfig/QtScript.pc -lib/pkgconfig/QtScriptTools.pc -lib/pkgconfig/QtSql.pc -lib/pkgconfig/QtSvg.pc -lib/pkgconfig/QtTest.pc -lib/pkgconfig/QtUiTools.pc -lib/pkgconfig/QtWebKit.pc -lib/pkgconfig/QtXmlPatterns.pc -lib/pkgconfig/QtXml.pc -mkspecs/qconfig.pri +*.la +*.prl +*.pc +*.pri +mkspecs/default-host/qmake.conf + diff --git a/src/libs/installer/resources/files-to-patch-linux-emb-arm b/src/libs/installer/resources/files-to-patch-linux-emb-arm new file mode 100644 index 000000000..ea400d715 --- /dev/null +++ b/src/libs/installer/resources/files-to-patch-linux-emb-arm @@ -0,0 +1,8 @@ +bin/qmake +bin/lrelease +%% +*.la +*.prl +*.pc +*.pri + diff --git a/src/libs/installer/resources/files-to-patch-macx b/src/libs/installer/resources/files-to-patch-macx index 28b19fb7c..20644f2d1 100644 --- a/src/libs/installer/resources/files-to-patch-macx +++ b/src/libs/installer/resources/files-to-patch-macx @@ -17,46 +17,8 @@ bin/qhelpconverter.app/Contents/MacOS/qhelpconverter bin/QMLViewer.app/Contents/MacOS/QMLViewer bin/qttracereplay.app/Contents/MacOS/qttracereplay %% -lib/QtCore.la -lib/libQtCLucene.la -lib/QtDeclarative.la -lib/QtGui.la -lib/QtHelp.la -lib/QtMultimedia.la -lib/QtNetwork.la -lib/QtOpenGL.la -lib/phonon.la -lib/QtScript.la -lib/QtScriptTools.la -lib/QtSql.la -lib/QtSvg.la -lib/QtTest.la -lib/QtWebKit.la -lib/QtXml.la -lib/QtXmlPatterns.la -lib/libQtCLucene.prl -lib/libQtUiTools.prl -lib/pkgconfig/phonon.pc -lib/pkgconfig/Qt3Support.pc -lib/pkgconfig/QtAssistantClient.pc -lib/pkgconfig/QtCLucene.pc -lib/pkgconfig/QtCore.pc -lib/pkgconfig/QtDBus.pc -lib/pkgconfig/QtDeclarative.pc -lib/pkgconfig/QtDesignerComponents.pc -lib/pkgconfig/QtDesigner.pc -lib/pkgconfig/QtGui.pc -lib/pkgconfig/QtHelp.pc -lib/pkgconfig/QtMultimedia.pc -lib/pkgconfig/QtNetwork.pc -lib/pkgconfig/QtOpenGL.pc -lib/pkgconfig/QtScript.pc -lib/pkgconfig/QtScriptTools.pc -lib/pkgconfig/QtSql.pc -lib/pkgconfig/QtSvg.pc -lib/pkgconfig/QtTest.pc -lib/pkgconfig/QtUiTools.pc -lib/pkgconfig/QtWebKit.pc -lib/pkgconfig/QtXmlPatterns.pc -lib/pkgconfig/QtXml.pc -mkspecs/qconfig.pri +*.la +*.prl +*.pc +*.pri +mkspecs/default-host/qmake.conf
\ No newline at end of file diff --git a/src/libs/installer/resources/files-to-patch-windows b/src/libs/installer/resources/files-to-patch-windows index 845a299ce..6f931ec4f 100644 --- a/src/libs/installer/resources/files-to-patch-windows +++ b/src/libs/installer/resources/files-to-patch-windows @@ -6,55 +6,10 @@ lib/QtCore4.dll lib/QtCored4.dll %% mkspecs/default/qmake.conf -demos/shared/libdemo_shared.prl -lib/Qt3Support.prl -lib/QtAssistantClient.prl -lib/QtCLucene.prl -lib/QtCore.prl -lib/QtDesignerComponents.prl -lib/QtDesigner.prl -lib/QtGui.prl -lib/QtHelp.prl -lib/QtMultimedia.prl -lib/QtNetwork.prl -lib/QtOpenGL.prl -lib/QtScript.prl -lib/QtScriptTools.prl -lib/QtSql.prl -lib/QtSvg.prl -lib/QtTest.prl -lib/QtUiTools.prl -lib/QtWebKit.prl -lib/QtXmlPatterns.prl -lib/QtXml.prl -lib/Qt3Supportd.prl -lib/QtAssistantClientd.prl -lib/QtCLucened.prl -lib/QtCored.prl -lib/QtDesignerComponentsd.prl -lib/QtDesignerd.prl -lib/QtGuid.prl -lib/QtHelpd.prl -lib/QtMultimediad.prl -lib/QtNetworkd.prl -lib/QtOpenGLd.prl -lib/QtScriptd.prl -lib/QtScriptToolsd.prl -lib/QtSqld.prl -lib/QtSvgd.prl -lib/QtTestd.prl -lib/QtUiToolsd.prl -lib/QtWebKitd.prl -lib/QtXmlPatternsd.prl -lib/QtXmld.prl -lib/phonon.prl -lib/phonond.prl -lib/QtDeclarative.prl -lib/QtDeclaratived.prl -lib/qtmain.prl -lib/qtmaind.prl -lib/QAxContainer.prl -lib/QAxContainerd.prl -lib/QAxServer.prl -lib/QAxServerd.prl +mkspecs/default-host/qmake.conf .qmake.cache +*.prl +*.pc +*.la +*.pri +lib/prl.txt diff --git a/src/libs/installer/resources/files-to-patch-windows-emb-arm b/src/libs/installer/resources/files-to-patch-windows-emb-arm new file mode 100644 index 000000000..6ff8f9903 --- /dev/null +++ b/src/libs/installer/resources/files-to-patch-windows-emb-arm @@ -0,0 +1,7 @@ +bin/qmake.exe +bin/lrelease.exe +%% +*.la +*.prl +*.pc +*.pri |