[Cmake-commits] CMake branch, master, updated. v3.11.0-367-g8f5b696

Kitware Robot kwrobot at kitware.com
Mon Apr 2 10:05:08 EDT 2018


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, master has been updated
       via  8f5b6962c9f43fda7f1c771bb41fd6db92bc4045 (commit)
       via  1b6ec4b9e34a06c047cb41245587673959b5b591 (commit)
       via  5d5e1e691772ecfd9224be0afe33802f8aee3fc3 (commit)
       via  4c90e94368b5bda54e8e52bcad228f0d05804316 (commit)
       via  b66f18c84f89360768bf81c15ce0023840600e26 (commit)
       via  a53cf69022e57d859864d59b9c03238f180cb400 (commit)
       via  e62dfeccb1bb6a86a85f34908343a89f6d02ee6a (commit)
       via  c22cdf78d7be7283d7d031c7e9e15246d53354f8 (commit)
       via  8570dc7f64928ec7896197394f089f5ad063c6ca (commit)
       via  874d3d294889b4de25cecbca4347f8012199b153 (commit)
       via  7f295b1bd3c6f4b86ebf3711fa8d76cdaf4f51a5 (commit)
       via  71cb8ce3a1e1c41ffcd43760609defc574d2a65b (commit)
       via  8f146c45087bae5869f95cebce84134c917d28bf (commit)
       via  7fe580a36253281784dda9c35798693350e24859 (commit)
       via  1b328e09a33e61293635c7ddb9bcff986ae8d1e7 (commit)
       via  0bc3e5788a669f16383a586fee4684e9a08488dc (commit)
      from  a0b5dade9a494783e7b130e27e1dbc12fa1772c6 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=8f5b6962c9f43fda7f1c771bb41fd6db92bc4045
commit 8f5b6962c9f43fda7f1c771bb41fd6db92bc4045
Merge: 1b6ec4b 4c90e94
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Apr 2 14:01:01 2018 +0000
Commit:     Kitware Robot <kwrobot at kitware.com>
CommitDate: Mon Apr 2 10:03:12 2018 -0400

    Merge topic 'update-kwsys'
    
    4c90e94368 Merge branch 'upstream-KWSys' into update-kwsys
    b66f18c84f KWSys 2018-03-29 (488f2031)
    
    Acked-by: Kitware Robot <kwrobot at kitware.com>
    Merge-request: !1902


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=1b6ec4b9e34a06c047cb41245587673959b5b591
commit 1b6ec4b9e34a06c047cb41245587673959b5b591
Merge: 5d5e1e6 8570dc7
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Apr 2 14:00:00 2018 +0000
Commit:     Kitware Robot <kwrobot at kitware.com>
CommitDate: Mon Apr 2 10:01:23 2018 -0400

    Merge topic 'features-c++20'
    
    8570dc7f64 Help: Update compiler versions in cmake-compile-features.7.rst
    874d3d2948 Help: Add release note for C++ 20 support
    7f295b1bd3 Features: Activate C++ 20 support for Clang 5.0+
    71cb8ce3a1 Features: Activate C++ 20 support for GNU 8.0+
    8f146c4508 Features: Activate C++ 20 support for MSVC 19.12.25835+
    7fe580a362 Features: Add infrastructure for C++ 20 language standard
    1b328e09a3 Features: Use -std=c++17 for C++ 17 on Clang 5.0+
    0bc3e5788a Features: Use -std=c++17 for C++ 17 on GNU 8.0+
    
    Acked-by: Kitware Robot <kwrobot at kitware.com>
    Merge-request: !1892


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=5d5e1e691772ecfd9224be0afe33802f8aee3fc3
commit 5d5e1e691772ecfd9224be0afe33802f8aee3fc3
Merge: a0b5dad a53cf69
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Apr 2 13:59:50 2018 +0000
Commit:     Kitware Robot <kwrobot at kitware.com>
CommitDate: Mon Apr 2 10:00:20 2018 -0400

    Merge topic 'features-msvc-c'
    
    a53cf69022 Features: Record C features for MSVC
    e62dfeccb1 Features: Do not assume c_restrict support in CompileFeatures test
    c22cdf78d7 Features: Fix CompileFeatures test checks for C
    
    Acked-by: Kitware Robot <kwrobot at kitware.com>
    Acked-by: Harry Mallon <hjmallon at gmail.com>
    Merge-request: !1897


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=4c90e94368b5bda54e8e52bcad228f0d05804316
commit 4c90e94368b5bda54e8e52bcad228f0d05804316
Merge: 894a41f b66f18c
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Mar 29 11:41:57 2018 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Thu Mar 29 11:41:57 2018 -0400

    Merge branch 'upstream-KWSys' into update-kwsys
    
    * upstream-KWSys:
      KWSys 2018-03-29 (488f2031)


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=b66f18c84f89360768bf81c15ce0023840600e26
commit b66f18c84f89360768bf81c15ce0023840600e26
Author:     KWSys Upstream <kwrobot at kitware.com>
AuthorDate: Thu Mar 29 11:41:23 2018 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Thu Mar 29 11:41:57 2018 -0400

    KWSys 2018-03-29 (488f2031)
    
    Code extracted from:
    
        https://gitlab.kitware.com/utils/kwsys.git
    
    at commit 488f203157792badb6204be513602d4e83884d21 (master).
    
    Upstream Shortlog
    -----------------
    
    Ben Boeckel (1):
          a3caaeec SystemTools: faster relative path codepath
    
    Brad King (1):
          805d9a7c Terminal: Add xterm-kitty to VT100 color support whitelist
    
    luz.paz (1):
          94484960 Source typo fix s/[Pp]athes/[Pp]aths/

