From fa1b2dc4a012c3dc11db35f6b33a41d326b820b6 Mon Sep 17 00:00:00 2001 From: "M. Moellney" Date: Tue, 31 Mar 2015 17:34:18 +0200 Subject: Fix qmake generating bizarre msvc /VERSION values The msvc_nmake and msvc_vcproj generators deduced the exe/dll header version number from the VERSION variable in a "bizarre" way: VERSION=1.2.3.4567 was converted to /VERSION:1.234567. But a minor number beyond 65535 is not accepted by the linker. This fix deduces the major and minor from the major and minor of VERSION: VERSION=1.2.3.4567 leads to /VERSION:1.2. In addition, a new variable is introduced: VERSION_PE_HEADER. With this variable, legacy pro files that rely on the bizarre behavior can re-create it: VERSION=1.2.3.45 and VERSION_PE_HEADER=1.2345 lead to the old result: /VERSION:1.2345 by just taking the VERSION_PE_HEADER to overrule the new behavior. Task-number: QTBUG-44823 Change-Id: Ie093ade83290c098fe2b2a429ce5d6ed6dc750ea Reviewed-by: Oswald Buddenhagen --- qmake/generators/win32/msvc_nmake.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'qmake/generators/win32/msvc_nmake.cpp') diff --git a/qmake/generators/win32/msvc_nmake.cpp b/qmake/generators/win32/msvc_nmake.cpp index 740c8c4d13..daa356c8b0 100644 --- a/qmake/generators/win32/msvc_nmake.cpp +++ b/qmake/generators/win32/msvc_nmake.cpp @@ -354,14 +354,18 @@ void NmakeMakefileGenerator::init() project->values("QMAKE_LFLAGS").append(QString("/DEF:") + escapeFilePath(defFileName)); } - if(!project->values("VERSION").isEmpty()) { - ProString version = project->values("VERSION")[0]; - int firstDot = version.indexOf("."); - QString major = version.left(firstDot).toQString(); - QString minor = version.right(version.length() - firstDot - 1).toQString(); - minor.replace(".", ""); - project->values("QMAKE_LFLAGS").append("/VERSION:" + major + "." + minor); + // set /VERSION for EXE/DLL header + ProString major_minor = project->first("VERSION_PE_HEADER"); + if (major_minor.isEmpty()) { + ProString version = project->first("VERSION"); + if (!version.isEmpty()) { + int firstDot = version.indexOf("."); + int secondDot = version.indexOf(".", firstDot + 1); + major_minor = version.left(secondDot); + } } + if (!major_minor.isEmpty()) + project->values("QMAKE_LFLAGS").append("/VERSION:" + major_minor); if (project->isEmpty("QMAKE_LINK_O_FLAG")) project->values("QMAKE_LINK_O_FLAG").append("/OUT:"); -- cgit v1.2.3