Skip to content

Commit

Permalink
qmake: Recognize MSVC 16.x as VS 2019 in the VS project generator
Browse files Browse the repository at this point in the history
In a subsequent comment we will set the qmake variable MSVC_VER to 16.8
to check for the availability of certain compiler flags that were
introduced in that compiler version.

The old code compared exact version strings.  With this patch we're
checking version ranges instead and handle MSVC_VER 16.x as VS 2019.

Pick-to: 6.2 5.15
Task-number: QTBUG-89296
Change-Id: I9ea24a66f68a342a72f5c2a285bafacb8786661b
Reviewed-by: Alexandru Croitor <[email protected]>
  • Loading branch information
jobor committed Aug 26, 2021
1 parent 664a794 commit b073de2
Showing 1 changed file with 31 additions and 27 deletions.
58 changes: 31 additions & 27 deletions qmake/generators/win32/msvc_objectmodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,36 +40,40 @@ using namespace QMakeInternal;

QT_BEGIN_NAMESPACE

static DotNET vsVersionFromString(const char *versionString)
DotNET vsVersionFromString(const ProString &versionString)
{
struct VSVersionMapping
{
const char *str;
DotNET version;
};
static VSVersionMapping mapping[] = {
{ "7.0", NET2002 },
{ "7.1", NET2003 },
{ "8.0", NET2005 },
{ "9.0", NET2008 },
{ "10.0", NET2010 },
{ "11.0", NET2012 },
{ "12.0", NET2013 },
{ "14.0", NET2015 },
{ "15.0", NET2017 },
{ "16.0", NET2019 }
};
DotNET result = NETUnknown;
for (const auto entry : mapping) {
if (strcmp(entry.str, versionString) == 0)
return entry.version;
int idx = versionString.indexOf(QLatin1Char('.'));
if (idx == -1)
return NETUnknown;

QStringView versionView = versionString.toQStringView();
int versionMajor = versionView.left(idx).toInt();
int versionMinor = versionView.mid(idx + 1).toInt();

if (versionMajor == 16)
return NET2019;
if (versionMajor == 15)
return NET2017;
if (versionMajor == 14)
return NET2015;
if (versionMajor == 12)
return NET2013;
if (versionMajor == 11)
return NET2012;
if (versionMajor == 10)
return NET2010;
if (versionMajor == 9)
return NET2008;
if (versionMajor == 8)
return NET2005;
if (versionMajor == 7) {
if (versionMinor == 0)
return NET2002;
if (versionMinor == 1)
return NET2003;
}
return result;
}

DotNET vsVersionFromString(const ProString &versionString)
{
return vsVersionFromString(versionString.toLatin1().constData());
return NETUnknown;
}

// XML Tags ---------------------------------------------------------
Expand Down

0 comments on commit b073de2

Please sign in to comment.