diff --git a/SystemTools.cxx b/SystemTools.cxx
index 106afe5..52f509a 100644
--- a/SystemTools.cxx
+++ b/SystemTools.cxx
@@ -3344,15 +3344,20 @@ std::string SystemTools::RelativePath(const std::string& local,
 static std::string GetCasePathName(std::string const& pathIn)
 {
   std::string casePath;
-  std::vector<std::string> path_components;
-  SystemTools::SplitPath(pathIn, path_components);
-  if (path_components[0].empty()) // First component always exists.
-  {
-    // Relative paths cannot be converted.
+
+  // First check if the file is relative. We don't fix relative paths since the
+  // real case depends on the root directory and the given path fragment may
+  // have meaning elsewhere in the project.
+  if (!SystemTools::FileIsFullPath(pathIn)) {
+    // This looks unnecessary, but it allows for the return value optimization
+    // since all return paths return the same local variable.
     casePath = pathIn;
     return casePath;
   }
 
+  std::vector<std::string> path_components;
+  SystemTools::SplitPath(pathIn, path_components);
+
   // Start with root component.
   std::vector<std::string>::size_type idx = 0;
   casePath = path_components[idx++];
diff --git a/Terminal.c b/Terminal.c
index eaa5c7d..c9f9dc5 100644
--- a/Terminal.c
+++ b/Terminal.c
@@ -153,6 +153,7 @@ static const char* kwsysTerminalVT100Names[] = { "Eterm",
                                                  "xterm-88color",
                                                  "xterm-color",
                                                  "xterm-debian",
+                                                 "xterm-kitty",
                                                  "xterm-termite",
                                                  0 };
 
diff --git a/testSystemTools.cxx b/testSystemTools.cxx
index e436a2b..a6d934b 100644
--- a/testSystemTools.cxx
+++ b/testSystemTools.cxx
@@ -738,29 +738,29 @@ static bool CheckGetPath()
 #endif
   const char* registryPath = "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MyApp; MyKey]";
 
-  std::vector<std::string> originalPathes;
-  originalPathes.push_back(registryPath);
+  std::vector<std::string> originalPaths;
+  originalPaths.push_back(registryPath);
 
-  std::vector<std::string> expectedPathes;
-  expectedPathes.push_back(registryPath);
+  std::vector<std::string> expectedPaths;
+  expectedPaths.push_back(registryPath);
 #ifdef _WIN32
-  expectedPathes.push_back("C:/Somewhere/something");
-  expectedPathes.push_back("D:/Temp");
+  expectedPaths.push_back("C:/Somewhere/something");
+  expectedPaths.push_back("D:/Temp");
 #else
-  expectedPathes.push_back("/Somewhere/something");
-  expectedPathes.push_back("/tmp");
+  expectedPaths.push_back("/Somewhere/something");
+  expectedPaths.push_back("/tmp");
 #endif
 
   bool res = true;
   res &= CheckPutEnv(std::string(envName) + "=" + envValue, envName, envValue);
 
-  std::vector<std::string> pathes = originalPathes;
-  kwsys::SystemTools::GetPath(pathes, envName);
+  std::vector<std::string> paths = originalPaths;
+  kwsys::SystemTools::GetPath(paths, envName);
 
-  if (pathes != expectedPathes) {
-    std::cerr << "GetPath(" << StringVectorToString(originalPathes) << ", "
-              << envName << ")  yielded " << StringVectorToString(pathes)
-              << " instead of " << StringVectorToString(expectedPathes)
+  if (paths != expectedPaths) {
+    std::cerr << "GetPath(" << StringVectorToString(originalPaths) << ", "
+              << envName << ")  yielded " << StringVectorToString(paths)
+              << " instead of " << StringVectorToString(expectedPaths)
               << std::endl;
     res = false;
   }

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=a53cf69022e57d859864d59b9c03238f180cb400
commit a53cf69022e57d859864d59b9c03238f180cb400
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Wed Mar 28 10:56:58 2018 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Thu Mar 29 10:40:13 2018 -0400

    Features: Record C features for MSVC
    
    The MSVC C compiler has no notion of C language standards or flags.
    Tell CMake to assume that all language standards are available.
    Record available C language features depending on the version of
    the compiler.
    
    Fixes: #17858

diff --git a/Help/release/dev/features-msvc-c.rst b/Help/release/dev/features-msvc-c.rst
new file mode 100644
index 0000000..0c55544
--- /dev/null
+++ b/Help/release/dev/features-msvc-c.rst
@@ -0,0 +1,5 @@
+features-msvc-c
+---------------
+
+* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
+  is now aware of the availability of C features in MSVC since VS 2010.
diff --git a/Modules/Compiler/MSVC-C-FeatureTests.cmake b/Modules/Compiler/MSVC-C-FeatureTests.cmake
new file mode 100644
index 0000000..3f09be2
--- /dev/null
+++ b/Modules/Compiler/MSVC-C-FeatureTests.cmake
@@ -0,0 +1,8 @@
+set(_cmake_oldestSupported "_MSC_VER >= 1600")
+
+# Not yet supported:
+#set(_cmake_feature_test_c_static_assert "")
+#set(_cmake_feature_test_c_restrict "")
+
+set(_cmake_feature_test_c_variadic_macros "${_cmake_oldestSupported}")
+set(_cmake_feature_test_c_function_prototypes "${_cmake_oldestSupported}")
diff --git a/Modules/Compiler/MSVC-C.cmake b/Modules/Compiler/MSVC-C.cmake
new file mode 100644
index 0000000..22c34f8
--- /dev/null
+++ b/Modules/Compiler/MSVC-C.cmake
@@ -0,0 +1,25 @@
+# MSVC has no specific options to set C language standards, but set them as
+# empty strings anyways so the feature test infrastructure can at least check
+# to see if they are defined.
+set(CMAKE_C90_STANDARD_COMPILE_OPTION "")
+set(CMAKE_C90_EXTENSION_COMPILE_OPTION "")
+set(CMAKE_C99_STANDARD_COMPILE_OPTION "")
+set(CMAKE_C99_EXTENSION_COMPILE_OPTION "")
+set(CMAKE_C11_STANDARD_COMPILE_OPTION "")
+set(CMAKE_C11_EXTENSION_COMPILE_OPTION "")
+
+# There is no meaningful default for this
+set(CMAKE_C_STANDARD_DEFAULT "")
+
+# There are no C compiler modes so we only need to test features once.
+# Override the default macro for this special case.  Pretend that
+# all language standards are available so that at least compilation
+# can be attempted.
+macro(cmake_record_c_compile_features)
+  list(APPEND CMAKE_C_COMPILE_FEATURES
+    c_std_90
+    c_std_99
+    c_std_11
+    )
+  _record_compiler_features(C "" CMAKE_C_COMPILE_FEATURES)
+endmacro()
diff --git a/Tests/CMakeCommands/target_compile_features/CMakeLists.txt b/Tests/CMakeCommands/target_compile_features/CMakeLists.txt
index 5096a58..9664025 100644
--- a/Tests/CMakeCommands/target_compile_features/CMakeLists.txt
+++ b/Tests/CMakeCommands/target_compile_features/CMakeLists.txt
@@ -1,5 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
-cmake_policy(SET CMP0057 NEW)
+cmake_minimum_required(VERSION 3.3)
 project(target_compile_features)
 
 set(CMAKE_VERBOSE_MAKEFILE ON)
@@ -19,7 +18,8 @@ if (c_restrict IN_LIST CMAKE_C_COMPILE_FEATURES)
   target_link_libraries(c_restrict_user_specific c_lib_restrict_specific)
 endif()
 
-if (c_std_99 IN_LIST CMAKE_C_COMPILE_FEATURES)
+if (c_std_99 IN_LIST CMAKE_C_COMPILE_FEATURES AND
+    NOT "${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
   add_executable(c_target_compile_features_meta main.c)
   target_compile_features(c_target_compile_features_meta
     PRIVATE c_std_99
diff --git a/Tests/CompileFeatures/CMakeLists.txt b/Tests/CompileFeatures/CMakeLists.txt
index 0271cd6..200aa79 100644
--- a/Tests/CompileFeatures/CMakeLists.txt
+++ b/Tests/CompileFeatures/CMakeLists.txt
@@ -254,6 +254,11 @@ if (C_expected_features)
         EXPECT_C_STATIC_ASSERT=0
         )
     endif()
+  elseif(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
+    list(APPEND expected_defs
+      EXPECT_C_RESTRICT=0
+      EXPECT_C_STATIC_ASSERT=0
+      )
   elseif (CMAKE_C_COMPILER_ID STREQUAL "SunPro")
     if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5.13)
       list(APPEND expected_defs

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=e62dfeccb1bb6a86a85f34908343a89f6d02ee6a
commit e62dfeccb1bb6a86a85f34908343a89f6d02ee6a
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Wed Mar 28 10:42:52 2018 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Mar 28 10:54:43 2018 -0400

    Features: Do not assume c_restrict support in CompileFeatures test
    
    Define `EXPECT_C_RESTRICT` separately for each compiler.

diff --git a/Tests/CompileFeatures/CMakeLists.txt b/Tests/CompileFeatures/CMakeLists.txt
index b560acd..0271cd6 100644
--- a/Tests/CompileFeatures/CMakeLists.txt
+++ b/Tests/CompileFeatures/CMakeLists.txt
@@ -227,43 +227,53 @@ if (C_expected_features)
   if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
     if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.6)
       list(APPEND expected_defs
+        EXPECT_C_RESTRICT=1
         EXPECT_C_STATIC_ASSERT=1
       )
     else()
       list(APPEND expected_defs
+        EXPECT_C_RESTRICT=1
         EXPECT_C_STATIC_ASSERT=0
       )
     endif()
   elseif(CMAKE_C_COMPILER_ID STREQUAL "Clang"
       OR CMAKE_C_COMPILER_ID STREQUAL "AppleClang")
     list(APPEND expected_defs
+      EXPECT_C_RESTRICT=1
       EXPECT_C_STATIC_ASSERT=1
     )
   elseif (CMAKE_C_COMPILER_ID STREQUAL "Intel")
     if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 15)
       list(APPEND expected_defs
+        EXPECT_C_RESTRICT=1
         EXPECT_C_STATIC_ASSERT=1
         )
     else()
       list(APPEND expected_defs
+        EXPECT_C_RESTRICT=1
         EXPECT_C_STATIC_ASSERT=0
         )
     endif()
   elseif (CMAKE_C_COMPILER_ID STREQUAL "SunPro")
     if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5.13)
       list(APPEND expected_defs
+        EXPECT_C_RESTRICT=1
         EXPECT_C_STATIC_ASSERT=1
         )
     else()
       list(APPEND expected_defs
+        EXPECT_C_RESTRICT=1
         EXPECT_C_STATIC_ASSERT=0
         )
     endif()
+  else()
+    list(APPEND expected_defs
+      EXPECT_C_RESTRICT=1
+      )
   endif()
 
   list(APPEND expected_defs
     EXPECT_C_FUNCTION_PROTOTYPES=1
-    EXPECT_C_RESTRICT=1
   )
 
   target_compile_definitions(CompileFeaturesGenex_C PRIVATE

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=c22cdf78d7be7283d7d031c7e9e15246d53354f8
commit c22cdf78d7be7283d7d031c7e9e15246d53354f8
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Wed Mar 28 10:38:29 2018 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Mar 28 10:54:41 2018 -0400

    Features: Fix CompileFeatures test checks for C
    
    Compare the HAVE_ and EXPECT_ macros as we do for CXX.

diff --git a/Tests/CompileFeatures/genex_test.c b/Tests/CompileFeatures/genex_test.c
index 1d54840..e58d793 100644
--- a/Tests/CompileFeatures/genex_test.c
+++ b/Tests/CompileFeatures/genex_test.c
@@ -8,7 +8,7 @@
 #error EXPECT_C_RESTRICT not defined
 #endif
 
-#if !EXPECT_C_STATIC_ASSERT
+#if !HAVE_C_STATIC_ASSERT
 #if EXPECT_C_STATIC_ASSERT
 #error "Expect c_static_assert feature"
 #endif
@@ -18,11 +18,17 @@
 #endif
 #endif
 
-#if !EXPECT_C_FUNCTION_PROTOTYPES
+#if !HAVE_C_FUNCTION_PROTOTYPES
+#if EXPECT_C_FUNCTION_PROTOTYPES
 #error Expect c_function_prototypes support
 #endif
+#else
+#if !EXPECT_C_FUNCTION_PROTOTYPES
+#error Expect no c_function_prototypes support
+#endif
+#endif
 
-#if !EXPECT_C_RESTRICT
+#if !HAVE_C_RESTRICT
 #if EXPECT_C_RESTRICT
 #error Expect c_restrict support
 #endif

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=8570dc7f64928ec7896197394f089f5ad063c6ca
commit 8570dc7f64928ec7896197394f089f5ad063c6ca
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Mar 26 14:38:24 2018 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Mar 27 07:42:07 2018 -0400

    Help: Update compiler versions in cmake-compile-features.7.rst

diff --git a/Help/manual/cmake-compile-features.7.rst b/Help/manual/cmake-compile-features.7.rst
index e9495c6..634da10 100644
--- a/Help/manual/cmake-compile-features.7.rst
+++ b/Help/manual/cmake-compile-features.7.rst
@@ -331,9 +331,9 @@ and :prop_gbl:`compile features <CMAKE_CXX_KNOWN_FEATURES>` available from
 the following :variable:`compiler ids <CMAKE_<LANG>_COMPILER_ID>` as of the
 versions specified for each:
 
-* ``AppleClang``: Apple Clang for Xcode versions 4.4 though 6.2.
-* ``Clang``: Clang compiler versions 2.9 through 3.4.
-* ``GNU``: GNU compiler versions 4.4 through 5.0.
+* ``AppleClang``: Apple Clang for Xcode versions 4.4 though 9.2.
+* ``Clang``: Clang compiler versions 2.9 through 6.0.
+* ``GNU``: GNU compiler versions 4.4 through 8.0.
 * ``MSVC``: Microsoft Visual Studio versions 2010 through 2017.
 * ``SunPro``: Oracle SolarisStudio versions 12.4 through 12.6.
 * ``Intel``: Intel compiler versions 12.1 through 17.0.
@@ -344,7 +344,7 @@ the following :variable:`compiler ids <CMAKE_<LANG>_COMPILER_ID>` as of the
 versions specified for each:
 
 * all compilers and versions listed above for C++.
-* ``GNU``: GNU compiler versions 3.4 through 5.0.
+* ``GNU``: GNU compiler versions 3.4 through 8.0.
 
 CMake is currently aware of the :prop_tgt:`C++ standards <CXX_STANDARD>` and
 their associated meta-features (e.g. ``cxx_std_11``) available from the
@@ -366,4 +366,4 @@ CMake is currently aware of the :prop_tgt:`CUDA standards <CUDA_STANDARD>`
 from the following :variable:`compiler ids <CMAKE_<LANG>_COMPILER_ID>` as of the
 versions specified for each:
 
-* ``NVIDIA``: NVIDIA nvcc compiler 7.5 though 8.0.
+* ``NVIDIA``: NVIDIA nvcc compiler 7.5 though 9.1.

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=874d3d294889b4de25cecbca4347f8012199b153
commit 874d3d294889b4de25cecbca4347f8012199b153
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Mar 26 14:32:06 2018 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Mar 27 07:42:07 2018 -0400

    Help: Add release note for C++ 20 support
    
    Fixes: #17849

diff --git a/Help/release/dev/features-c++20.rst b/Help/release/dev/features-c++20.rst
new file mode 100644
index 0000000..f7d050b
--- /dev/null
+++ b/Help/release/dev/features-c++20.rst
@@ -0,0 +1,6 @@
+features-c++20
+--------------
+
+* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
+  is now aware of C++ 20.  No specific features are yet enumerated besides
+  the ``cxx_std_20`` meta-feature.

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=7f295b1bd3c6f4b86ebf3711fa8d76cdaf4f51a5
commit 7f295b1bd3c6f4b86ebf3711fa8d76cdaf4f51a5
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Mar 26 14:29:04 2018 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Mar 27 07:42:07 2018 -0400

    Features: Activate C++ 20 support for Clang 5.0+

diff --git a/Modules/Compiler/Clang-CXX.cmake b/Modules/Compiler/Clang-CXX.cmake
index 8e8ab4f..321ddf6 100644
--- a/Modules/Compiler/Clang-CXX.cmake
+++ b/Modules/Compiler/Clang-CXX.cmake
@@ -39,6 +39,11 @@ if(NOT "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC")
     set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std=c++1z")
     set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std=gnu++1z")
   endif()
+
+  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0)
+    set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-std=c++2a")
+    set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-std=gnu++2a")
+  endif()
 else()
   # clang-cl does not know these options because it behaves like cl.exe
   set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "")

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=71cb8ce3a1e1c41ffcd43760609defc574d2a65b
commit 71cb8ce3a1e1c41ffcd43760609defc574d2a65b
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Mar 26 14:27:12 2018 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Mar 27 07:42:07 2018 -0400

    Features: Activate C++ 20 support for GNU 8.0+

diff --git a/Modules/Compiler/GNU-CXX.cmake b/Modules/Compiler/GNU-CXX.cmake
index 0b15d25..0058223 100644
--- a/Modules/Compiler/GNU-CXX.cmake
+++ b/Modules/Compiler/GNU-CXX.cmake
@@ -41,4 +41,9 @@ elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.1)
   set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std=gnu++1z")
 endif()
 
+if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.0)
+  set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-std=c++2a")
+  set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-std=gnu++2a")
+endif()
+
 __compiler_check_default_language_standard(CXX 3.4 98 6.0 14)

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=8f146c45087bae5869f95cebce84134c917d28bf
commit 8f146c45087bae5869f95cebce84134c917d28bf
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Mar 26 14:01:11 2018 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Mar 27 07:42:07 2018 -0400

    Features: Activate C++ 20 support for MSVC 19.12.25835+

