configure.exe: Write MSVC compiler version to qconfig.pri
Backport a feature of the new configure system setting the variables QT_CL_MAJOR_VERSION, QT_CL_MINOR_VERSION, QT_CL_PATCH_VERSION similarly to the existing variables for gcc. This allows for disabling optimizations depending on the compiler version. Task-number: QTBUG-55238 Change-Id: If2349b008c1049e2ab98a5c1160b244a6e8937a8 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
This commit is contained in:
parent
8d8c7b31ba
commit
5971b88ecd
@ -314,6 +314,12 @@ Configure::Configure(int& argc, char** argv) : verbose(0)
|
||||
dictionary["QT_GCC_MAJOR_VERSION"] = parts.value(0, zero);
|
||||
dictionary["QT_GCC_MINOR_VERSION"] = parts.value(1, zero);
|
||||
dictionary["QT_GCC_PATCH_VERSION"] = parts.value(2, zero);
|
||||
} else if (dictionary["QMAKESPEC"].contains(QString("msvc"))) {
|
||||
const QString zero = QStringLiteral("0");
|
||||
const QStringList parts = Environment::msvcVersion().split(QLatin1Char('.'));
|
||||
dictionary["QT_CL_MAJOR_VERSION"] = parts.value(0, zero);
|
||||
dictionary["QT_CL_MINOR_VERSION"] = parts.value(1, zero);
|
||||
dictionary["QT_CL_PATCH_VERSION"] = parts.value(2, zero);
|
||||
}
|
||||
}
|
||||
|
||||
@ -3629,6 +3635,10 @@ void Configure::generateQConfigPri()
|
||||
configStream << "QT_GCC_MAJOR_VERSION = " << dictionary["QT_GCC_MAJOR_VERSION"] << endl
|
||||
<< "QT_GCC_MINOR_VERSION = " << dictionary["QT_GCC_MINOR_VERSION"] << endl
|
||||
<< "QT_GCC_PATCH_VERSION = " << dictionary["QT_GCC_PATCH_VERSION"] << endl;
|
||||
} else if (!dictionary["QT_CL_MAJOR_VERSION"].isEmpty()) {
|
||||
configStream << "QT_CL_MAJOR_VERSION = " << dictionary["QT_CL_MAJOR_VERSION"] << endl
|
||||
<< "QT_CL_MINOR_VERSION = " << dictionary["QT_CL_MINOR_VERSION"] << endl
|
||||
<< "QT_CL_PATCH_VERSION = " << dictionary["QT_CL_PATCH_VERSION"] << endl;
|
||||
}
|
||||
|
||||
if (dictionary.value("XQMAKESPEC").startsWith("wince")) {
|
||||
|
@ -169,6 +169,30 @@ QString Environment::gccVersion()
|
||||
return version;
|
||||
}
|
||||
|
||||
QString Environment::msvcVersion()
|
||||
{
|
||||
int returnValue = 0;
|
||||
// Extract version from standard error output of "cl /?"
|
||||
const QString command = QFile::decodeName(qgetenv("ComSpec"))
|
||||
+ QLatin1String(" /c ") + QLatin1String(compilerInfo(CC_MSVC2015)->executable)
|
||||
+ QLatin1String(" /? 2>&1");
|
||||
QString version = execute(command, &returnValue);
|
||||
if (returnValue != 0) {
|
||||
cout << "Could not get cl version" << returnValue << qPrintable(version) << '\n';;
|
||||
version.clear();
|
||||
} else {
|
||||
QRegExp versionRegexp(QStringLiteral("^.*Compiler Version ([0-9.]+) for.*$"));
|
||||
Q_ASSERT(versionRegexp.isValid());
|
||||
if (versionRegexp.exactMatch(version)) {
|
||||
version = versionRegexp.cap(1);
|
||||
} else {
|
||||
cout << "Unable to determine cl version from the output of \""
|
||||
<< qPrintable(command) << "\"\n";
|
||||
}
|
||||
}
|
||||
return version;
|
||||
}
|
||||
|
||||
/*!
|
||||
Returns the enum of the compiler which was detected on the system.
|
||||
The compilers are detected in the order as entered into the
|
||||
|
@ -57,6 +57,7 @@ public:
|
||||
static QString detectQMakeSpec();
|
||||
static Compiler compilerFromQMakeSpec(const QString &qmakeSpec);
|
||||
static QString gccVersion();
|
||||
static QString msvcVersion();
|
||||
|
||||
static int execute(QStringList arguments, const QStringList &additionalEnv, const QStringList &removeEnv);
|
||||
static QString execute(const QString &command, int *returnCode = 0);
|
||||
|
Loading…
x
Reference in New Issue
Block a user