summaryrefslogtreecommitdiffstats
path: root/src/libs/installer
diff options
context:
space:
mode:
authorTim Jenssen <tim.jenssen@digia.com>2013-03-21 17:04:03 +0100
committerTim Jenssen <tim.jenssen@digia.com>2013-03-21 17:04:32 +0100
commit3d9fc71e899702fff6124351cf0d5b1fa0c07b41 (patch)
treea9b8eb1ca5fd45c7f9ffb4a92588e2fa6a294443 /src/libs/installer
parent7e9b2651d0bba127ab8197ffa1ddbd5805a211d2 (diff)
parent3fb931187386aadd4329e763b8a276ee0bc5ab77 (diff)
Merge remote-tracking branch 'origin/1.3'
Diffstat (limited to 'src/libs/installer')
-rw-r--r--src/libs/installer/fileutils.cpp40
-rw-r--r--src/libs/installer/init.cpp15
-rw-r--r--src/libs/installer/resources/files-to-patch-linux74
-rw-r--r--src/libs/installer/resources/files-to-patch-linux-emb-arm8
-rw-r--r--src/libs/installer/resources/files-to-patch-macx48
-rw-r--r--src/libs/installer/resources/files-to-patch-windows57
-rw-r--r--src/libs/installer/resources/files-to-patch-windows-emb-arm7
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