diff options
-rw-r--r-- | qmake/generators/win32/msvc_nmake.cpp | 28 | ||||
-rw-r--r-- | qmake/generators/win32/msvc_nmake.h | 1 | ||||
-rw-r--r-- | src/corelib/io/qdatastream.cpp | 37 | ||||
-rw-r--r-- | src/corelib/io/qdatastream.h | 5 |
4 files changed, 34 insertions, 37 deletions
diff --git a/qmake/generators/win32/msvc_nmake.cpp b/qmake/generators/win32/msvc_nmake.cpp index b8a564968d..52511b2008 100644 --- a/qmake/generators/win32/msvc_nmake.cpp +++ b/qmake/generators/win32/msvc_nmake.cpp @@ -514,18 +514,23 @@ void NmakeMakefileGenerator::writeBuildRulesPart(QTextStream &t) const QString target = var("DEST_TARGET"); QString manifest = project->first("QMAKE_MANIFEST").toQString(); QString extraLFlags; + const bool linkerSupportsEmbedding = (msvcVersion() >= 1200); if (manifest.isEmpty()) { generateManifest = true; - manifest = escapeFilePath(target + ".embed.manifest"); - extraLFlags = "/MANIFEST /MANIFESTFILE:" + manifest; - project->values("QMAKE_CLEAN") << manifest; + if (linkerSupportsEmbedding) { + extraLFlags = "/MANIFEST:embed"; + } else { + manifest = escapeFilePath(target + ".embed.manifest"); + extraLFlags += "/MANIFEST /MANIFESTFILE:" + manifest; + project->values("QMAKE_CLEAN") << manifest; + } } else { manifest = escapeFilePath(fileFixify(manifest)); } const QString resourceId = (templateName == "app") ? "1" : "2"; const bool incrementalLinking = project->values("QMAKE_LFLAGS").toQStringList().filter(QRegExp("(/|-)INCREMENTAL:NO")).isEmpty(); - if (incrementalLinking) { + if (incrementalLinking && !linkerSupportsEmbedding) { // Link a resource that contains the manifest without modifying the exe/dll after linking. QString manifest_rc = escapeFilePath(target + "_manifest.rc"); @@ -558,8 +563,10 @@ void NmakeMakefileGenerator::writeBuildRulesPart(QTextStream &t) // directly embed the manifest in the executable after linking t << "\n\t"; writeLinkCommand(t, extraLFlags); - t << "\n\tmt.exe /nologo /manifest " << manifest - << " /outputresource:$(DESTDIR_TARGET);" << resourceId; + if (!linkerSupportsEmbedding) { + t << "\n\tmt.exe /nologo /manifest " << manifest + << " /outputresource:$(DESTDIR_TARGET);" << resourceId; + } } } else { t << "\n\t"; @@ -590,4 +597,13 @@ void NmakeMakefileGenerator::writeLinkCommand(QTextStream &t, const QString &ext t << "\n<<"; } +int NmakeMakefileGenerator::msvcVersion() const +{ + const int fallbackVersion = 800; // Visual Studio 2005 + const QString ver = project->first(ProKey("MSVC_VER")).toQString(); + bool ok; + float f = ver.toFloat(&ok); + return ok ? int(f * 100) : fallbackVersion; +} + QT_END_NAMESPACE diff --git a/qmake/generators/win32/msvc_nmake.h b/qmake/generators/win32/msvc_nmake.h index 4d3c69bdd6..8d8f5360e0 100644 --- a/qmake/generators/win32/msvc_nmake.h +++ b/qmake/generators/win32/msvc_nmake.h @@ -54,6 +54,7 @@ class NmakeMakefileGenerator : public Win32MakefileGenerator void writeImplicitRulesPart(QTextStream &t); void writeBuildRulesPart(QTextStream &t); void writeLinkCommand(QTextStream &t, const QString &extraFlags = QString(), const QString &extraInlineFileContent = QString()); + int msvcVersion() const; void init(); protected: diff --git a/src/corelib/io/qdatastream.cpp b/src/corelib/io/qdatastream.cpp index a4c4dbf5ff..127244e994 100644 --- a/src/corelib/io/qdatastream.cpp +++ b/src/corelib/io/qdatastream.cpp @@ -250,10 +250,6 @@ QT_BEGIN_NAMESPACE if (q_status != Ok) \ return retVal; -enum { - DefaultStreamVersion = QDataStream::Qt_5_4 -}; - /*! Constructs a data stream that has no I/O device. @@ -265,7 +261,7 @@ QDataStream::QDataStream() dev = 0; owndev = false; byteorder = BigEndian; - ver = DefaultStreamVersion; + ver = Qt_DefaultCompiledVersion; noswap = QSysInfo::ByteOrder == QSysInfo::BigEndian; q_status = Ok; } @@ -287,7 +283,7 @@ QDataStream::QDataStream(QIODevice *d) dev = d; // set device owndev = false; byteorder = BigEndian; // default byte order - ver = DefaultStreamVersion; + ver = Qt_DefaultCompiledVersion; noswap = QSysInfo::ByteOrder == QSysInfo::BigEndian; q_status = Ok; } @@ -315,7 +311,7 @@ QDataStream::QDataStream(QByteArray *a, QIODevice::OpenMode flags) dev = buf; owndev = true; byteorder = BigEndian; - ver = DefaultStreamVersion; + ver = Qt_DefaultCompiledVersion; noswap = QSysInfo::ByteOrder == QSysInfo::BigEndian; q_status = Ok; } @@ -339,7 +335,7 @@ QDataStream::QDataStream(const QByteArray &a) dev = buf; owndev = true; byteorder = BigEndian; - ver = DefaultStreamVersion; + ver = Qt_DefaultCompiledVersion; noswap = QSysInfo::ByteOrder == QSysInfo::BigEndian; q_status = Ok; } @@ -542,7 +538,8 @@ void QDataStream::setByteOrder(ByteOrder bo) \value Qt_5_1 Version 14 (Qt 5.1) \value Qt_5_2 Version 15 (Qt 5.2) \value Qt_5_3 Same as Qt_5_2 - \value Qt_5_4 Same as Qt_5_2 + \value Qt_5_4 Version 16 (Qt 5.4) + \omitvalue Qt_DefaultCompiledVersion \sa setVersion(), version() */ @@ -558,7 +555,8 @@ void QDataStream::setByteOrder(ByteOrder bo) /*! \fn void QDataStream::setVersion(int v) - Sets the version number of the data serialization format to \a v. + Sets the version number of the data serialization format to \a v, + a value of the \l Version enum. You don't \e have to set a version if you are using the current version of Qt, but for your own custom binary formats we @@ -572,25 +570,6 @@ void QDataStream::setByteOrder(ByteOrder bo) with an earlier version of Qt, use this function to modify the serialization format used by QDataStream. - \table - \header \li Qt Version \li QDataStream Version - \row \li Qt 5.2 \li 15 - \row \li Qt 5.1 \li 14 - \row \li Qt 5.0 \li 13 - \row \li Qt 4.6 \li 12 - \row \li Qt 4.5 \li 11 - \row \li Qt 4.4 \li 10 - \row \li Qt 4.3 \li 9 - \row \li Qt 4.2 \li 8 - \row \li Qt 4.0, 4.1 \li 7 - \row \li Qt 3.3 \li 6 - \row \li Qt 3.1, 3.2 \li 5 - \row \li Qt 3.0 \li 4 - \row \li Qt 2.1, 2.2, 2.3 \li 3 - \row \li Qt 2.0 \li 2 - \row \li Qt 1.x \li 1 - \endtable - The \l Version enum provides symbolic constants for the different versions of Qt. For example: diff --git a/src/corelib/io/qdatastream.h b/src/corelib/io/qdatastream.h index 3bf90b39a3..808fbe73f6 100644 --- a/src/corelib/io/qdatastream.h +++ b/src/corelib/io/qdatastream.h @@ -89,10 +89,11 @@ public: Qt_5_1 = 14, Qt_5_2 = 15, Qt_5_3 = Qt_5_2, - Qt_5_4 = 16 + Qt_5_4 = 16, #if QT_VERSION >= 0x050500 -#error Add the datastream version for this Qt version +#error Add the datastream version for this Qt version and update Qt_DefaultCompiledVersion #endif + Qt_DefaultCompiledVersion = Qt_5_4 }; enum ByteOrder { |