[Cmake-commits] CMake branch, master, updated. v3.9.0-325-ga8d8d2f

Kitware Robot kwrobot at kitware.com
Thu Jul 20 10:55:06 EDT 2017


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  a8d8d2fd05e65444e52adb5164a38f3c64b247d5 (commit)
       via  e14ad2e376ee648cd0a9daf91c6a12ee6085f6e2 (commit)
       via  dca5df16c51dd9426f415ed7943402036e0ad08c (commit)
       via  131c721f542cd6f8805967d847965510172a2c6b (commit)
      from  f6a85bdbb19c4d8124f683db17c634fa48a62c02 (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=a8d8d2fd05e65444e52adb5164a38f3c64b247d5
commit a8d8d2fd05e65444e52adb5164a38f3c64b247d5
Merge: e14ad2e dca5df1
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Jul 20 14:52:15 2017 +0000
Commit:     Kitware Robot <kwrobot at kitware.com>
CommitDate: Thu Jul 20 10:52:20 2017 -0400

    Merge topic 'autogen-generated-files'
    
    dca5df16 Autogen: Process GENERATED files. Add CMP0071.
    
    Acked-by: Kitware Robot <kwrobot at kitware.com>
    Merge-request: !1061


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=e14ad2e376ee648cd0a9daf91c6a12ee6085f6e2
commit e14ad2e376ee648cd0a9daf91c6a12ee6085f6e2
Merge: f6a85bd 131c721
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Jul 20 14:51:05 2017 +0000
Commit:     Kitware Robot <kwrobot at kitware.com>
CommitDate: Thu Jul 20 10:51:12 2017 -0400

    Merge topic 'vs-lang-std'
    
    131c721f MSVC: Add flags for C++ language standards
    
    Acked-by: Kitware Robot <kwrobot at kitware.com>
    Merge-request: !1063


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=dca5df16c51dd9426f415ed7943402036e0ad08c
commit dca5df16c51dd9426f415ed7943402036e0ad08c
Author:     Sebastian Holtermann <sebholt at xwmw.org>
AuthorDate: Sun Jul 16 16:51:14 2017 +0200
Commit:     Sebastian Holtermann <sebholt at xwmw.org>
CommitDate: Tue Jul 18 18:11:31 2017 +0200

    Autogen: Process GENERATED files. Add CMP0071.
    
    This lets AUTOMOC and AUTOUIC process GENERATED files which
    used to be ignored before.
    A new policy CMP0071 ensures that the old behavior of ignoring
    GENERATED files is enabled when the CMake compatibility version
    CMAKE_MINIMUM_REQUIRED is < 3.10.
    
    Closes #16186

diff --git a/Help/manual/cmake-policies.7.rst b/Help/manual/cmake-policies.7.rst
index eb9af27..c81ba59 100644
--- a/Help/manual/cmake-policies.7.rst
+++ b/Help/manual/cmake-policies.7.rst
@@ -57,6 +57,7 @@ Policies Introduced by CMake 3.10
 .. toctree::
    :maxdepth: 1
 
+   CMP0071: Let AUTOMOC and AUTOUIC process GENERATED files. </policy/CMP0071>
    CMP0070: Define file(GENERATE) behavior for relative paths. </policy/CMP0070>
 
 Policies Introduced by CMake 3.9
diff --git a/Help/policy/CMP0071.rst b/Help/policy/CMP0071.rst
new file mode 100644
index 0000000..61f14dc
--- /dev/null
+++ b/Help/policy/CMP0071.rst
@@ -0,0 +1,34 @@
+CMP0071
+-------
+
+Let :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC` process
+:prop_sf:`GENERATED` files.
+
+CMake 3.10 and newer process regular *and* :prop_sf:`GENERATED` source files
+in :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC`.
+In CMake 3.9 and lower, only regular source files were processed in
+:prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC`,
+:prop_sf:`GENERATED` source files were ignored.
+
+This policy affects how :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC` process
+source files that are :prop_sf:`GENERATED`.
+
+The ``OLD`` behavior for this policy is to *ignore* :prop_sf:`GENERATED`
+source files in :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC`.
+
+The ``NEW`` behavior for this policy is to process :prop_sf:`GENERATED`
+source files in :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC` just like regular
+source files.
+
+.. note::
+  To exclude source files from :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC`
+  processing, the boolean source file properties
+  :prop_sf:`SKIP_AUTOMOC`, :prop_sf:`SKIP_AUTOUIC` and :prop_sf:`SKIP_AUTOGEN`
+  can be set accordingly.
+
+This policy was introduced in CMake version 3.10.  CMake version
+|release| warns when the policy is not set and uses ``OLD`` behavior.
+Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
+explicitly.
+
+.. include:: DEPRECATED.txt
diff --git a/Help/release/dev/autogen-generated-files.rst b/Help/release/dev/autogen-generated-files.rst
new file mode 100644
index 0000000..da2fc4e
--- /dev/null
+++ b/Help/release/dev/autogen-generated-files.rst
@@ -0,0 +1,8 @@
+autogen-generated-files
+-----------------------
+
+* When using :prop_tgt:`AUTOMOC` or :prop_tgt:`AUTOUIC`,
+  source files that are :prop_sf:`GENERATED` will be processed as well.
+  They were ignored by :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC`
+  in earlier releases.
+  See policy :policy:`CMP0071`.
diff --git a/Source/cmPolicies.h b/Source/cmPolicies.h
index 0a0178c..354011a 100644
--- a/Source/cmPolicies.h
+++ b/Source/cmPolicies.h
@@ -209,7 +209,9 @@ class cmMakefile;
          cmPolicies::WARN)                                                    \
   SELECT(POLICY, CMP0070,                                                     \
          "Define file(GENERATE) behavior for relative paths.", 3, 10, 0,      \
-         cmPolicies::WARN)
+         cmPolicies::WARN)                                                    \
+  SELECT(POLICY, CMP0071, "Let AUTOMOC and AUTOUIC process GENERATED files.", \
+         3, 10, 0, cmPolicies::WARN)
 
 #define CM_SELECT_ID(F, A1, A2, A3, A4, A5, A6) F(A1)
 #define CM_FOR_EACH_POLICY_ID(POLICY)                                         \
