summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config.tests/win/msvc_version.cpp1
-rw-r--r--configure.json10
-rw-r--r--configure.pri63
-rw-r--r--mkspecs/common/msvc-desktop.conf2
-rw-r--r--mkspecs/features/data/macros.cpp28
-rw-r--r--mkspecs/features/toolchain.prf76
-rw-r--r--mkspecs/winphone-arm-msvc2013/qmake.conf1
-rw-r--r--mkspecs/winphone-x86-msvc2013/qmake.conf1
-rw-r--r--mkspecs/winrt-arm-msvc2013/qmake.conf1
-rw-r--r--mkspecs/winrt-arm-msvc2015/qmake.conf1
-rw-r--r--mkspecs/winrt-x64-msvc2013/qmake.conf1
-rw-r--r--mkspecs/winrt-x64-msvc2015/qmake.conf2
-rw-r--r--mkspecs/winrt-x86-msvc2013/qmake.conf2
-rw-r--r--mkspecs/winrt-x86-msvc2015/qmake.conf2
14 files changed, 108 insertions, 83 deletions
diff --git a/config.tests/win/msvc_version.cpp b/config.tests/win/msvc_version.cpp
deleted file mode 100644
index 3d7232e8e2..0000000000
--- a/config.tests/win/msvc_version.cpp
+++ /dev/null
@@ -1 +0,0 @@
-_MSC_FULL_VER
diff --git a/configure.json b/configure.json
index 1886f4074e..7d675c02be 100644
--- a/configure.json
+++ b/configure.json
@@ -253,11 +253,6 @@
"type": "compile",
"test": "common/c++98default"
},
- "compiler": {
- "label": "Compiler",
- "type": "checkCompiler",
- "log": "compilerDescription"
- },
"precompile_header": {
"label": "precompiled header support",
"type": "compile",
@@ -684,11 +679,6 @@
"condition": "features.c++14 && tests.c++1z",
"output": [ "publicFeature", "publicQtConfig" ]
},
- "compiler": {
- "label": "Compiler version",
- "condition": "tests.compiler",
- "output": [ "compilerVersion" ]
- },
"precompile_header": {
"label": "Using precompiled headers",
"condition": "config.msvc || tests.precompile_header",
diff --git a/configure.pri b/configure.pri
index 10eb8b287e..1744972f92 100644
--- a/configure.pri
+++ b/configure.pri
@@ -397,50 +397,6 @@ defineTest(qtConfTest_buildParts) {
return(true)
}
-defineTest(qtConfTest_checkCompiler) {
- contains(QMAKE_CXX, ".*clang.*") {
- qtRunLoggedCommand("$$QMAKE_CXX -v 2>&1", versionstr)|return(false)
- versionstr = "$$versionstr"
- contains(versionstr, "^Apple (clang|LLVM) version .*") {
- $${1}.compilerDescription = "Apple Clang"
- $${1}.compilerId = "apple_clang"
- $${1}.compilerVersion = $$replace(versionstr, "^Apple (clang|LLVM) version ([0-9.]+).*$", "\\2")
- } else: contains(versionstr, ".*clang version.*") {
- $${1}.compilerDescription = "Clang"
- $${1}.compilerId = "clang"
- $${1}.compilerVersion = $$replace(versionstr, "^.*clang version ([0-9.]+).*", "\\1")
- } else {
- return(false)
- }
- } else: contains(QMAKE_CXX, ".*g\\+\\+.*") {
- qtRunLoggedCommand("$$QMAKE_CXX -dumpversion", version)|return(false)
- $${1}.compilerDescription = "GCC"
- $${1}.compilerId = "gcc"
- $${1}.compilerVersion = $$version
- } else: contains(QMAKE_CXX, ".*icpc") {
- qtRunLoggedCommand("$$QMAKE_CXX -dumpversion", version)|return(false)
- $${1}.compilerDescription = "ICC"
- $${1}.compilerId = "icc"
- $${1}.compilerVersion = $$version
- } else: msvc {
- command = $$QMAKE_CXX /EP /nologo $$source $$system_quote($$QMAKE_CONFIG_TESTS_DIR/win/msvc_version.cpp)
- qtRunLoggedCommand("$$command", version)|return(false)
- version = "$$version"
- $${1}.compilerDescription = "MSVC"
- $${1}.compilerId = "cl"
- $${1}.compilerVersion = $$replace(version, "^.*([0-9]{2})([0-9]{2})([0-9]{5}).*$", "\\1.\\2.\\3")
- } else {
- return(false)
- }
- $${1}.compilerDescription += $$eval($${1}.compilerVersion)
- export($${1}.compilerDescription)
- export($${1}.compilerId)
- export($${1}.compilerVersion)
- $${1}.cache += compilerDescription compilerId compilerVersion
- export($${1}.cache)
- return(true)
-}
-
# custom outputs
# this reloads the qmakespec as completely as reasonably possible.
@@ -947,25 +903,6 @@ defineTest(qtConfOutput_debugAndRelease) {
}
}
-defineTest(qtConfOutput_compilerVersion) {
- !$${2}: return()
-
- name = $$upper($$eval($${currentConfig}.tests.compiler.compilerId))
- version = $$eval($${currentConfig}.tests.compiler.compilerVersion)
- major = $$section(version, '.', 0, 0)
- minor = $$section(version, '.', 1, 1)
- patch = $$section(version, '.', 2, 2)
- isEmpty(minor): minor = 0
- isEmpty(patch): patch = 0
-
- $${currentConfig}.output.publicPro += \
- "QT_$${name}_MAJOR_VERSION = $$major" \
- "QT_$${name}_MINOR_VERSION = $$minor" \
- "QT_$${name}_PATCH_VERSION = $$patch"
-
- export($${currentConfig}.output.publicPro)
-}
-
defineTest(qtConfOutput_compilerFlags) {
# this output also exports the variables locally, so that subsequent compiler tests can use them
diff --git a/mkspecs/common/msvc-desktop.conf b/mkspecs/common/msvc-desktop.conf
index 1b9d57bff0..ebe804db64 100644
--- a/mkspecs/common/msvc-desktop.conf
+++ b/mkspecs/common/msvc-desktop.conf
@@ -16,7 +16,7 @@ QMAKE_PLATFORM = win32
QMAKE_COMPILER = msvc
CONFIG += incremental flat precompile_header autogen_precompile_source debug_and_release debug_and_release_target embed_manifest_dll embed_manifest_exe
DEFINES += UNICODE WIN32
-QMAKE_COMPILER_DEFINES += _MSC_VER=$$MSC_VER _WIN32
+QMAKE_COMPILER_DEFINES += _WIN32
contains(QMAKE_TARGET.arch, x86_64) {
DEFINES += WIN64
QMAKE_COMPILER_DEFINES += _WIN64
diff --git a/mkspecs/features/data/macros.cpp b/mkspecs/features/data/macros.cpp
new file mode 100644
index 0000000000..88473fb980
--- /dev/null
+++ b/mkspecs/features/data/macros.cpp
@@ -0,0 +1,28 @@
+// Keep this file small. The pre-processed contents are eval'd by qmake.
+#ifdef _MSC_VER
+QMAKE_MSC_VER = _MSC_VER
+QMAKE_MSC_FULL_VER = _MSC_FULL_VER
+#endif
+#ifdef __INTEL_COMPILER
+QMAKE_ICC_VER = __INTEL_COMPILER
+QMAKE_ICC_UPDATE_VER = __INTEL_COMPILER_UPDATE
+#endif
+#ifdef __APPLE_CC__
+QMAKE_APPLE_CC = __APPLE_CC__
+#endif
+#ifdef __clang__
+#ifdef __APPLE_CC__
+QT_APPLE_CLANG_MAJOR_VERSION = __clang_major__
+QT_APPLE_CLANG_MINOR_VERSION = __clang_minor__
+QT_APPLE_CLANG_PATCH_VERSION = __clang_patchlevel__
+#else
+QT_CLANG_MAJOR_VERSION = __clang_major__
+QT_CLANG_MINOR_VERSION = __clang_minor__
+QT_CLANG_PATCH_VERSION = __clang_patchlevel__
+#endif
+#endif
+#ifdef __GNUC__
+QT_GCC_MAJOR_VERSION = __GNUC__
+QT_GCC_MINOR_VERSION = __GNUC_MINOR__
+QT_GCC_PATCH_VERSION = __GNUC_PATCHLEVEL__
+#endif
diff --git a/mkspecs/features/toolchain.prf b/mkspecs/features/toolchain.prf
index 0ef0fa8fc7..2fccd64fc5 100644
--- a/mkspecs/features/toolchain.prf
+++ b/mkspecs/features/toolchain.prf
@@ -58,3 +58,79 @@ isEmpty(QMAKE_DEFAULT_INCDIRS):!host_build {
!isEmpty(QMAKE_DEFAULT_INCDIRS): cache(QMAKE_DEFAULT_INCDIRS, set stash)
!isEmpty(QMAKE_DEFAULT_LIBDIRS): cache(QMAKE_DEFAULT_LIBDIRS, set stash)
}
+
+#
+# Determine and cache the compiler version
+#
+
+defineReplace(qtVariablesFromMSVC) {
+ return($$system("$$1 -nologo -E $$2 $$system_quote($$PWD/data/macros.cpp) <NUL 2>NUL", lines))
+}
+
+defineReplace(qtVariablesFromGCC) {
+ null_device = /dev/null
+ equals(QMAKE_HOST.os, Windows): null_device = NUL
+ return($$system("$$1 -E $$system_quote($$PWD/data/macros.cpp) <$$null_device 2>$$null_device", lines))
+}
+
+host_build: \
+ target_prefix = QMAKE_HOST_CXX
+else: \
+ target_prefix = QMAKE_CXX
+
+isEmpty($${target_prefix}.COMPILER_MACROS) {
+ msvc {
+ vars = $$qtVariablesFromMSVC($$QMAKE_CXX $$QMAKE_CXXFLAGS)
+ } else: gcc {
+ vars = $$qtVariablesFromGCC($$QMAKE_CXX)
+ }
+ for (v, vars) {
+ isEmpty(v)|contains(v, $${LITERAL_HASH}.*): next()
+ # Set both <varname> for the outer scope ...
+ eval($$v)
+ v ~= s/ .*//
+ isEmpty($$v): error("Compiler produced empty value for $${v}.")
+ # ... and save QMAKE_(HOST_)?CXX.<varname> in the cache.
+ cache($${target_prefix}.$$v, set stash, $$v)
+ $${target_prefix}.COMPILER_MACROS += $$v
+ }
+ cache($${target_prefix}.COMPILER_MACROS, set stash)
+} else {
+ # load from the cache
+ for (i, $${target_prefix}.COMPILER_MACROS): \
+ $$i = $$eval($${target_prefix}.$$i)
+}
+
+unset(target_prefix)
+
+# Populate QMAKE_COMPILER_DEFINES and some compatibility variables.
+# The $$format_number() calls strip leading zeros to avoid misinterpretation as octal.
+!isEmpty(QMAKE_MSC_VER) {
+ QMAKE_COMPILER_DEFINES += _MSC_VER=$$QMAKE_MSC_VER _MSC_FULL_VER=$$QMAKE_MSC_FULL_VER
+ QT_MSVC_MAJOR_VERSION = $$replace(QMAKE_MSC_FULL_VER, "(..)(..)(.*)", "\\1")
+ QT_MSVC_MINOR_VERSION = $$format_number($$replace(QMAKE_MSC_FULL_VER, "(..)(..)(.*)", "\\2"))
+ QT_MSVC_PATCH_VERSION = $$replace(QMAKE_MSC_FULL_VER, "(..)(..)(.*)", "\\3"))
+}
+!isEmpty(QMAKE_ICC_VER) {
+ QMAKE_COMPILER_DEFINES += __INTEL_COMPILER=$$QMAKE_ICC_VER __INTEL_COMPILER_UPDATE=$$QMAKE_ICC_UPDATE_VER
+ QT_ICC_MAJOR_VERSION = $$replace(QMAKE_ICC_VER, "(..)(..)", "\\1")
+ QT_ICC_MINOR_VERSION = $$format_number($$replace(QMAKE_ICC_VER, "(..)(..)", "\\2"))
+ QT_ICC_PATCH_VERSION = $$QMAKE_ICC_UPDATE_VER
+}
+!isEmpty(QMAKE_APPLE_CC): \
+ QMAKE_COMPILER_DEFINES += __APPLE_CC__=$$QMAKE_APPLE_CC
+!isEmpty(QT_APPLE_CLANG_MAJOR_VERSION): \
+ QMAKE_COMPILER_DEFINES += __clang__ \
+ __clang_major__=$$QT_APPLE_CLANG_MAJOR_VERSION \
+ __clang_minor__=$$QT_APPLE_CLANG_MINOR_VERSION \
+ __clang_patchlevel__=$$QT_APPLE_CLANG_PATCH_VERSION
+!isEmpty(QT_CLANG_MAJOR_VERSION): \
+ QMAKE_COMPILER_DEFINES += __clang__ \
+ __clang_major__=$$QT_CLANG_MAJOR_VERSION \
+ __clang_minor__=$$QT_CLANG_MINOR_VERSION \
+ __clang_patchlevel__=$$QT_CLANG_PATCH_VERSION
+!isEmpty(QT_GCC_MAJOR_VERSION): \
+ QMAKE_COMPILER_DEFINES += \
+ __GNUC__=$$QT_GCC_MAJOR_VERSION \
+ __GNUC_MINOR__=$$QT_GCC_MINOR_VERSION \
+ __GNUC_PATCHLEVEL__=$$QT_GCC_PATCH_VERSION
diff --git a/mkspecs/winphone-arm-msvc2013/qmake.conf b/mkspecs/winphone-arm-msvc2013/qmake.conf
index ca2cc50e84..64ff295f14 100644
--- a/mkspecs/winphone-arm-msvc2013/qmake.conf
+++ b/mkspecs/winphone-arm-msvc2013/qmake.conf
@@ -5,7 +5,6 @@
#
include(../common/winrt_winphone/qmake.conf)
-QMAKE_COMPILER_DEFINES += _MSC_VER=1800
QMAKE_PLATFORM = winphone $$QMAKE_PLATFORM
DEFINES += WINAPI_FAMILY=WINAPI_FAMILY_PHONE_APP ARM __ARM__ __ARM__
CONFIG += no_generated_target_info
diff --git a/mkspecs/winphone-x86-msvc2013/qmake.conf b/mkspecs/winphone-x86-msvc2013/qmake.conf
index ad8dbe1fee..bc074f03dd 100644
--- a/mkspecs/winphone-x86-msvc2013/qmake.conf
+++ b/mkspecs/winphone-x86-msvc2013/qmake.conf
@@ -5,7 +5,6 @@
#
include(../common/winrt_winphone/qmake.conf)
-QMAKE_COMPILER_DEFINES += _MSC_VER=1800
QMAKE_PLATFORM = winphone $$QMAKE_PLATFORM
DEFINES += WINAPI_FAMILY=WINAPI_FAMILY_PHONE_APP X86 __X86__ __x86__
CONFIG += no_generated_target_info
diff --git a/mkspecs/winrt-arm-msvc2013/qmake.conf b/mkspecs/winrt-arm-msvc2013/qmake.conf
index f8b48b0829..547884ce7e 100644
--- a/mkspecs/winrt-arm-msvc2013/qmake.conf
+++ b/mkspecs/winrt-arm-msvc2013/qmake.conf
@@ -5,7 +5,6 @@
#
include(../common/winrt_winphone/qmake.conf)
-QMAKE_COMPILER_DEFINES += _MSC_VER=1800
DEFINES += WINAPI_FAMILY=WINAPI_FAMILY_PC_APP ARM __ARM__ __arm__
QMAKE_CFLAGS += -FS
diff --git a/mkspecs/winrt-arm-msvc2015/qmake.conf b/mkspecs/winrt-arm-msvc2015/qmake.conf
index 7a9375246d..ef145ae44b 100644
--- a/mkspecs/winrt-arm-msvc2015/qmake.conf
+++ b/mkspecs/winrt-arm-msvc2015/qmake.conf
@@ -6,7 +6,6 @@
MSC_VER = 1900
include(../common/winrt_winphone/qmake.conf)
-QMAKE_COMPILER_DEFINES += _MSC_VER=1900
DEFINES += WINAPI_FAMILY=WINAPI_FAMILY_PC_APP WINAPI_PARTITION_PHONE_APP=1 ARM __ARM__ __arm__
QMAKE_CFLAGS += -FS
diff --git a/mkspecs/winrt-x64-msvc2013/qmake.conf b/mkspecs/winrt-x64-msvc2013/qmake.conf
index 594d0dafd0..c90db8b314 100644
--- a/mkspecs/winrt-x64-msvc2013/qmake.conf
+++ b/mkspecs/winrt-x64-msvc2013/qmake.conf
@@ -5,7 +5,6 @@
#
include(../common/winrt_winphone/qmake.conf)
-QMAKE_COMPILER_DEFINES += _MSC_VER=1800
DEFINES += WINAPI_FAMILY=WINAPI_FAMILY_APP X64 __X64__ __x64__
QMAKE_CFLAGS += -FS
diff --git a/mkspecs/winrt-x64-msvc2015/qmake.conf b/mkspecs/winrt-x64-msvc2015/qmake.conf
index ca2dc88bf0..3bf5aa4bc8 100644
--- a/mkspecs/winrt-x64-msvc2015/qmake.conf
+++ b/mkspecs/winrt-x64-msvc2015/qmake.conf
@@ -6,7 +6,7 @@
MSC_VER = 1900
include(../common/winrt_winphone/qmake.conf)
-QMAKE_COMPILER_DEFINES += _MSC_VER=1900 _WIN32
+QMAKE_COMPILER_DEFINES += _WIN32
DEFINES += WINAPI_FAMILY=WINAPI_FAMILY_PC_APP WINAPI_PARTITION_PHONE_APP=1 X64 __X64__ __x64__
QMAKE_CFLAGS += -FS
diff --git a/mkspecs/winrt-x86-msvc2013/qmake.conf b/mkspecs/winrt-x86-msvc2013/qmake.conf
index 3359102e7e..729a0ba068 100644
--- a/mkspecs/winrt-x86-msvc2013/qmake.conf
+++ b/mkspecs/winrt-x86-msvc2013/qmake.conf
@@ -5,7 +5,7 @@
#
include(../common/winrt_winphone/qmake.conf)
-QMAKE_COMPILER_DEFINES += _MSC_VER=1800 _WIN32
+QMAKE_COMPILER_DEFINES += _WIN32
DEFINES += WINAPI_FAMILY=WINAPI_FAMILY_PC_APP X86 __X86__ __x86__
QMAKE_CFLAGS += -FS
diff --git a/mkspecs/winrt-x86-msvc2015/qmake.conf b/mkspecs/winrt-x86-msvc2015/qmake.conf
index 3b2681e93d..00d9126790 100644
--- a/mkspecs/winrt-x86-msvc2015/qmake.conf
+++ b/mkspecs/winrt-x86-msvc2015/qmake.conf
@@ -6,7 +6,7 @@
MSC_VER = 1900
include(../common/winrt_winphone/qmake.conf)
-QMAKE_COMPILER_DEFINES += _MSC_VER=1900 _WIN32
+QMAKE_COMPILER_DEFINES += _WIN32
DEFINES += WINAPI_FAMILY=WINAPI_FAMILY_PC_APP WINAPI_PARTITION_PHONE_APP=1 X86 __X86__ __x86__
QMAKE_CFLAGS += -FS