diff --git a/Modules/Compiler/MSVC-CXX.cmake b/Modules/Compiler/MSVC-CXX.cmake
index 6a0c5d3..be259ff 100644
--- a/Modules/Compiler/MSVC-CXX.cmake
+++ b/Modules/Compiler/MSVC-CXX.cmake
@@ -22,6 +22,10 @@ if ((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.0.24215.1 AND
     set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std:c++latest")
     set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std:c++latest")
   endif()
+  if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.12.25835)
+    set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-std:c++latest")
+    set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-std:c++latest")
+  endif()
 
   __compiler_check_default_language_standard(CXX 19.0 14)
 

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=7fe580a36253281784dda9c35798693350e24859
commit 7fe580a36253281784dda9c35798693350e24859
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Mar 26 11:55:15 2018 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Mar 27 07:40:54 2018 -0400

    Features: Add infrastructure for C++ 20 language standard
    
    Issue: #17849

diff --git a/Help/prop_gbl/CMAKE_CXX_KNOWN_FEATURES.rst b/Help/prop_gbl/CMAKE_CXX_KNOWN_FEATURES.rst
index 2ad8157..262a67c 100644
--- a/Help/prop_gbl/CMAKE_CXX_KNOWN_FEATURES.rst
+++ b/Help/prop_gbl/CMAKE_CXX_KNOWN_FEATURES.rst
@@ -26,6 +26,9 @@ The features known to this version of CMake are:
 ``cxx_std_17``
   Compiler mode is aware of C++ 17.
 
+``cxx_std_20``
+  Compiler mode is aware of C++ 20.
+
 ``cxx_aggregate_default_initializers``
   Aggregate default initializers, as defined in N3605_.
 
diff --git a/Help/prop_tgt/CXX_STANDARD.rst b/Help/prop_tgt/CXX_STANDARD.rst
index 0762033..ccc0147 100644
--- a/Help/prop_tgt/CXX_STANDARD.rst
+++ b/Help/prop_tgt/CXX_STANDARD.rst
@@ -9,7 +9,7 @@ flag such as ``-std=gnu++11`` to the compile line.  For compilers that
 have no notion of a standard level, such as Microsoft Visual C++ before
 2015 Update 3, this has no effect.
 
-Supported values are ``98``, ``11``, ``14``, and ``17``.
+Supported values are ``98``, ``11``, ``14``, ``17``, and ``20``.
 
 If the value requested does not result in a compile flag being added for
 the compiler in use, a previous standard flag will be added instead.  This
diff --git a/Modules/CMakeCUDACompilerId.cu.in b/Modules/CMakeCUDACompilerId.cu.in
index 018bab7..6eda924 100644
--- a/Modules/CMakeCUDACompilerId.cu.in
+++ b/Modules/CMakeCUDACompilerId.cu.in
@@ -17,7 +17,9 @@ char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
 @CMAKE_CUDA_COMPILER_ID_ERROR_FOR_TEST@
 
 const char* info_language_dialect_default = "INFO" ":" "dialect_default["
-#if __cplusplus > 201402L
+#if __cplusplus > 201703L
+  "20"
+#elif __cplusplus >= 201703L
   "17"
 #elif __cplusplus >= 201402L
   "14"
diff --git a/Modules/CMakeCXXCompiler.cmake.in b/Modules/CMakeCXXCompiler.cmake.in
index df57a4f..974886d 100644
--- a/Modules/CMakeCXXCompiler.cmake.in
+++ b/Modules/CMakeCXXCompiler.cmake.in
@@ -10,6 +10,7 @@ set(CMAKE_CXX98_COMPILE_FEATURES "@CMAKE_CXX98_COMPILE_FEATURES@")
 set(CMAKE_CXX11_COMPILE_FEATURES "@CMAKE_CXX11_COMPILE_FEATURES@")
 set(CMAKE_CXX14_COMPILE_FEATURES "@CMAKE_CXX14_COMPILE_FEATURES@")
 set(CMAKE_CXX17_COMPILE_FEATURES "@CMAKE_CXX17_COMPILE_FEATURES@")
+set(CMAKE_CXX20_COMPILE_FEATURES "@CMAKE_CXX20_COMPILE_FEATURES@")
 
 set(CMAKE_CXX_PLATFORM_ID "@CMAKE_CXX_PLATFORM_ID@")
 set(CMAKE_CXX_SIMULATE_ID "@CMAKE_CXX_SIMULATE_ID@")
diff --git a/Modules/CMakeCXXCompilerId.cpp.in b/Modules/CMakeCXXCompilerId.cpp.in
index 4cb2267..34639b4 100644
--- a/Modules/CMakeCXXCompilerId.cpp.in
+++ b/Modules/CMakeCXXCompilerId.cpp.in
@@ -34,7 +34,9 @@ char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
 #endif
 
 const char* info_language_dialect_default = "INFO" ":" "dialect_default["
-#if CXX_STD > 201402L
+#if CXX_STD > 201703L
+  "20"
+#elif CXX_STD >= 201703L
   "17"
 #elif CXX_STD >= 201402L
   "14"
diff --git a/Modules/CMakeDetermineCompileFeatures.cmake b/Modules/CMakeDetermineCompileFeatures.cmake
index 3ed92be..01a81a1 100644
--- a/Modules/CMakeDetermineCompileFeatures.cmake
+++ b/Modules/CMakeDetermineCompileFeatures.cmake
@@ -49,6 +49,7 @@ function(cmake_determine_compile_features lang)
     set(CMAKE_CXX11_COMPILE_FEATURES)
     set(CMAKE_CXX14_COMPILE_FEATURES)
     set(CMAKE_CXX17_COMPILE_FEATURES)
+    set(CMAKE_CXX20_COMPILE_FEATURES)
 
     include("${CMAKE_ROOT}/Modules/Internal/FeatureTesting.cmake")
 
@@ -59,6 +60,9 @@ function(cmake_determine_compile_features lang)
       return()
     endif()
 
+    if (CMAKE_CXX17_COMPILE_FEATURES AND CMAKE_CXX20_COMPILE_FEATURES)
+      list(REMOVE_ITEM CMAKE_CXX20_COMPILE_FEATURES ${CMAKE_CXX17_COMPILE_FEATURES})
+    endif()
     if (CMAKE_CXX14_COMPILE_FEATURES AND CMAKE_CXX17_COMPILE_FEATURES)
       list(REMOVE_ITEM CMAKE_CXX17_COMPILE_FEATURES ${CMAKE_CXX14_COMPILE_FEATURES})
     endif()
@@ -75,6 +79,7 @@ function(cmake_determine_compile_features lang)
         ${CMAKE_CXX11_COMPILE_FEATURES}
         ${CMAKE_CXX14_COMPILE_FEATURES}
         ${CMAKE_CXX17_COMPILE_FEATURES}
+        ${CMAKE_CXX20_COMPILE_FEATURES}
       )
     endif()
 
