summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2019-04-17 16:01:46 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2019-04-19 08:14:25 +0000
commit51bae0331c1fde52d0b3f1184d38a2be462ebd42 (patch)
tree400fd6ea93b81921d7f63f4944032a672fb3c8ea
parent38deb05109bcee9ad25a10eff024eaf8ce7a57f1 (diff)
Add qmake support for c++2a
Makes it possible to build user projects and Qt with C++2a. It is not automatically upgraded to yet though. Change-Id: I949ce94871ddc53f21b7265a52b9c0e1370456c8 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
-rw-r--r--config_help.txt2
-rw-r--r--configure.json22
-rw-r--r--configure.pri8
-rw-r--r--mkspecs/common/clang.conf2
-rw-r--r--mkspecs/common/g++-base.conf2
-rw-r--r--mkspecs/common/msvc-version.conf2
-rw-r--r--mkspecs/features/default_post.prf7
-rw-r--r--mkspecs/features/qt_common.prf1
8 files changed, 41 insertions, 5 deletions
diff --git a/config_help.txt b/config_help.txt
index d63f9be5f8..6b27529bdc 100644
--- a/config_help.txt
+++ b/config_help.txt
@@ -139,7 +139,7 @@ Build options:
-coverage {trace-pc-guard}
Add code coverage instrumentation (Clang only)
- -c++std <edition> .... Select C++ standard <edition> [c++17/c++14/c++11]
+ -c++std <edition> .... Select C++ standard <edition> [c++2a/c++17/c++14/c++11]
(Not supported with MSVC 2015)
-sse2 ................ Use SSE2 instructions [auto]
diff --git a/configure.json b/configure.json
index da8308a80c..7f3018ed23 100644
--- a/configure.json
+++ b/configure.json
@@ -339,6 +339,20 @@
"qmake": "CONFIG += c++11 c++14 c++1z"
}
},
+ "c++2a": {
+ "label": "C++2a support",
+ "type": "compile",
+ "test": {
+ "head": [
+ "#if __cplusplus > 201703L",
+ "// Compiler claims to support experimental C++2a, trust it",
+ "#else",
+ "# error __cplusplus must be > 201703L (the value for C++17)",
+ "#endif"
+ ],
+ "qmake": "CONFIG += c++11 c++14 c++1z c++2a"
+ }
+ },
"precompile_header": {
"label": "precompiled header support",
"type": "compile",
@@ -911,6 +925,12 @@
"condition": "features.c++14 && tests.c++1z",
"output": [ "publicFeature", "publicQtConfig" ]
},
+ "c++2a": {
+ "label": "C++2a",
+ "autoDetect": false,
+ "condition": "features.c++1z && tests.c++2a",
+ "output": [ "publicFeature", "publicQtConfig" ]
+ },
"c89": {
"label": "C89"
},
@@ -1413,7 +1433,7 @@ Configure with '-qreal float' to create a build that is binary-compatible with 5
{
"message": "Using C++ standard",
"type": "firstAvailableFeature",
- "args": "c++1z c++14 c++11"
+ "args": "c++2a c++1z c++14 c++11"
},
{
"type": "feature",
diff --git a/configure.pri b/configure.pri
index bfc0ca013f..81133da3d7 100644
--- a/configure.pri
+++ b/configure.pri
@@ -20,12 +20,20 @@ defineTest(qtConfCommandline_cxxstd) {
!contains(val, "^-.*"):!isEmpty(val) {
contains(val, "(c\+\+)?11") {
qtConfCommandlineSetInput("c++14", "no")
+ qtConfCommandlineSetInput("c++1z", "no")
+ qtConfCommandlineSetInput("c++2a", "no")
} else: contains(val, "(c\+\+)?(14|1y)") {
qtConfCommandlineSetInput("c++14", "yes")
qtConfCommandlineSetInput("c++1z", "no")
+ qtConfCommandlineSetInput("c++2a", "no")
} else: contains(val, "(c\+\+)?(17|1z)") {
qtConfCommandlineSetInput("c++14", "yes")
qtConfCommandlineSetInput("c++1z", "yes")
+ qtConfCommandlineSetInput("c++2a", "no")
+ } else: contains(val, "(c\+\+)?(2a)") {
+ qtConfCommandlineSetInput("c++14", "yes")
+ qtConfCommandlineSetInput("c++1z", "yes")
+ qtConfCommandlineSetInput("c++2a", "yes")
} else {
qtConfAddError("Invalid argument $$val to command line parameter $$arg")
}
diff --git a/mkspecs/common/clang.conf b/mkspecs/common/clang.conf
index dacd1539cf..df210fe42d 100644
--- a/mkspecs/common/clang.conf
+++ b/mkspecs/common/clang.conf
@@ -31,9 +31,11 @@ QMAKE_CXXFLAGS_DISABLE_LTCG = $$QMAKE_CFLAGS_DISABLE_LTCG
QMAKE_CXXFLAGS_CXX11 = -std=c++11
QMAKE_CXXFLAGS_CXX14 = -std=c++1y
QMAKE_CXXFLAGS_CXX1Z = -std=c++1z
+QMAKE_CXXFLAGS_CXX2A = -std=c++2a
QMAKE_CXXFLAGS_GNUCXX11 = -std=gnu++11
QMAKE_CXXFLAGS_GNUCXX14 = -std=gnu++1y
QMAKE_CXXFLAGS_GNUCXX1Z = -std=gnu++1z
+QMAKE_CXXFLAGS_GNUCXX2A = -std=gnu++2a
QMAKE_LFLAGS_CXX11 =
QMAKE_LFLAGS_CXX14 =
diff --git a/mkspecs/common/g++-base.conf b/mkspecs/common/g++-base.conf
index fa0f0c391d..8053feb876 100644
--- a/mkspecs/common/g++-base.conf
+++ b/mkspecs/common/g++-base.conf
@@ -32,9 +32,11 @@ QMAKE_CFLAGS_GNUC11 = -std=gnu11
QMAKE_CXXFLAGS_CXX11 = -std=c++11
QMAKE_CXXFLAGS_CXX14 = -std=c++1y
QMAKE_CXXFLAGS_CXX1Z = -std=c++1z
+QMAKE_CXXFLAGS_CXX2A = -std=c++2a
QMAKE_CXXFLAGS_GNUCXX11 = -std=gnu++11
QMAKE_CXXFLAGS_GNUCXX14 = -std=gnu++1y
QMAKE_CXXFLAGS_GNUCXX1Z = -std=gnu++1z
+QMAKE_CXXFLAGS_GNUCXX2A = -std=gnu++2a
QMAKE_LFLAGS_CXX11 =
QMAKE_LFLAGS_CXX14 =
QMAKE_LFLAGS_CXX1Z =
diff --git a/mkspecs/common/msvc-version.conf b/mkspecs/common/msvc-version.conf
index 06af6abf13..af33132077 100644
--- a/mkspecs/common/msvc-version.conf
+++ b/mkspecs/common/msvc-version.conf
@@ -116,6 +116,8 @@ greaterThan(QMAKE_MSC_VER, 1910) {
greaterThan(QMAKE_MSC_VER, 1919) {
# Visual Studio 2019 (16.0) / Visual C++ 19.20 and up
MSVC_VER = 16.0
+ QMAKE_CXXFLAGS_CXX2A = -std:c++latest
+
}
!isEmpty(COMPAT_MKSPEC):!$$COMPAT_MKSPEC: CONFIG += $$COMPAT_MKSPEC
diff --git a/mkspecs/features/default_post.prf b/mkspecs/features/default_post.prf
index 69da78c5b7..9df99b8648 100644
--- a/mkspecs/features/default_post.prf
+++ b/mkspecs/features/default_post.prf
@@ -121,15 +121,16 @@ breakpad {
c++17: CONFIG += c++1z
-!c++11:!c++14:!c++1z {
+!c++11:!c++14:!c++1z:!c++2a {
# Qt requires C++11 since 5.7, check if we need to force a compiler option
QT_COMPILER_STDCXX_no_L = $$replace(QT_COMPILER_STDCXX, "L$", "")
!greaterThan(QT_COMPILER_STDCXX_no_L, 199711): CONFIG += c++11
}
-c++11|c++14|c++1z {
+c++11|c++14|c++1z|c++2a {
# Disable special compiler flags for host builds
!host_build|!cross_compile {
- c++1z: cxxstd = CXX1Z
+ c++2a: cxxstd = CXX2A
+ else: c++1z: cxxstd = CXX1Z
else: c++14: cxxstd = CXX14
else: cxxstd = CXX11
} else {
diff --git a/mkspecs/features/qt_common.prf b/mkspecs/features/qt_common.prf
index ae859a81ff..004b32fd22 100644
--- a/mkspecs/features/qt_common.prf
+++ b/mkspecs/features/qt_common.prf
@@ -17,6 +17,7 @@ DEFINES *= QT_NO_NARROWING_CONVERSIONS_IN_CONNECT
qtConfig(c++11): CONFIG += c++11 strict_c++
qtConfig(c++14): CONFIG += c++14
qtConfig(c++1z): CONFIG += c++1z
+qtConfig(c++2a): CONFIG += c++2a
qtConfig(c99): CONFIG += c99
qtConfig(c11): CONFIG += c11
qtConfig(stack-protector-strong): CONFIG += stack_protector_strong