diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2021-08-20 14:19:06 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2021-08-23 16:04:09 +0000 |
commit | fab34969088f950d2206eca027ef972e2e0075d2 (patch) | |
tree | ecc44336b20c5d9455806056ea05d484a1cf8e67 | |
parent | 16e7e824724e5c74d6589714f2b1f93183563676 (diff) |
cpp module: Add support for C++23
Change-Id: Iccc5c9a10d1934e2170f75d194ed103b45bfac53
Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
-rw-r--r-- | doc/reference/modules/cpp-module.qdoc | 3 | ||||
-rw-r--r-- | share/qbs/modules/cpp/gcc.js | 16 | ||||
-rw-r--r-- | share/qbs/modules/cpp/msvc.js | 10 | ||||
-rw-r--r-- | tests/auto/blackbox/testdata/maximum-cxx-language-version/modules/newestmodule/newestmodule.qbs | 2 | ||||
-rw-r--r-- | tests/auto/blackbox/tst_blackbox.cpp | 2 |
5 files changed, 25 insertions, 8 deletions
diff --git a/doc/reference/modules/cpp-module.qdoc b/doc/reference/modules/cpp-module.qdoc index 1483dc9c7..936c7373b 100644 --- a/doc/reference/modules/cpp-module.qdoc +++ b/doc/reference/modules/cpp-module.qdoc @@ -854,7 +854,8 @@ If the value is left undefined, the compiler default will be used. If the list contains more than one value, the highest version is chosen. - Possible values include: \c{"c++98"}, \c{"c++11"}, \c{"c++14"}, \c{"c++17"}, \c{"c++20"}. + Possible values include: \c{"c++98"}, \c{"c++11"}, \c{"c++14"}, \c{"c++17"}, \c{"c++20"}, + \c{"c++23"}. \nodefaultvalue */ diff --git a/share/qbs/modules/cpp/gcc.js b/share/qbs/modules/cpp/gcc.js index 5fce2bbe4..120e601a5 100644 --- a/share/qbs/modules/cpp/gcc.js +++ b/share/qbs/modules/cpp/gcc.js @@ -710,9 +710,17 @@ function standardFallbackValueOrDefault(toolchain, compilerVersion, languageVers "c++20": { "fallback": "c++2a", "toolchains": [ - {"name": "xcode"}, // not yet implemented - {"name": "clang"}, // not yet implemented - {"name": "gcc"} // not yet implemented + {"name": "xcode"}, // ?? + {"name": "clang", "version": "11.0"}, + {"name": "gcc", "version": "10.1"} + ] + }, + "c++23": { + "fallback": "c++2b", + "toolchains": [ + {"name": "xcode"}, + {"name": "clang"}, + {"name": "gcc"} ] } }; @@ -876,7 +884,7 @@ function compilerFlags(project, product, input, output, explicitlyDependsOn) { return Cpp.languageVersion(input.cpp.cLanguageVersion, knownValues, "C"); case "cpp": case "objcpp": - knownValues = ["c++20", "c++2a", "c++17", "c++1z", + knownValues = ["c++23", "c++2b", "c++20", "c++2a", "c++17", "c++1z", "c++14", "c++1y", "c++11", "c++0x", "c++03", "c++98"]; return Cpp.languageVersion(input.cpp.cxxLanguageVersion, knownValues, "C++"); diff --git a/share/qbs/modules/cpp/msvc.js b/share/qbs/modules/cpp/msvc.js index c56f84f5f..8906cd9e3 100644 --- a/share/qbs/modules/cpp/msvc.js +++ b/share/qbs/modules/cpp/msvc.js @@ -96,6 +96,12 @@ function hasZCplusPlusOption(input) || (input.qbs.toolchain.contains("clang-cl") && input.cpp.compilerVersionMajor >= 9); } +function hasCxx20Option(input) +{ + return Utilities.versionCompare(input.cpp.compilerVersion, "19.29.30133.0") >= 0 + || (input.qbs.toolchain.contains("clang-cl") && input.cpp.compilerVersionMajor >= 13); +} + function supportsExternalIncludesOption(input) { if (input.qbs.toolchain.contains("clang-cl")) return false; // Exclude clang-cl. @@ -108,7 +114,7 @@ function supportsExternalIncludesOption(input) { function addLanguageVersionFlag(input, args) { var cxxVersion = Cpp.languageVersion(input.cpp.cxxLanguageVersion, - ["c++20", "c++17", "c++14", "c++11", "c++98"], "C++"); + ["c++23", "c++20", "c++17", "c++14", "c++11", "c++98"], "C++"); if (!cxxVersion) return; @@ -124,6 +130,8 @@ function addLanguageVersionFlag(input, args) { flag = "/std:c++14"; else if (cxxVersion === "c++17" && hasCxx17Option(input)) flag = "/std:c++17"; + else if (cxxVersion === "c++20" && hasCxx20Option(input)) + flag = "/std:c++20"; else if (cxxVersion !== "c++11" && cxxVersion !== "c++98") flag = "/std:c++latest"; if (flag) diff --git a/tests/auto/blackbox/testdata/maximum-cxx-language-version/modules/newestmodule/newestmodule.qbs b/tests/auto/blackbox/testdata/maximum-cxx-language-version/modules/newestmodule/newestmodule.qbs index f99932b10..305cb29f1 100644 --- a/tests/auto/blackbox/testdata/maximum-cxx-language-version/modules/newestmodule/newestmodule.qbs +++ b/tests/auto/blackbox/testdata/maximum-cxx-language-version/modules/newestmodule/newestmodule.qbs @@ -1,4 +1,4 @@ Module { Depends { name: "cpp" } - cpp.cxxLanguageVersion: "c++17" + cpp.cxxLanguageVersion: "c++23" } diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp index 1082ba595..aabc85441 100644 --- a/tests/auto/blackbox/tst_blackbox.cpp +++ b/tests/auto/blackbox/tst_blackbox.cpp @@ -7706,7 +7706,7 @@ void TestBlackbox::maximumCxxLanguageVersion() QCOMPARE(runQbs(QbsRunParameters("resolve", QStringList("products.app.enableNewestModule:true"))), 0); QCOMPARE(runQbs(QStringList({"--command-echo-mode", "command-line", "-n"})), 0); - QVERIFY2(m_qbsStdout.contains("c++17") || m_qbsStdout.contains("c++1z") + QVERIFY2(m_qbsStdout.contains("c++23") || m_qbsStdout.contains("c++2b") || m_qbsStdout.contains("c++latest"), m_qbsStdout.constData()); QCOMPARE(runQbs(QbsRunParameters("resolve", QStringList("products.app.enableNewestModule:false"))), 0); |