@@ -83,6 +88,7 @@ function(cmake_determine_compile_features lang)
     set(CMAKE_CXX11_COMPILE_FEATURES ${CMAKE_CXX11_COMPILE_FEATURES} PARENT_SCOPE)
     set(CMAKE_CXX14_COMPILE_FEATURES ${CMAKE_CXX14_COMPILE_FEATURES} PARENT_SCOPE)
     set(CMAKE_CXX17_COMPILE_FEATURES ${CMAKE_CXX17_COMPILE_FEATURES} PARENT_SCOPE)
+    set(CMAKE_CXX20_COMPILE_FEATURES ${CMAKE_CXX20_COMPILE_FEATURES} PARENT_SCOPE)
 
     message(STATUS "Detecting ${lang} compile features - done")
   endif()
diff --git a/Modules/Compiler/CMakeCommonCompilerMacros.cmake b/Modules/Compiler/CMakeCommonCompilerMacros.cmake
index 684fd30..ad464c7 100644
--- a/Modules/Compiler/CMakeCommonCompilerMacros.cmake
+++ b/Modules/Compiler/CMakeCommonCompilerMacros.cmake
@@ -78,6 +78,9 @@ endmacro()
 # Define to allow compile features to be automatically determined
 macro(cmake_record_cxx_compile_features)
   set(_result 0)
