summaryrefslogtreecommitdiffstats
path: root/tools/configure
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2016-09-01 10:48:06 +0200
committerSimon Hausmann <simon.hausmann@qt.io>2016-09-03 20:13:50 +0000
commit5971b88ecd08a81720c3556029cecd35b0cf2cb5 (patch)
treee294a449b2c9f486b7c7b9e5cc95fd4f93cec967 /tools/configure
parent8d8c7b31bafc30328f0daa8c814623bc5643490e (diff)
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>
Diffstat (limited to 'tools/configure')
-rw-r--r--tools/configure/configureapp.cpp10
-rw-r--r--tools/configure/environment.cpp24
-rw-r--r--tools/configure/environment.h1
3 files changed, 35 insertions, 0 deletions
diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp
index f2b54f57f2..88dcd8170b 100644
--- a/tools/configure/configureapp.cpp
+++ b/tools/configure/configureapp.cpp
@@ -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")) {
diff --git a/tools/configure/environment.cpp b/tools/configure/environment.cpp
index 5e28fda11d..10cf5ace2a 100644
--- a/tools/configure/environment.cpp
+++ b/tools/configure/environment.cpp
@@ -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
diff --git a/tools/configure/environment.h b/tools/configure/environment.h
index 927c3e294f..d096782e70 100644
--- a/tools/configure/environment.h
+++ b/tools/configure/environment.h
@@ -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);