diff --git a/Source/cmQtAutoGeneratorInitializer.cxx b/Source/cmQtAutoGeneratorInitializer.cxx
index cecf165..92fa1bd 100644
--- a/Source/cmQtAutoGeneratorInitializer.cxx
+++ b/Source/cmQtAutoGeneratorInitializer.cxx
@@ -11,6 +11,7 @@
 #include "cmLocalGenerator.h"
 #include "cmMakefile.h"
 #include "cmOutputConverter.h"
+#include "cmPolicies.h"
 #include "cmSourceFile.h"
 #include "cmSourceGroup.h"
 #include "cmState.h"
@@ -28,6 +29,7 @@
 #include <algorithm>
 #include <map>
 #include <set>
+#include <sstream>
 #include <string>
 #include <utility>
 #include <vector>
@@ -290,6 +292,8 @@ static void AcquireScanFiles(cmGeneratorTarget const* target,
 {
   const bool mocTarget = target->GetPropertyAsBool("AUTOMOC");
   const bool uicTarget = target->GetPropertyAsBool("AUTOUIC");
+  const cmPolicies::PolicyStatus CMP0071_status =
+    target->Makefile->GetPolicyStatus(cmPolicies::CMP0071);
 
   std::vector<cmSourceFile*> srcFiles;
   target->GetConfigCommonSourceFiles(srcFiles);
@@ -298,24 +302,46 @@ static void AcquireScanFiles(cmGeneratorTarget const* target,
     cmSourceFile* sf = *fileIt;
     const cmSystemTools::FileFormat fileType =
       cmSystemTools::GetFileFormat(sf->GetExtension().c_str());
-
     if (!(fileType == cmSystemTools::CXX_FILE_FORMAT) &&
         !(fileType == cmSystemTools::HEADER_FILE_FORMAT)) {
       continue;
     }
-    if (PropertyEnabled(sf, "GENERATED") &&
-        !target->GetPropertyAsBool("__UNDOCUMENTED_AUTOGEN_GENERATED_FILES")) {
-      // FIXME: Add a policy whose NEW behavior allows generated files.
-      // The implementation already works.  We disable it here to avoid
-      // changing behavior for existing projects that do not expect it.
-      continue;
-    }
+
     const std::string absFile =
       cmsys::SystemTools::GetRealPath(sf->GetFullPath());
     // Skip flags
     const bool skipAll = PropertyEnabled(sf, "SKIP_AUTOGEN");
     const bool mocSkip = skipAll || PropertyEnabled(sf, "SKIP_AUTOMOC");
     const bool uicSkip = skipAll || PropertyEnabled(sf, "SKIP_AUTOUIC");
+    const bool accept = (mocTarget && !mocSkip) || (uicTarget && !uicSkip);
+
+    // For GENERATED files check status of policy CMP0071
+    if (accept && PropertyEnabled(sf, "GENERATED")) {
+      bool policyAccept = false;
+      switch (CMP0071_status) {
+        case cmPolicies::WARN: {
+          std::ostringstream ost;
+          ost << cmPolicies::GetPolicyWarning(cmPolicies::CMP0071) << "\n";
+          ost << "AUTOMOC/AUTOUIC: Ignoring GENERATED source file:\n";
+          ost << "  " << cmQtAutoGeneratorCommon::Quoted(absFile) << "\n";
+          target->Makefile->IssueMessage(cmake::AUTHOR_WARNING, ost.str());
+        }
+          CM_FALLTHROUGH;
+        case cmPolicies::OLD:
+          // Ignore GENERATED file
+          break;
+        case cmPolicies::REQUIRED_IF_USED:
+        case cmPolicies::REQUIRED_ALWAYS:
+        case cmPolicies::NEW:
+          // Process GENERATED file
+          policyAccept = true;
+          break;
+      }
+      if (!policyAccept) {
+        continue;
+      }
+    }
+
     // Add file name to skip lists.
     // Do this even when the file is not added to the sources/headers lists
     // because the file name may be extracted from an other file when
@@ -327,7 +353,7 @@ static void AcquireScanFiles(cmGeneratorTarget const* target,
       uicSkipList.push_back(absFile);
     }
 
-    if ((mocTarget && !mocSkip) || (uicTarget && !uicSkip)) {
+    if (accept) {
       // Add file name to sources or headers list
       switch (fileType) {
         case cmSystemTools::CXX_FILE_FORMAT:
diff --git a/Tests/QtAutogen/CMakeLists.txt b/Tests/QtAutogen/CMakeLists.txt
index 89d2b80..9393f1e 100644
--- a/Tests/QtAutogen/CMakeLists.txt
+++ b/Tests/QtAutogen/CMakeLists.txt
@@ -1,5 +1,5 @@
-cmake_minimum_required(VERSION 3.7)
-
+cmake_minimum_required(VERSION 3.9)
+cmake_policy(SET CMP0071 NEW)
 project(QtAutogen)
 
 # Tell find_package(Qt5) where to find Qt.
@@ -304,11 +304,16 @@ add_subdirectory(mocDepends)
 
 # -- Test
 # Tests various include moc patterns
-add_subdirectory(mocIncludeStrict)
+if(ALLOW_WRAP_CPP)
+  add_subdirectory(mocIncludeStrict)
+  add_subdirectory(mocIncludeRelaxed)
+endif()
 
 # -- Test
-# Tests various include moc patterns
-add_subdirectory(mocIncludeRelaxed)
+# Tests policy 0071
+if(ALLOW_WRAP_CPP)
+  add_subdirectory(mocCMP0071)
+endif()
 
 # -- Test
 # Tests Q_PLUGIN_METADATA json file change detection
diff --git a/Tests/QtAutogen/complex/CMakeLists.txt b/Tests/QtAutogen/complex/CMakeLists.txt
index d48f6cc..2043ccf 100644
--- a/Tests/QtAutogen/complex/CMakeLists.txt
+++ b/Tests/QtAutogen/complex/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.7)
+cmake_minimum_required(VERSION 3.9)
 
 # -- Test: AUTOMOC AUTORCC AUTOUIC
 add_definitions(-DFOO -DSomeDefine="Barx")
diff --git a/Tests/QtAutogen/mocCMP0071/CMakeLists.txt b/Tests/QtAutogen/mocCMP0071/CMakeLists.txt
new file mode 100644
index 0000000..003fa08
--- /dev/null
+++ b/Tests/QtAutogen/mocCMP0071/CMakeLists.txt
@@ -0,0 +1,4 @@
+cmake_minimum_required(VERSION 3.9)
+project(mocCMP0071 CXX)
+add_subdirectory(OLD)
+add_subdirectory(NEW)
diff --git a/Tests/QtAutogen/mocCMP0071/NEW/CMakeLists.txt b/Tests/QtAutogen/mocCMP0071/NEW/CMakeLists.txt
new file mode 100644
index 0000000..0237afc
--- /dev/null
+++ b/Tests/QtAutogen/mocCMP0071/NEW/CMakeLists.txt
@@ -0,0 +1,16 @@
+cmake_minimum_required(VERSION 3.9)
+cmake_policy(SET CMP0071 NEW)
+
+# *Generate* files
+set(CSD ${CMAKE_CURRENT_SOURCE_DIR})
+set(CBD ${CMAKE_CURRENT_BINARY_DIR})
+add_custom_command(
+  OUTPUT ${CBD}/Obj_p.h ${CBD}/Obj.hpp ${CBD}/Obj.cpp ${CBD}/main.cpp
+  COMMAND ${CMAKE_COMMAND} -E copy ${CSD}/../Obj_p.h ${CBD}/Obj_p.h
+  COMMAND ${CMAKE_COMMAND} -E copy ${CSD}/../Obj.hpp ${CBD}/Obj.hpp
+  COMMAND ${CMAKE_COMMAND} -E copy ${CSD}/../Obj.cpp ${CBD}/Obj.cpp
+  COMMAND ${CMAKE_COMMAND} -E copy ${CSD}/../main.cpp ${CBD}/main.cpp)
+
+add_executable(mocCMP0071New ${CBD}/Obj.cpp ${CBD}/main.cpp)
+target_link_libraries(mocCMP0071New ${QT_LIBRARIES})
+set_target_properties(mocCMP0071New PROPERTIES AUTOMOC ON)
diff --git a/Tests/QtAutogen/mocCMP0071/OLD/CMakeLists.txt b/Tests/QtAutogen/mocCMP0071/OLD/CMakeLists.txt
new file mode 100644
index 0000000..5699433
--- /dev/null
+++ b/Tests/QtAutogen/mocCMP0071/OLD/CMakeLists.txt
@@ -0,0 +1,18 @@
+cmake_minimum_required(VERSION 3.9)
+cmake_policy(SET CMP0071 OLD)
+
+# *Generate* files
+set(CSD ${CMAKE_CURRENT_SOURCE_DIR})
+set(CBD ${CMAKE_CURRENT_BINARY_DIR})
+add_custom_command(
+  OUTPUT ${CBD}/Obj_p.h ${CBD}/Obj.hpp ${CBD}/Obj.cpp ${CBD}/main.cpp
+  COMMAND ${CMAKE_COMMAND} -E copy ${CSD}/../Obj_p.h ${CBD}/Obj_p.h
+  COMMAND ${CMAKE_COMMAND} -E copy ${CSD}/../Obj.hpp ${CBD}/Obj.hpp
+  COMMAND ${CMAKE_COMMAND} -E copy ${CSD}/../Obj.cpp ${CBD}/Obj.cpp
+  COMMAND ${CMAKE_COMMAND} -E copy ${CSD}/../main.cpp ${CBD}/main.cpp)
+
+# Generate moc files externally
+qtx_wrap_cpp(mocCMP0071OldMoc ${CBD}/Obj.hpp ${CBD}/Obj_p.h)
+add_executable(mocCMP0071Old ${CBD}/Obj.cpp ${CBD}/main.cpp ${mocCMP0071OldMoc})
+target_link_libraries(mocCMP0071Old ${QT_LIBRARIES})
+set_target_properties(mocCMP0071Old PROPERTIES AUTOMOC ON)
diff --git a/Tests/QtAutogen/mocCMP0071/Obj.cpp b/Tests/QtAutogen/mocCMP0071/Obj.cpp
new file mode 100644
index 0000000..1ae50ed
--- /dev/null
+++ b/Tests/QtAutogen/mocCMP0071/Obj.cpp
@@ -0,0 +1,20 @@
+#include "Obj.hpp"
+#include "Obj_p.h"
+
+ObjPrivate::ObjPrivate()
+{
+}
+
+ObjPrivate::~ObjPrivate()
+{
+}
+
+Obj::Obj()
+  : d(new ObjPrivate)
+{
+}
+
+Obj::~Obj()
+{
+  delete d;
+}
diff --git a/Tests/QtAutogen/mocCMP0071/Obj.hpp b/Tests/QtAutogen/mocCMP0071/Obj.hpp
new file mode 100644
index 0000000..f064e47
--- /dev/null
+++ b/Tests/QtAutogen/mocCMP0071/Obj.hpp
@@ -0,0 +1,19 @@
+#ifndef OBJ_HPP
+#define OBJ_HPP
+
+#include <QObject>
+
+// Object source comes without any _moc/.moc includes
+class ObjPrivate;
+class Obj : public QObject
+{
+  Q_OBJECT
+public:
+  Obj();
+  ~Obj();
+
+private:
+  ObjPrivate* const d;
+};
+
+#endif
diff --git a/Tests/QtAutogen/mocCMP0071/Obj_p.h b/Tests/QtAutogen/mocCMP0071/Obj_p.h
new file mode 100644
index 0000000..cb1e5df
--- /dev/null
+++ b/Tests/QtAutogen/mocCMP0071/Obj_p.h
@@ -0,0 +1,14 @@
+#ifndef OBJ_P_HPP
+#define OBJ_P_HPP
+
+#include <QObject>
+
+class ObjPrivate : public QObject
+{
+  Q_OBJECT
+public:
+  ObjPrivate();
+  ~ObjPrivate();
+};
+
+#endif
diff --git a/Tests/QtAutogen/mocCMP0071/main.cpp b/Tests/QtAutogen/mocCMP0071/main.cpp
new file mode 100644
index 0000000..3887840
--- /dev/null
+++ b/Tests/QtAutogen/mocCMP0071/main.cpp
@@ -0,0 +1,7 @@
+#include "Obj.hpp"
+
+int main(int argv, char** args)
+{
+  Obj obj;
+  return 0;
+}
diff --git a/Tests/QtAutogen/mocDepends/CMakeLists.txt b/Tests/QtAutogen/mocDepends/CMakeLists.txt
index a67dcfe..cd5adf5 100644
--- a/Tests/QtAutogen/mocDepends/CMakeLists.txt
+++ b/Tests/QtAutogen/mocDepends/CMakeLists.txt
@@ -1,5 +1,6 @@
-cmake_minimum_required(VERSION 3.7)
-project(mocDepends)
+cmake_minimum_required(VERSION 3.9)
+cmake_policy(SET CMP0071 NEW)
+project(mocDepends CXX)
 
 if (QT_TEST_VERSION STREQUAL 4)
   find_package(Qt4 REQUIRED)
@@ -28,7 +29,6 @@ add_executable(mocDepends1 test1.cpp
 )
 target_link_libraries(mocDepends1 ${QT_CORE_TARGET})
 set_target_properties(mocDepends1 PROPERTIES AUTOMOC TRUE)
-set_property(TARGET mocDepends1 PROPERTY __UNDOCUMENTED_AUTOGEN_GENERATED_FILES 1)
 
 # -- Test 2 using generated library
 # This tests the dependency of AUTOMOC of mocDepends2 to the
@@ -44,4 +44,3 @@ add_library(SimpleLib STATIC simpleLib.hpp simpleLib.cpp)
 add_executable(mocDepends2 test2.cpp )
 target_link_libraries(mocDepends2 SimpleLib ${QT_CORE_TARGET})
 set_target_properties(mocDepends2 PROPERTIES AUTOMOC TRUE)
-set_property(TARGET mocDepends2 PROPERTY __UNDOCUMENTED_AUTOGEN_GENERATED_FILES 1)
diff --git a/Tests/QtAutogen/mocPlugin/CMakeLists.txt b/Tests/QtAutogen/mocPlugin/CMakeLists.txt
index f80aa29..9b224fb 100644
--- a/Tests/QtAutogen/mocPlugin/CMakeLists.txt
+++ b/Tests/QtAutogen/mocPlugin/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.8)
+cmake_minimum_required(VERSION 3.9)
 project(mocPlugin CXX)
 
 set(CMAKE_AUTOMOC_DEPEND_FILTERS
diff --git a/Tests/QtAutogen/mocRerun/CMakeLists.txt b/Tests/QtAutogen/mocRerun/CMakeLists.txt
index 14b077b..7380bdd 100644
--- a/Tests/QtAutogen/mocRerun/CMakeLists.txt
+++ b/Tests/QtAutogen/mocRerun/CMakeLists.txt
@@ -1,4 +1,5 @@
-cmake_minimum_required(VERSION 3.7)
+cmake_minimum_required(VERSION 3.9)
+cmake_policy(SET CMP0071 NEW)
 project(mocRerun CXX)
 
 if (QT_TEST_VERSION STREQUAL 4)
@@ -27,7 +28,6 @@ add_executable(mocRerun
   ${CMAKE_CURRENT_BINARY_DIR}/main.cpp
   res1.qrc
   )
-set_property(TARGET mocRerun PROPERTY __UNDOCUMENTED_AUTOGEN_GENERATED_FILES 1)
 target_include_directories(mocRerun PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
 target_link_libraries(mocRerun ${QT_CORE_TARGET})
 # Write target name to text file
diff --git a/Tests/QtAutogen/rccDepends/CMakeLists.txt b/Tests/QtAutogen/rccDepends/CMakeLists.txt
index 878ae5d..edc0ac3 100644
--- a/Tests/QtAutogen/rccDepends/CMakeLists.txt
+++ b/Tests/QtAutogen/rccDepends/CMakeLists.txt
@@ -1,5 +1,5 @@
-cmake_minimum_required(VERSION 3.7)
-project(rccDepends)
+cmake_minimum_required(VERSION 3.9)
+project(rccDepends CXX)
 
 set(CMAKE_AUTORCC ON)
 

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=131c721f542cd6f8805967d847965510172a2c6b
commit 131c721f542cd6f8805967d847965510172a2c6b
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Fri Jul 14 09:17:05 2017 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Jul 17 10:48:43 2017 -0400

    MSVC: Add flags for C++ language standards
    
    Visual Studio 2015 Update 3 introduced the notion of language standard
    levels to MSVC.  The language standard level is defined in `_MSVC_LANG`
    instead of `__cplusplus`.  It also added support for the `-std:c++14`
    and `-std:c++latest` flags, although the compiler defaults to its C++14
    mode anyway.  Visual Studio 2017 Update 3 will introduce support for the
    `-std:c++17` flag.
    
    Fixes: #16482

diff --git a/Modules/CMakeCXXCompilerId.cpp.in b/Modules/CMakeCXXCompilerId.cpp.in
index 9aa096d..6572bb3 100644
--- a/Modules/CMakeCXXCompilerId.cpp.in
+++ b/Modules/CMakeCXXCompilerId.cpp.in
@@ -27,12 +27,18 @@ char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
 @CMAKE_CXX_COMPILER_ID_PLATFORM_CONTENT@
 @CMAKE_CXX_COMPILER_ID_ERROR_FOR_TEST@
 
+#if defined(_MSC_VER) && defined(_MSVC_LANG)
+#define CXX_STD _MSVC_LANG
+#else
+#define CXX_STD __cplusplus
+#endif
+
 const char* info_language_dialect_default = "INFO" ":" "dialect_default["
-#if __cplusplus > 201402L
+#if CXX_STD > 201402L
   "17"
-#elif __cplusplus >= 201402L
+#elif CXX_STD >= 201402L
   "14"
-#elif __cplusplus >= 201103L
+#elif CXX_STD >= 201103L
   "11"
 #else
   "98"
diff --git a/Modules/Compiler/MSVC-CXX.cmake b/Modules/Compiler/MSVC-CXX.cmake
index 9371301..f478b85 100644
--- a/Modules/Compiler/MSVC-CXX.cmake
+++ b/Modules/Compiler/MSVC-CXX.cmake
@@ -3,7 +3,25 @@
 
 include(Compiler/CMakeCommonCompilerMacros)
 
-if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 16.0)
+if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.10.25017)
+  # VS 2015 Update 3 and above support language standard level flags,
+  # with the default and minimum level being C++14.
+  set(CMAKE_CXX98_STANDARD_COMPILE_OPTION "")
+  set(CMAKE_CXX98_EXTENSION_COMPILE_OPTION "")
+  set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "")
+  set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "")
+  set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std:c++14")
+  set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std:c++14")
+  if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.11.25505)
+    set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std:c++17")
+    set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std:c++17")
+  else()
+    set(CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std:c++latest")
+    set(CMAKE_CXX17_EXTENSION_COMPILE_OPTION "-std:c++latest")
+  endif()
+
+  __compiler_check_default_language_standard(CXX 19.0 14)
+elseif (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 16.0)
   # MSVC has no specific options to set language standards, but set them as
   # empty strings anyways so the feature test infrastructure can at least check
   # to see if they are defined.
diff --git a/Tests/CompileFeatures/default_dialect.cpp b/Tests/CompileFeatures/default_dialect.cpp
index 9b65b42..0de1125 100644
--- a/Tests/CompileFeatures/default_dialect.cpp
+++ b/Tests/CompileFeatures/default_dialect.cpp
@@ -2,25 +2,30 @@
 template <long l>
 struct Outputter;
 
+#if defined(_MSC_VER) && defined(_MSVC_LANG)
+#define CXX_STD _MSVC_LANG
+#else
+#define CXX_STD __cplusplus
+#endif
+
 #if DEFAULT_CXX17
-#if __cplusplus <= 201402L
-Outputter<__cplusplus> o;
+#if CXX_STD <= 201402L
+Outputter<CXX_STD> o;
 #endif
 #elif DEFAULT_CXX14
-#if __cplusplus != 201402L
-Outputter<__cplusplus> o;
+#if CXX_STD != 201402L
+Outputter<CXX_STD> o;
 #endif
 #elif DEFAULT_CXX11
-#if __cplusplus != 201103L
-Outputter<__cplusplus> o;
+#if CXX_STD != 201103L
+Outputter<CXX_STD> o;
 #endif
 #else
 #if !DEFAULT_CXX98
 #error Buildsystem error
 #endif
-#if __cplusplus != 199711L && __cplusplus != 1 &&                             \
-  !defined(__GXX_EXPERIMENTAL_CXX0X__)
-Outputter<__cplusplus> o;
+#if CXX_STD != 199711L && CXX_STD != 1 && !defined(__GXX_EXPERIMENTAL_CXX0X__)
+Outputter<CXX_STD> o;
 #endif
 #endif
 

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

Summary of changes:
 Help/manual/cmake-policies.7.rst                   |    1 +
 Help/policy/CMP0071.rst                            |   34 +++++++++++++++
 Help/release/dev/autogen-generated-files.rst       |    8 ++++
 Modules/CMakeCXXCompilerId.cpp.in                  |   12 ++++--
 Modules/Compiler/MSVC-CXX.cmake                    |   20 ++++++++-
 Source/cmPolicies.h                                |    4 +-
 Source/cmQtAutoGeneratorInitializer.cxx            |   44 ++++++++++++++++----
 Tests/CompileFeatures/default_dialect.cpp          |   23 ++++++----
 Tests/QtAutogen/CMakeLists.txt                     |   15 ++++---
 Tests/QtAutogen/complex/CMakeLists.txt             |    2 +-
 Tests/QtAutogen/mocCMP0071/CMakeLists.txt          |    4 ++
 Tests/QtAutogen/mocCMP0071/NEW/CMakeLists.txt      |   16 +++++++
 Tests/QtAutogen/mocCMP0071/OLD/CMakeLists.txt      |   18 ++++++++
 Tests/QtAutogen/mocCMP0071/Obj.cpp                 |   20 +++++++++
 Tests/QtAutogen/mocCMP0071/Obj.hpp                 |   19 +++++++++
 Tests/QtAutogen/mocCMP0071/Obj_p.h                 |   14 +++++++
 Tests/QtAutogen/{mocPlugin => mocCMP0071}/main.cpp |    3 +-
 Tests/QtAutogen/mocDepends/CMakeLists.txt          |    7 ++--
 Tests/QtAutogen/mocPlugin/CMakeLists.txt           |    2 +-
 Tests/QtAutogen/mocRerun/CMakeLists.txt            |    4 +-
 Tests/QtAutogen/rccDepends/CMakeLists.txt          |    4 +-
 21 files changed, 235 insertions(+), 39 deletions(-)
 create mode 100644 Help/policy/CMP0071.rst
 create mode 100644 Help/release/dev/autogen-generated-files.rst
 create mode 100644 Tests/QtAutogen/mocCMP0071/CMakeLists.txt
 create mode 100644 Tests/QtAutogen/mocCMP0071/NEW/CMakeLists.txt
 create mode 100644 Tests/QtAutogen/mocCMP0071/OLD/CMakeLists.txt
 create mode 100644 Tests/QtAutogen/mocCMP0071/Obj.cpp
 create mode 100644 Tests/QtAutogen/mocCMP0071/Obj.hpp
 create mode 100644 Tests/QtAutogen/mocCMP0071/Obj_p.h
 copy Tests/QtAutogen/{mocPlugin => mocCMP0071}/main.cpp (62%)


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list