+  if(_result EQUAL 0 AND DEFINED CMAKE_CXX20_STANDARD_COMPILE_OPTION)
+    _record_compiler_features_cxx(20)
+  endif()
   if(_result EQUAL 0 AND DEFINED CMAKE_CXX17_STANDARD_COMPILE_OPTION)
     _record_compiler_features_cxx(17)
   endif()
diff --git a/Modules/Compiler/Clang-CXX.cmake b/Modules/Compiler/Clang-CXX.cmake
index 8a7d64a..8e8ab4f 100644
--- a/Modules/Compiler/Clang-CXX.cmake
+++ b/Modules/Compiler/Clang-CXX.cmake
@@ -49,6 +49,8 @@ else()
   set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "")
   set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "")
   set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "")
+  set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "")
+  set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "")
 endif()
 
 if(NOT "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC")
diff --git a/Modules/Compiler/MSVC-CXX.cmake b/Modules/Compiler/MSVC-CXX.cmake
index 789fff5..6a0c5d3 100644
--- a/Modules/Compiler/MSVC-CXX.cmake
+++ b/Modules/Compiler/MSVC-CXX.cmake
@@ -29,6 +29,12 @@ if ((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.0.24215.1 AND
   # for meta-features for C++14 and above.  Override the default macro
   # to avoid doing unnecessary work.
   macro(cmake_record_cxx_compile_features)
+    if (DEFINED CMAKE_CXX20_STANDARD_COMPILE_OPTION)
+      list(APPEND CMAKE_CXX20_COMPILE_FEATURES cxx_std_20)
+    endif()
+    # The main cmake_record_cxx_compile_features macro makes all
+    # these conditional on CMAKE_CXX##_STANDARD_COMPILE_OPTION,
+    # but we can skip the conditions because we set them above.
     list(APPEND CMAKE_CXX17_COMPILE_FEATURES cxx_std_17)
     list(APPEND CMAKE_CXX14_COMPILE_FEATURES cxx_std_14)
     list(APPEND CMAKE_CXX98_COMPILE_FEATURES cxx_std_11) # no flag needed for 11
@@ -46,6 +52,8 @@ elseif (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 16.0)
   set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "")
   set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "")
   set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "")
+  set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "")
+  set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "")
 
   # There is no meaningful default for this
   set(CMAKE_CXX_STANDARD_DEFAULT "")
@@ -60,6 +68,7 @@ elseif (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 16.0)
       cxx_std_11
       cxx_std_14
       cxx_std_17
+      cxx_std_20
       )
     _record_compiler_features(CXX "" CMAKE_CXX_COMPILE_FEATURES)
   endmacro()
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index cee540b..dde29f6 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -1564,6 +1564,7 @@ void cmLocalGenerator::AddCompilerRequirementFlag(
   static std::map<std::string, std::vector<std::string>> langStdMap;
   if (langStdMap.empty()) {
     // Maintain sorted order, most recent first.
+    langStdMap["CXX"].push_back("20");
     langStdMap["CXX"].push_back("17");
     langStdMap["CXX"].push_back("14");
     langStdMap["CXX"].push_back("11");
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index c270629..3ecd7eb 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -4223,7 +4223,7 @@ static const char* const CXX_FEATURES[] = { nullptr FOR_EACH_CXX_FEATURE(
 #undef FEATURE_STRING
 
 static const char* const C_STANDARDS[] = { "90", "99", "11" };
-static const char* const CXX_STANDARDS[] = { "98", "11", "14", "17" };
+static const char* const CXX_STANDARDS[] = { "98", "11", "14", "17", "20" };
 
 bool cmMakefile::AddRequiredTargetFeature(cmTarget* target,
                                           const std::string& feature,
@@ -4473,8 +4473,9 @@ bool cmMakefile::HaveCxxStandardAvailable(cmTarget const* target,
   bool needCxx11 = false;
   bool needCxx14 = false;
   bool needCxx17 = false;
+  bool needCxx20 = false;
   this->CheckNeededCxxLanguage(feature, needCxx98, needCxx11, needCxx14,
-                               needCxx17);
+                               needCxx17, needCxx20);
 
   const char* existingCxxStandard = target->GetProperty("CXX_STANDARD");
   if (!existingCxxStandard) {
@@ -4494,7 +4495,8 @@ bool cmMakefile::HaveCxxStandardAvailable(cmTarget const* target,
 
   /* clang-format off */
   const char* const* needCxxLevel =
-    needCxx17 ? &CXX_STANDARDS[3]
+    needCxx20 ? &CXX_STANDARDS[4]
+    : needCxx17 ? &CXX_STANDARDS[3]
     : needCxx14 ? &CXX_STANDARDS[2]
     : needCxx11 ? &CXX_STANDARDS[1]
     : needCxx98 ? &CXX_STANDARDS[0]
@@ -4506,7 +4508,8 @@ bool cmMakefile::HaveCxxStandardAvailable(cmTarget const* target,
 
 void cmMakefile::CheckNeededCxxLanguage(const std::string& feature,
                                         bool& needCxx98, bool& needCxx11,
-                                        bool& needCxx14, bool& needCxx17) const
+                                        bool& needCxx14, bool& needCxx17,
+                                        bool& needCxx20) const
 {
   if (const char* propCxx98 =
         this->GetDefinition("CMAKE_CXX98_COMPILE_FEATURES")) {
@@ -4532,6 +4535,12 @@ void cmMakefile::CheckNeededCxxLanguage(const std::string& feature,
     cmSystemTools::ExpandListArgument(propCxx17, props);
     needCxx17 = std::find(props.begin(), props.end(), feature) != props.end();
   }
+  if (const char* propCxx20 =
+        this->GetDefinition("CMAKE_CXX20_COMPILE_FEATURES")) {
+    std::vector<std::string> props;
+    cmSystemTools::ExpandListArgument(propCxx20, props);
+    needCxx20 = std::find(props.begin(), props.end(), feature) != props.end();
+  }
 }
 
 bool cmMakefile::AddRequiredTargetCxxFeature(cmTarget* target,
@@ -4542,9 +4551,10 @@ bool cmMakefile::AddRequiredTargetCxxFeature(cmTarget* target,
   bool needCxx11 = false;
   bool needCxx14 = false;
   bool needCxx17 = false;
+  bool needCxx20 = false;
 
   this->CheckNeededCxxLanguage(feature, needCxx98, needCxx11, needCxx14,
-                               needCxx17);
+                               needCxx17, needCxx20);
 
   const char* existingCxxStandard = target->GetProperty("CXX_STANDARD");
   const char* const* existingCxxLevel = nullptr;
@@ -4589,7 +4599,8 @@ bool cmMakefile::AddRequiredTargetCxxFeature(cmTarget* target,
 
   /* clang-format off */
   const char* const* needCxxLevel =
-    needCxx17 ? &CXX_STANDARDS[3]
+    needCxx20 ? &CXX_STANDARDS[4]
+    : needCxx17 ? &CXX_STANDARDS[3]
     : needCxx14 ? &CXX_STANDARDS[2]
     : needCxx11 ? &CXX_STANDARDS[1]
     : needCxx98 ? &CXX_STANDARDS[0]
diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h
index 419cb6e..d2626cd 100644
--- a/Source/cmMakefile.h
+++ b/Source/cmMakefile.h
@@ -991,7 +991,7 @@ private:
                             bool& needC99, bool& needC11) const;
   void CheckNeededCxxLanguage(const std::string& feature, bool& needCxx98,
                               bool& needCxx11, bool& needCxx14,
-                              bool& needCxx17) const;
+                              bool& needCxx17, bool& needCxx20) const;
 
   bool HaveCStandardAvailable(cmTarget const* target,
                               const std::string& feature) const;
diff --git a/Source/cmake.h b/Source/cmake.h
index 1ac549b..cc56a07 100644
--- a/Source/cmake.h
+++ b/Source/cmake.h
@@ -574,6 +574,7 @@ private:
   F(cxx_std_11)                                                               \
   F(cxx_std_14)                                                               \
   F(cxx_std_17)                                                               \
+  F(cxx_std_20)                                                               \
   F(cxx_aggregate_default_initializers)                                       \
   F(cxx_alias_templates)                                                      \
   F(cxx_alignas)                                                              \
diff --git a/Tests/CompileFeatures/CMakeLists.txt b/Tests/CompileFeatures/CMakeLists.txt
index b560acd..d041bd6 100644
--- a/Tests/CompileFeatures/CMakeLists.txt
+++ b/Tests/CompileFeatures/CMakeLists.txt
@@ -280,6 +280,7 @@ if (CMAKE_CXX_COMPILE_FEATURES)
     if (std_flag_idx EQUAL -1)
       add_executable(default_dialect default_dialect.cpp)
       target_compile_definitions(default_dialect PRIVATE
+        DEFAULT_CXX20=$<EQUAL:${CMAKE_CXX_STANDARD_DEFAULT},20>
         DEFAULT_CXX17=$<EQUAL:${CMAKE_CXX_STANDARD_DEFAULT},17>
         DEFAULT_CXX14=$<EQUAL:${CMAKE_CXX_STANDARD_DEFAULT},14>
         DEFAULT_CXX11=$<EQUAL:${CMAKE_CXX_STANDARD_DEFAULT},11>
@@ -434,6 +435,7 @@ else()
       HAVE_CXX_STD_11=$<COMPILE_FEATURES:cxx_std_11>
       HAVE_CXX_STD_14=$<COMPILE_FEATURES:cxx_std_14>
       HAVE_CXX_STD_17=$<COMPILE_FEATURES:cxx_std_17>
+      HAVE_CXX_STD_20=$<COMPILE_FEATURES:cxx_std_20>
     )
   endif()
 
diff --git a/Tests/CompileFeatures/default_dialect.cpp b/Tests/CompileFeatures/default_dialect.cpp
index 0de1125..7ddcfe7 100644
--- a/Tests/CompileFeatures/default_dialect.cpp
+++ b/Tests/CompileFeatures/default_dialect.cpp
@@ -8,7 +8,11 @@ struct Outputter;
 #define CXX_STD __cplusplus
 #endif
 
-#if DEFAULT_CXX17
+#if DEFAULT_CXX20
+#if CXX_STD <= 201703L
+Outputter<CXX_STD> o;
+#endif
+#elif DEFAULT_CXX17
 #if CXX_STD <= 201402L
 Outputter<CXX_STD> o;
 #endif

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=1b328e09a33e61293635c7ddb9bcff986ae8d1e7
commit 1b328e09a33e61293635c7ddb9bcff986ae8d1e7
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Mar 26 14:22:52 2018 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Mar 26 14:23:41 2018 -0400

    Features: Use -std=c++17 for C++ 17 on Clang 5.0+
    
    Clang 5.0 added support for the `-std=c++17` flag.

diff --git a/Modules/Compiler/Clang-CXX.cmake b/Modules/Compiler/Clang-CXX.cmake
index efc68b3..8a7d64a 100644
--- a/Modules/Compiler/Clang-CXX.cmake
+++ b/Modules/Compiler/Clang-CXX.cmake
@@ -32,7 +32,10 @@ if(NOT "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC")
     set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++1y")
   endif()
 
-  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.5)
+  if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0)
+    set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std=c++17")
+    set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std=gnu++17")
+  elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.5)
     set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std=c++1z")
     set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std=gnu++1z")
   endif()

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=0bc3e5788a669f16383a586fee4684e9a08488dc
commit 0bc3e5788a669f16383a586fee4684e9a08488dc
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Mar 26 14:21:41 2018 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Mar 26 14:23:41 2018 -0400

    Features: Use -std=c++17 for C++ 17 on GNU 8.0+
    
    GNU 8 now documents official support for the `-std=c++17` flag.

diff --git a/Modules/Compiler/GNU-CXX.cmake b/Modules/Compiler/GNU-CXX.cmake
index 4f1f30e..0b15d25 100644
--- a/Modules/Compiler/GNU-CXX.cmake
+++ b/Modules/Compiler/GNU-CXX.cmake
@@ -33,7 +33,10 @@ elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8)
   set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++1y")
 endif()
 
-if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.1)
+if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.0)
+  set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std=c++17")
+  set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std=gnu++17")
+elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.1)
   set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std=c++1z")
   set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std=gnu++1z")
 endif()

-----------------------------------------------------------------------

Summary of changes:
 Help/manual/cmake-compile-features.7.rst           |   10 +++----
 Help/prop_gbl/CMAKE_CXX_KNOWN_FEATURES.rst         |    3 +++
 Help/prop_tgt/CXX_STANDARD.rst                     |    2 +-
 Help/release/dev/features-c++20.rst                |    6 +++++
 Help/release/dev/features-msvc-c.rst               |    5 ++++
 Modules/CMakeCUDACompilerId.cu.in                  |    4 ++-
 Modules/CMakeCXXCompiler.cmake.in                  |    1 +
 Modules/CMakeCXXCompilerId.cpp.in                  |    4 ++-
 Modules/CMakeDetermineCompileFeatures.cmake        |    6 +++++
 Modules/Compiler/CMakeCommonCompilerMacros.cmake   |    3 +++
 Modules/Compiler/Clang-CXX.cmake                   |   12 ++++++++-
 Modules/Compiler/GNU-CXX.cmake                     |   10 ++++++-
 Modules/Compiler/MSVC-C-FeatureTests.cmake         |    8 ++++++
 Modules/Compiler/MSVC-C.cmake                      |   25 +++++++++++++++++
 Modules/Compiler/MSVC-CXX.cmake                    |   13 +++++++++
 Source/cmLocalGenerator.cxx                        |    1 +
 Source/cmMakefile.cxx                              |   23 +++++++++++-----
 Source/cmMakefile.h                                |    2 +-
 Source/cmake.h                                     |    1 +
 Source/kwsys/SystemTools.cxx                       |   15 +++++++----
 Source/kwsys/Terminal.c                            |    1 +
 Source/kwsys/testSystemTools.cxx                   |   28 ++++++++++----------
 .../target_compile_features/CMakeLists.txt         |    6 ++---
 Tests/CompileFeatures/CMakeLists.txt               |   19 ++++++++++++-
 Tests/CompileFeatures/default_dialect.cpp          |    6 ++++-
 Tests/CompileFeatures/genex_test.c                 |   12 ++++++---
 26 files changed, 182 insertions(+), 44 deletions(-)
 create mode 100644 Help/release/dev/features-c++20.rst
 create mode 100644 Help/release/dev/features-msvc-c.rst
 create mode 100644 Modules/Compiler/MSVC-C-FeatureTests.cmake
 create mode 100644 Modules/Compiler/MSVC-C.cmake


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list