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  3e93b2fa66ecca7c25818c32a2b50acef2627841 (commit)
       via  ffa1fa20e6ef3e78aad2dca75658232593509519 (commit)
       via  606df71e48bf3594a7f79d68d990f401af9e45ea (commit)
       via  ae861c196ad2128409f231fff3024b624918311d (commit)
       via  41ba3e28e6840fd560a537d400146d2cde67a239 (commit)
       via  a40744c81a8d6dad994def5a63103fc229a75afc (commit)
       via  8cb3cffa42e11c2508ed8db703f2f9a1a73fbbb9 (commit)
       via  9367f7dcdd8534ce2071fcc02834cdb826e76395 (commit)
       via  54872b73b9436086fd4a801b1224ebeb81af3935 (commit)
       via  11f35d340ed359df6202f23fc143b2fd36de5995 (commit)
       via  ae51aa32f0589e4f5fc9a251a5be534cba631876 (commit)
       via  185fa2c4f3e21542dd42bfb396fc8520d996772a (commit)
       via  c8deeac68f1462461a464acd6d2c2728b9a293c2 (commit)
       via  c2c222eba13476a95a362731528d85a3e76ed83a (commit)
       via  8909a450a6fb74447ef6dc49f16d747bae3c72ea (commit)
       via  7533e47cccb8828885de518e40d58b629200d23d (commit)
       via  9d6fc3f5ed527874d44a111eb80c09e740710e48 (commit)
       via  524d72151449acf5d76e55172174552b83a74f61 (commit)
      from  3c7d09e46512e8a69476cf4dfda6ace488a49244 (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=3e93b2fa66ecca7c25818c32a2b50acef2627841
commit 3e93b2fa66ecca7c25818c32a2b50acef2627841
Merge: ffa1fa2 8909a45
Author:     Brad King <brad.k...@kitware.com>
AuthorDate: Wed Aug 28 15:52:57 2019 +0000
Commit:     Kitware Robot <kwro...@kitware.com>
CommitDate: Wed Aug 28 11:53:12 2019 -0400

    Merge topic 'vs-ConfigurationType-genex'
    
    8909a450a6 VS: Add support for generator expressions to 
VS_CONFIGURATION_TYPE
    
    Acked-by: Kitware Robot <kwro...@kitware.com>
    Merge-request: !3746


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=ffa1fa20e6ef3e78aad2dca75658232593509519
commit ffa1fa20e6ef3e78aad2dca75658232593509519
Merge: 606df71 41ba3e2
Author:     Brad King <brad.k...@kitware.com>
AuthorDate: Wed Aug 28 15:51:53 2019 +0000
Commit:     Kitware Robot <kwro...@kitware.com>
CommitDate: Wed Aug 28 11:52:04 2019 -0400

    Merge topic 'sf-LANGUAGE-prop'
    
    41ba3e28e6 Tests: Collect SourceFileProperty tests
    a40744c81a cmSourceFile: Move LANGUAGE to GetPropertyForUser
    8cb3cffa42 cmSourceFile: Rename non-const GetLanguage
    
    Acked-by: Kitware Robot <kwro...@kitware.com>
    Merge-request: !3744


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=606df71e48bf3594a7f79d68d990f401af9e45ea
commit 606df71e48bf3594a7f79d68d990f401af9e45ea
Merge: ae861c1 9367f7d
Author:     Brad King <brad.k...@kitware.com>
AuthorDate: Wed Aug 28 15:50:42 2019 +0000
Commit:     Kitware Robot <kwro...@kitware.com>
CommitDate: Wed Aug 28 11:51:00 2019 -0400

    Merge topic 'cpack-ifw-command-vectorization'
    
    9367f7dcdd CPack/IFW: Command vectorization
    
    Acked-by: Kitware Robot <kwro...@kitware.com>
    Merge-request: !3732


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=ae861c196ad2128409f231fff3024b624918311d
commit ae861c196ad2128409f231fff3024b624918311d
Merge: 3c7d09e 54872b7
Author:     Brad King <brad.k...@kitware.com>
AuthorDate: Wed Aug 28 15:49:23 2019 +0000
Commit:     Kitware Robot <kwro...@kitware.com>
CommitDate: Wed Aug 28 11:49:32 2019 -0400

    Merge topic 'cmCommand_refactor_disallowed'
    
    54872b73b9 cmCommand refactor: remove cmDisallowedCommand class
    11f35d340e cmCommand refactor: remove unused AddDisallowedCommand overload
    ae51aa32f0 cmCommand refactor: cmVariableRequiresCommand
    185fa2c4f3 cmCommand refactor: cmUtilitySourceCommand
    c8deeac68f cmCommand refactor: cmSubdirDependsCommand
    c2c222eba1 cmCommand refactor: cmOutputRequiredFilesCommand
    7533e47ccc cmCommand refactor: cmLoadCommandCommand
    9d6fc3f5ed cmCommand refactor: cmExportLibraryDependenciesCommand
    ...
    
    Acked-by: Kitware Robot <kwro...@kitware.com>
    Merge-request: !3736


https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=41ba3e28e6840fd560a537d400146d2cde67a239
commit 41ba3e28e6840fd560a537d400146d2cde67a239
Author:     Tushar Maheshwari <tushar27...@gmail.com>
AuthorDate: Tue Aug 27 22:28:34 2019 +0530
Commit:     Tushar Maheshwari <tushar27...@gmail.com>
CommitDate: Tue Aug 27 22:28:34 2019 +0530

    Tests: Collect SourceFileProperty tests
    
    - Move the related test from COnly to SourceFileProperty
    - Cover `get_source_file_property` and `get_property(... SOURCE ...)`

diff --git a/Tests/COnly/CMakeLists.txt b/Tests/COnly/CMakeLists.txt
index 3037f13..20615fe 100644
--- a/Tests/COnly/CMakeLists.txt
+++ b/Tests/COnly/CMakeLists.txt
@@ -13,11 +13,5 @@ if(MSVC_VERSION AND NOT CMAKE_C_COMPILER_ID STREQUAL Clang 
OR "x${CMAKE_C_COMPIL
 endif()
 string(ASCII 35 32 67 77 97 107 101 ASCII_STRING)
 message(STATUS "String: ${ASCII_STRING}")
-get_source_file_property(LANG conly.c LANGUAGE)
-if("${LANG}" STREQUAL "C")
-  message("Language is C")
-else()
-  message(FATAL_ERROR "Bad language for file conly.c")
-endif()
 
 add_library(testCModule MODULE testCModule.c)
diff --git a/Tests/SourceFileProperty/CMakeLists.txt 
b/Tests/SourceFileProperty/CMakeLists.txt
index 5dbc34f..5e55f7b 100644
--- a/Tests/SourceFileProperty/CMakeLists.txt
+++ b/Tests/SourceFileProperty/CMakeLists.txt
@@ -16,7 +16,12 @@ endif ()
 add_executable(SourceFileProperty main.c)
 target_sources(SourceFileProperty PRIVATE ICaseTest.c)
 
-get_property(LANG SOURCE ICaseTest.c PROPERTY LANGUAGE)
-if (NOT "${LANG}" STREQUAL "C")
+get_source_file_property(LANG_MAIN main.c LANGUAGE)
+if(NOT "${LANG_MAIN}" STREQUAL "C")
+  message(FATAL_ERROR "Bad language for file main.c")
+endif()
+
+get_property(LANG_TEST SOURCE ICaseTest.c PROPERTY LANGUAGE)
+if (NOT "${LANG_TEST}" STREQUAL "C")
   message(FATAL_ERROR "Bad language for file ICaseTest.c")
 endif ()

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=a40744c81a8d6dad994def5a63103fc229a75afc
commit a40744c81a8d6dad994def5a63103fc229a75afc
Author:     Tushar Maheshwari <tushar27...@gmail.com>
AuthorDate: Tue Aug 27 12:19:43 2019 +0530
Commit:     Tushar Maheshwari <tushar27...@gmail.com>
CommitDate: Tue Aug 27 21:41:12 2019 +0530

    cmSourceFile: Move LANGUAGE to GetPropertyForUser
    
    - Remove the special case from cmGetSourceFilePropertyCommand
    
    Tests: check LANGUAGE for source file
    - use target_sources to add file
    - use get_property to read property value

diff --git a/Source/cmGetSourceFilePropertyCommand.cxx 
b/Source/cmGetSourceFilePropertyCommand.cxx
index 5a477b9..5c1c8a5 100644
--- a/Source/cmGetSourceFilePropertyCommand.cxx
+++ b/Source/cmGetSourceFilePropertyCommand.cxx
@@ -24,10 +24,6 @@ bool cmGetSourceFilePropertyCommand::InitialPass(
     sf = this->Makefile->CreateSource(file);
   }
   if (sf) {
-    if (args[2] == "LANGUAGE") {
-      this->Makefile->AddDefinition(var, sf->GetOrDetermineLanguage());
-      return true;
-    }
     const char* prop = nullptr;
     if (!args[2].empty()) {
       prop = sf->GetPropertyForUser(args[2]);
diff --git a/Source/cmSourceFile.cxx b/Source/cmSourceFile.cxx
index 738a1c0..5d738d5 100644
--- a/Source/cmSourceFile.cxx
+++ b/Source/cmSourceFile.cxx
@@ -272,6 +272,13 @@ const char* cmSourceFile::GetPropertyForUser(const 
std::string& prop)
     this->GetFullPath();
   }
 
+  // Similarly, LANGUAGE can be determined by the file extension
+  // if it is requested by the user.
+  if (prop == propLANGUAGE) {
+    // The c_str pointer is valid until `this->Language` is modified.
+    return this->GetOrDetermineLanguage().c_str();
+  }
+
   // Perform the normal property lookup.
   return this->GetProperty(prop);
 }
diff --git a/Tests/SourceFileProperty/CMakeLists.txt 
b/Tests/SourceFileProperty/CMakeLists.txt
index 1b6506d..5dbc34f 100644
--- a/Tests/SourceFileProperty/CMakeLists.txt
+++ b/Tests/SourceFileProperty/CMakeLists.txt
@@ -1,19 +1,22 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.1)
 project(SourceFileProperty C)
 
-set(sources)
-
 if (EXISTS icasetest.c)
   # If a file exists by this name, use it.
   set_source_files_properties(icasetest.c
     PROPERTIES
-      COMPILE_FLAGS -DNEEDED_TO_WORK)
+      COMPILE_DEFINITIONS NEEDED_TO_WORK)
 else ()
   # Work on case-sensitive file systems as well.
   set_source_files_properties(main.c
     PROPERTIES
-      COMPILE_FLAGS -DNO_NEED_TO_CALL)
+      COMPILE_DEFINITIONS NO_NEED_TO_CALL)
 endif ()
-list(APPEND sources ICaseTest.c)
 
-add_executable(SourceFileProperty main.c ${sources})
+add_executable(SourceFileProperty main.c)
+target_sources(SourceFileProperty PRIVATE ICaseTest.c)
+
+get_property(LANG SOURCE ICaseTest.c PROPERTY LANGUAGE)
+if (NOT "${LANG}" STREQUAL "C")
+  message(FATAL_ERROR "Bad language for file ICaseTest.c")
+endif ()

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=8cb3cffa42e11c2508ed8db703f2f9a1a73fbbb9
commit 8cb3cffa42e11c2508ed8db703f2f9a1a73fbbb9
Author:     Tushar Maheshwari <tushar27...@gmail.com>
AuthorDate: Tue Aug 27 21:35:42 2019 +0530
Commit:     Tushar Maheshwari <tushar27...@gmail.com>
CommitDate: Tue Aug 27 21:35:42 2019 +0530

    cmSourceFile: Rename non-const GetLanguage
    
    GetOrDetermineLanguage:
    - Read the property if available
    - Determine the Language using the file extension
    
    Fix all usage of the non-const member in the repository.

diff --git a/Source/cmExtraCodeBlocksGenerator.cxx 
b/Source/cmExtraCodeBlocksGenerator.cxx
index d8a1a49..487d0de 100644
--- a/Source/cmExtraCodeBlocksGenerator.cxx
+++ b/Source/cmExtraCodeBlocksGenerator.cxx
@@ -365,7 +365,7 @@ void cmExtraCodeBlocksGenerator::CreateNewProjectFile(
 
             // check whether it is a C/C++/CUDA implementation file
             bool isCFile = false;
-            std::string lang = s->GetLanguage();
+            std::string lang = s->GetOrDetermineLanguage();
             if (lang == "C" || lang == "CXX" || lang == "CUDA") {
               std::string const& srcext = s->GetExtension();
               isCFile = cm->IsSourceExtension(srcext);
diff --git a/Source/cmExtraSublimeTextGenerator.cxx 
b/Source/cmExtraSublimeTextGenerator.cxx
index 33f5157..6f4472b 100644
--- a/Source/cmExtraSublimeTextGenerator.cxx
+++ b/Source/cmExtraSublimeTextGenerator.cxx
@@ -342,7 +342,7 @@ std::string 
cmExtraSublimeTextGenerator::ComputeFlagsForObject(
   cmSourceFile* source, cmLocalGenerator* lg, cmGeneratorTarget* gtgt)
 {
   std::string flags;
-  std::string language = source->GetLanguage();
+  std::string language = source->GetOrDetermineLanguage();
   if (language.empty()) {
     language = "C";
   }
@@ -377,7 +377,7 @@ std::string cmExtraSublimeTextGenerator::ComputeDefines(
 {
   std::set<std::string> defines;
   cmMakefile* makefile = lg->GetMakefile();
-  const std::string& language = source->GetLanguage();
+  const std::string& language = source->GetOrDetermineLanguage();
   const std::string& config = makefile->GetSafeDefinition("CMAKE_BUILD_TYPE");
   cmGeneratorExpressionInterpreter genexInterpreter(lg, config, target,
                                                     language);
@@ -410,7 +410,7 @@ std::string cmExtraSublimeTextGenerator::ComputeIncludes(
 {
   std::vector<std::string> includes;
   cmMakefile* makefile = lg->GetMakefile();
-  const std::string& language = source->GetLanguage();
+  const std::string& language = source->GetOrDetermineLanguage();
   const std::string& config = makefile->GetSafeDefinition("CMAKE_BUILD_TYPE");
   cmGeneratorExpressionInterpreter genexInterpreter(lg, config, target,
                                                     language);
diff --git a/Source/cmFileAPICodemodel.cxx b/Source/cmFileAPICodemodel.cxx
index e4b7670..08db7c7 100644
--- a/Source/cmFileAPICodemodel.cxx
+++ b/Source/cmFileAPICodemodel.cxx
@@ -837,7 +837,7 @@ CompileData Target::BuildCompileData(cmSourceFile* sf)
 {
   CompileData fd;
 
-  fd.Language = sf->GetLanguage();
+  fd.Language = sf->GetOrDetermineLanguage();
   if (fd.Language.empty()) {
     return fd;
   }
diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx
index 3048c5f..1d64f1c 100644
--- a/Source/cmGeneratorTarget.cxx
+++ b/Source/cmGeneratorTarget.cxx
@@ -1593,7 +1593,7 @@ void 
cmGeneratorTarget::ComputeKindedSources(KindedSources& files,
       kind = SourceKindHeader;
     } else if (sf->GetPropertyAsBool("EXTERNAL_OBJECT")) {
       kind = SourceKindExternalObject;
-    } else if (!sf->GetLanguage().empty()) {
+    } else if (!sf->GetOrDetermineLanguage().empty()) {
       kind = SourceKindObjectSource;
     } else if (ext == "def") {
       kind = SourceKindModuleDefinition;
@@ -6055,7 +6055,7 @@ void 
cmGeneratorTarget::GetLanguages(std::set<std::string>& languages,
   std::vector<cmSourceFile*> sourceFiles;
   this->GetSourceFiles(sourceFiles, config);
   for (cmSourceFile* src : sourceFiles) {
-    const std::string& lang = src->GetLanguage();
+    const std::string& lang = src->GetOrDetermineLanguage();
     if (!lang.empty()) {
       languages.insert(lang);
     }
diff --git a/Source/cmGetSourceFilePropertyCommand.cxx 
b/Source/cmGetSourceFilePropertyCommand.cxx
index a16076d..5a477b9 100644
--- a/Source/cmGetSourceFilePropertyCommand.cxx
+++ b/Source/cmGetSourceFilePropertyCommand.cxx
@@ -25,7 +25,7 @@ bool cmGetSourceFilePropertyCommand::InitialPass(
   }
   if (sf) {
     if (args[2] == "LANGUAGE") {
-      this->Makefile->AddDefinition(var, sf->GetLanguage());
+      this->Makefile->AddDefinition(var, sf->GetOrDetermineLanguage());
       return true;
     }
     const char* prop = nullptr;
diff --git a/Source/cmJsonObjects.cxx b/Source/cmJsonObjects.cxx
index b8eed13..4948b01 100644
--- a/Source/cmJsonObjects.cxx
+++ b/Source/cmJsonObjects.cxx
@@ -264,7 +264,7 @@ static Json::Value DumpSourceFilesList(
   std::unordered_map<LanguageData, std::vector<std::string>> fileGroups;
   for (cmSourceFile* file : files) {
     LanguageData fileData;
-    fileData.Language = file->GetLanguage();
+    fileData.Language = file->GetOrDetermineLanguage();
     if (!fileData.Language.empty()) {
       const LanguageData& ld = languageDataMap.at(fileData.Language);
       cmLocalGenerator* lg = target->GetLocalGenerator();
diff --git a/Source/cmSourceFile.cxx b/Source/cmSourceFile.cxx
index a6d2807..738a1c0 100644
--- a/Source/cmSourceFile.cxx
+++ b/Source/cmSourceFile.cxx
@@ -45,11 +45,13 @@ std::string cmSourceFile::GetObjectLibrary() const
   return this->ObjectLibrary;
 }
 
-std::string cmSourceFile::GetLanguage()
+std::string const& cmSourceFile::GetOrDetermineLanguage()
 {
   // If the language was set explicitly by the user then use it.
   if (const char* lang = this->GetProperty(propLANGUAGE)) {
-    return lang;
+    // Assign to member in order to return a reference.
+    this->Language = lang;
+    return this->Language;
   }
 
   // Perform computation needed to get the language if necessary.
@@ -72,8 +74,8 @@ std::string cmSourceFile::GetLanguage()
     }
   }
 
-  // Now try to determine the language.
-  return static_cast<cmSourceFile const*>(this)->GetLanguage();
+  // Use the language determined from the file extension.
+  return this->Language;
 }
 
 std::string cmSourceFile::GetLanguage() const
@@ -83,13 +85,8 @@ std::string cmSourceFile::GetLanguage() const
     return lang;
   }
 
-  // If the language was determined from the source file extension use it.
-  if (!this->Language.empty()) {
-    return this->Language;
-  }
-
-  // The language is not known.
-  return "";
+  // Use the language determined from the file extension.
+  return this->Language;
 }
 
 cmSourceFileLocation const& cmSourceFile::GetLocation() const
diff --git a/Source/cmSourceFile.h b/Source/cmSourceFile.h
index edad4c7..ccd5b62 100644
--- a/Source/cmSourceFile.h
+++ b/Source/cmSourceFile.h
@@ -88,7 +88,7 @@ public:
   /**
    * Get the language of the compiler to use for this source file.
    */
-  std::string GetLanguage();
+  std::string const& GetOrDetermineLanguage();
   std::string GetLanguage() const;
 
   /**

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=9367f7dcdd8534ce2071fcc02834cdb826e76395
commit 9367f7dcdd8534ce2071fcc02834cdb826e76395
Author:     Konstantin Podsvirov <konstan...@podsvirov.pro>
AuthorDate: Sat Aug 24 15:56:15 2019 +0300
Commit:     Brad King <brad.k...@kitware.com>
CommitDate: Tue Aug 27 11:30:19 2019 -0400

    CPack/IFW: Command vectorization
    
    Fixes: #19634

diff --git a/Source/CPack/IFW/cmCPackIFWGenerator.cxx 
b/Source/CPack/IFW/cmCPackIFWGenerator.cxx
index 8f13d0e..d1ffcef 100644
--- a/Source/CPack/IFW/cmCPackIFWGenerator.cxx
+++ b/Source/CPack/IFW/cmCPackIFWGenerator.cxx
@@ -39,24 +39,31 @@ int cmCPackIFWGenerator::PackageFiles()
 
   // Run repogen
   if (!this->Installer.RemoteRepositories.empty()) {
-    std::string ifwCmd = this->RepoGen;
+    std::vector<std::string> ifwCmd;
+    std::string ifwArg;
+
+    ifwCmd.emplace_back(this->RepoGen);
 
     if (this->IsVersionLess("2.0.0")) {
-      ifwCmd += " -c " + this->toplevel + "/config/config.xml";
+      ifwCmd.emplace_back("-c");
+      ifwCmd.emplace_back(this->toplevel + "/config/config.xml");
     }
 
-    ifwCmd += " -p " + this->toplevel + "/packages";
+    ifwCmd.emplace_back("-p");
+    ifwCmd.emplace_back(this->toplevel + "/packages");
 
     if (!this->PkgsDirsVector.empty()) {
       for (std::string const& it : this->PkgsDirsVector) {
-        ifwCmd += " -p " + it;
+        ifwCmd.emplace_back("-p");
+        ifwCmd.emplace_back(it);
       }
     }
 
     if (!this->RepoDirsVector.empty()) {
       if (!this->IsVersionLess("3.1")) {
         for (std::string const& rd : this->RepoDirsVector) {
-          ifwCmd += " --repository " + rd;
+          ifwCmd.emplace_back("--repository");
+          ifwCmd.emplace_back(rd);
         }
       } else {
         cmCPackIFWLogger(WARNING,
@@ -69,18 +76,21 @@ int cmCPackIFWGenerator::PackageFiles()
     }
 
     if (!this->OnlineOnly && !this->DownloadedPackages.empty()) {
-      ifwCmd += " -i ";
+      ifwCmd.emplace_back("-i");
       std::set<cmCPackIFWPackage*>::iterator it =
         this->DownloadedPackages.begin();
-      ifwCmd += (*it)->Name;
+      ifwArg = (*it)->Name;
       ++it;
       while (it != this->DownloadedPackages.end()) {
-        ifwCmd += "," + (*it)->Name;
+        ifwArg += "," + (*it)->Name;
         ++it;
       }
+      ifwCmd.emplace_back(ifwArg);
     }
-    ifwCmd += " " + this->toplevel + "/repository";
-    cmCPackIFWLogger(VERBOSE, "Execute: " << ifwCmd << std::endl);
+    ifwCmd.emplace_back(this->toplevel + "/repository");
+    cmCPackIFWLogger(VERBOSE,
+                     "Execute: " << cmSystemTools::PrintSingleCommand(ifwCmd)
+                                 << std::endl);
     std::string output;
     int retVal = 1;
     cmCPackIFWLogger(OUTPUT, "- Generate repository" << std::endl);
@@ -89,14 +99,15 @@ int cmCPackIFWGenerator::PackageFiles()
       cmDuration::zero());
     if (!res || retVal) {
       cmGeneratedFileStream ofs(ifwTmpFile);
-      ofs << "# Run command: " << ifwCmd << std::endl
+      ofs << "# Run command: " << cmSystemTools::PrintSingleCommand(ifwCmd)
+          << std::endl
           << "# Output:" << std::endl
           << output << std::endl;
-      cmCPackIFWLogger(ERROR,
-                       "Problem running IFW command: "
-                         << ifwCmd << std::endl
-                         << "Please check " << ifwTmpFile << " for errors"
-                         << std::endl);
+      cmCPackIFWLogger(
+        ERROR,
+        "Problem running IFW command: "
+          << cmSystemTools::PrintSingleCommand(ifwCmd) << std::endl
+          << "Please check \"" << ifwTmpFile << "\" for errors" << std::endl);
       return 0;
     }
 
@@ -104,46 +115,55 @@ int cmCPackIFWGenerator::PackageFiles()
         !this->Repository.PatchUpdatesXml()) {
       cmCPackIFWLogger(WARNING,
                        "Problem patch IFW \"Updates\" "
-                         << "file: "
-                         << this->toplevel + "/repository/Updates.xml"
-                         << std::endl);
+                         << "file: \"" << this->toplevel
+                         << "/repository/Updates.xml\"" << std::endl);
     }
 
     cmCPackIFWLogger(OUTPUT,
-                     "- repository: " << this->toplevel
-                                      << "/repository generated" << std::endl);
+                     "- repository: \"" << this->toplevel
+                                        << "/repository\" generated"
+                                        << std::endl);
   }
 
   // Run binary creator
   {
-    std::string ifwCmd =
-      cmStrCat(this->BinCreator, " -c ", this->toplevel, "/config/config.xml");
+    std::vector<std::string> ifwCmd;
+    std::string ifwArg;
+
+    ifwCmd.emplace_back(this->BinCreator);
+
+    ifwCmd.emplace_back("-c");
+    ifwCmd.emplace_back(this->toplevel + "/config/config.xml");
 
     if (!this->Installer.Resources.empty()) {
-      ifwCmd += " -r ";
+      ifwCmd.emplace_back("-r");
       std::vector<std::string>::iterator it =
         this->Installer.Resources.begin();
       std::string path = this->toplevel + "/resources/";
-      ifwCmd += path + *it;
+      ifwArg = path + *it;
       ++it;
       while (it != this->Installer.Resources.end()) {
-        ifwCmd += "," + path + *it;
+        ifwArg += "," + path + *it;
         ++it;
       }
+      ifwCmd.emplace_back(ifwArg);
     }
 
-    ifwCmd += " -p " + this->toplevel + "/packages";
+    ifwCmd.emplace_back("-p");
+    ifwCmd.emplace_back(this->toplevel + "/packages");
 
     if (!this->PkgsDirsVector.empty()) {
       for (std::string const& it : this->PkgsDirsVector) {
-        ifwCmd += " -p " + it;
+        ifwCmd.emplace_back("-p");
+        ifwCmd.emplace_back(it);
       }
     }
 
     if (!this->RepoDirsVector.empty()) {
       if (!this->IsVersionLess("3.1")) {
         for (std::string const& rd : this->RepoDirsVector) {
-          ifwCmd += " --repository " + rd;
+          ifwCmd.emplace_back("--repository");
+          ifwCmd.emplace_back(rd);
         }
       } else {
         cmCPackIFWLogger(WARNING,
@@ -156,44 +176,48 @@ int cmCPackIFWGenerator::PackageFiles()
     }
 
     if (this->OnlineOnly) {
-      ifwCmd += " --online-only";
+      ifwCmd.emplace_back("--online-only");
     } else if (!this->DownloadedPackages.empty() &&
                !this->Installer.RemoteRepositories.empty()) {
-      ifwCmd += " -e ";
+      ifwCmd.emplace_back("-e");
       std::set<cmCPackIFWPackage*>::iterator it =
         this->DownloadedPackages.begin();
-      ifwCmd += (*it)->Name;
+      ifwArg = (*it)->Name;
       ++it;
       while (it != this->DownloadedPackages.end()) {
-        ifwCmd += "," + (*it)->Name;
+        ifwArg += "," + (*it)->Name;
         ++it;
       }
+      ifwCmd.emplace_back(ifwArg);
     } else if (!this->DependentPackages.empty()) {
-      ifwCmd += " -i ";
+      ifwCmd.emplace_back("-i");
+      ifwArg.clear();
       // Binary
       std::set<cmCPackIFWPackage*>::iterator bit =
         this->BinaryPackages.begin();
       while (bit != this->BinaryPackages.end()) {
-        ifwCmd += (*bit)->Name + ",";
+        ifwArg += (*bit)->Name + ",";
         ++bit;
       }
       // Depend
       DependenceMap::iterator it = this->DependentPackages.begin();
-      ifwCmd += it->second.Name;
+      ifwArg += it->second.Name;
       ++it;
       while (it != this->DependentPackages.end()) {
-        ifwCmd += "," + it->second.Name;
+        ifwArg += "," + it->second.Name;
         ++it;
       }
+      ifwCmd.emplace_back(ifwArg);
     }
     // TODO: set correct name for multipackages
     if (!this->packageFileNames.empty()) {
-      ifwCmd += " " + this->packageFileNames[0];
+      ifwCmd.emplace_back(this->packageFileNames[0]);
     } else {
-      ifwCmd += " installer";
-      ifwCmd += this->OutputExtension;
+      ifwCmd.emplace_back("installer" + this->OutputExtension);
     }
-    cmCPackIFWLogger(VERBOSE, "Execute: " << ifwCmd << std::endl);
+    cmCPackIFWLogger(VERBOSE,
+                     "Execute: " << cmSystemTools::PrintSingleCommand(ifwCmd)
+                                 << std::endl);
     std::string output;
     int retVal = 1;
     cmCPackIFWLogger(OUTPUT, "- Generate package" << std::endl);
@@ -202,14 +226,15 @@ int cmCPackIFWGenerator::PackageFiles()
       cmDuration::zero());
     if (!res || retVal) {
       cmGeneratedFileStream ofs(ifwTmpFile);
-      ofs << "# Run command: " << ifwCmd << std::endl
+      ofs << "# Run command: " << cmSystemTools::PrintSingleCommand(ifwCmd)
+          << std::endl
           << "# Output:" << std::endl
           << output << std::endl;
-      cmCPackIFWLogger(ERROR,
-                       "Problem running IFW command: "
-                         << ifwCmd << std::endl
-                         << "Please check " << ifwTmpFile << " for errors"
-                         << std::endl);
+      cmCPackIFWLogger(
+        ERROR,
+        "Problem running IFW command: "
+          << cmSystemTools::PrintSingleCommand(ifwCmd) << std::endl
+          << "Please check \"" << ifwTmpFile << "\" for errors" << std::endl);
       return 0;
     }
   }

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=54872b73b9436086fd4a801b1224ebeb81af3935
commit 54872b73b9436086fd4a801b1224ebeb81af3935
Author:     Gabor Bencze <b.gabo...@gmail.com>
AuthorDate: Wed Aug 21 21:03:37 2019 +0200
Commit:     Brad King <brad.k...@kitware.com>
CommitDate: Mon Aug 26 11:48:47 2019 -0400

    cmCommand refactor: remove cmDisallowedCommand class

diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt
index 7cd07a8..30bf83a 100644
--- a/Source/CMakeLists.txt
+++ b/Source/CMakeLists.txt
@@ -493,8 +493,6 @@ set(SRCS
   cmCreateTestSourceList.h
   cmDefinePropertyCommand.cxx
   cmDefinePropertyCommand.h
-  cmDisallowedCommand.cxx
-  cmDisallowedCommand.h
   cmEnableLanguageCommand.cxx
   cmEnableLanguageCommand.h
   cmEnableTestingCommand.cxx
diff --git a/Source/cmDisallowedCommand.cxx b/Source/cmDisallowedCommand.cxx
deleted file mode 100644
index aa1f90b..0000000
--- a/Source/cmDisallowedCommand.cxx
+++ /dev/null
@@ -1,29 +0,0 @@
-/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-   file Copyright.txt or https://cmake.org/licensing for details.  */
-#include "cmDisallowedCommand.h"
-
-#include "cmMakefile.h"
-#include "cmMessageType.h"
-
-class cmExecutionStatus;
-
-bool cmDisallowedCommand::InitialPass(std::vector<std::string> const& args,
-                                      cmExecutionStatus& status)
-{
-  switch (this->Makefile->GetPolicyStatus(this->Policy)) {
-    case cmPolicies::WARN:
-      this->Makefile->IssueMessage(MessageType::AUTHOR_WARNING,
-                                   cmPolicies::GetPolicyWarning(this->Policy));
-      break;
-    case cmPolicies::OLD:
-      break;
-    case cmPolicies::REQUIRED_IF_USED:
-    case cmPolicies::REQUIRED_ALWAYS:
-    case cmPolicies::NEW:
-      this->Makefile->IssueMessage(MessageType::FATAL_ERROR, this->Message);
-      return true;
-  }
-
-  this->Command->SetExecutionStatus(this->GetExecutionStatus());
-  return this->Command->InitialPass(args, status);
-}
diff --git a/Source/cmDisallowedCommand.h b/Source/cmDisallowedCommand.h
deleted file mode 100644
index e07f255..0000000
--- a/Source/cmDisallowedCommand.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
-   file Copyright.txt or https://cmake.org/licensing for details.  */
-#ifndef cmDisallowedCommand_h
-#define cmDisallowedCommand_h
-
-#include "cmConfigure.h" // IWYU pragma: keep
-
-#include <string>
-#include <utility>
-#include <vector>
-
-#include "cm_memory.hxx"
-
-#include "cmCommand.h"
-#include "cmPolicies.h"
-
-class cmExecutionStatus;
-
-class cmDisallowedCommand : public cmCommand
-{
-public:
-  cmDisallowedCommand(std::unique_ptr<cmCommand> command,
-                      cmPolicies::PolicyID policy, const char* message)
-    : Command(std::move(command))
-    , Policy(policy)
-    , Message(message)
-  {
-  }
-
-  ~cmDisallowedCommand() override = default;
-
-  std::unique_ptr<cmCommand> Clone() override
-  {
-    return cm::make_unique<cmDisallowedCommand>(this->Command->Clone(),
-                                                this->Policy, this->Message);
-  }
-
-  bool InitialPass(std::vector<std::string> const& args,
-                   cmExecutionStatus& status) override;
-
-private:
-  std::unique_ptr<cmCommand> Command;
-  cmPolicies::PolicyID Policy;
-  const char* Message;
-};
-
-#endif
diff --git a/bootstrap b/bootstrap
index eaccfc8..979e6d5 100755
--- a/bootstrap
+++ b/bootstrap
@@ -297,7 +297,6 @@ CMAKE_CXX_SOURCES="\
   cmDefinitions \
   cmDepends \
   cmDependsC \
-  cmDisallowedCommand \
   cmDocumentationFormatter \
   cmEnableLanguageCommand \
   cmEnableTestingCommand \

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=11f35d340ed359df6202f23fc143b2fd36de5995
commit 11f35d340ed359df6202f23fc143b2fd36de5995
Author:     Gabor Bencze <b.gabo...@gmail.com>
AuthorDate: Wed Aug 21 21:03:21 2019 +0200
Commit:     Brad King <brad.k...@kitware.com>
CommitDate: Mon Aug 26 11:48:47 2019 -0400

    cmCommand refactor: remove unused AddDisallowedCommand overload

diff --git a/Source/cmState.cxx b/Source/cmState.cxx
index b6f1808..902287c 100644
--- a/Source/cmState.cxx
+++ b/Source/cmState.cxx
@@ -14,7 +14,6 @@
 #include "cmCacheManager.h"
 #include "cmCommand.h"
 #include "cmDefinitions.h"
-#include "cmDisallowedCommand.h"
 #include "cmExecutionStatus.h"
 #include "cmGlobVerificationManager.h"
 #include "cmListFileCache.h"
@@ -485,16 +484,6 @@ void cmState::AddDisallowedCommand(std::string const& name,
     });
 }
 
-void cmState::AddDisallowedCommand(std::string const& name,
-                                   std::unique_ptr<cmCommand> command,
-                                   cmPolicies::PolicyID policy,
-                                   const char* message)
-{
-  this->AddBuiltinCommand(
-    name,
-    cm::make_unique<cmDisallowedCommand>(std::move(command), policy, message));
-}
-
 void cmState::AddUnexpectedCommand(std::string const& name, const char* error)
 {
   this->AddBuiltinCommand(
diff --git a/Source/cmState.h b/Source/cmState.h
index 937ab61..a7ca015 100644
--- a/Source/cmState.h
+++ b/Source/cmState.h
@@ -159,9 +159,6 @@ public:
   void AddBuiltinCommand(std::string const& name, BuiltinCommand command);
   void AddDisallowedCommand(std::string const& name, BuiltinCommand command,
                             cmPolicies::PolicyID policy, const char* message);
-  void AddDisallowedCommand(std::string const& name,
-                            std::unique_ptr<cmCommand> command,
-                            cmPolicies::PolicyID policy, const char* message);
   void AddUnexpectedCommand(std::string const& name, const char* error);
   void AddScriptedCommand(std::string const& name, Command command);
   void RemoveBuiltinCommand(std::string const& name);

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=ae51aa32f0589e4f5fc9a251a5be534cba631876
commit ae51aa32f0589e4f5fc9a251a5be534cba631876
Author:     Gabor Bencze <b.gabo...@gmail.com>
AuthorDate: Wed Aug 21 20:56:02 2019 +0200
Commit:     Brad King <brad.k...@kitware.com>
CommitDate: Mon Aug 26 11:48:46 2019 -0400

    cmCommand refactor: cmVariableRequiresCommand

diff --git a/Source/cmCommands.cxx b/Source/cmCommands.cxx
index ad14c6b..0285525 100644
--- a/Source/cmCommands.cxx
+++ b/Source/cmCommands.cxx
@@ -326,8 +326,7 @@ void GetProjectCommands(cmState* state)
     "utility_source", cmUtilitySourceCommand, cmPolicies::CMP0034,
     "The utility_source command should not be called; see CMP0034.");
   state->AddDisallowedCommand(
-    "variable_requires", cm::make_unique<cmVariableRequiresCommand>(),
-    cmPolicies::CMP0035,
+    "variable_requires", cmVariableRequiresCommand, cmPolicies::CMP0035,
     "The variable_requires command should not be called; see CMP0035.");
 #endif
 }
diff --git a/Source/cmVariableRequiresCommand.cxx 
b/Source/cmVariableRequiresCommand.cxx
index c44eeca..6b93c63 100644
--- a/Source/cmVariableRequiresCommand.cxx
+++ b/Source/cmVariableRequiresCommand.cxx
@@ -2,33 +2,32 @@
    file Copyright.txt or https://cmake.org/licensing for details.  */
 #include "cmVariableRequiresCommand.h"
 
+#include "cmExecutionStatus.h"
 #include "cmMakefile.h"
 #include "cmState.h"
 #include "cmStringAlgorithms.h"
 #include "cmSystemTools.h"
 
-class cmExecutionStatus;
-
 // cmLibraryCommand
-bool cmVariableRequiresCommand::InitialPass(
-  std::vector<std::string> const& args, cmExecutionStatus&)
+bool cmVariableRequiresCommand(std::vector<std::string> const& args,
+                               cmExecutionStatus& status)
 {
   if (args.size() < 3) {
-    this->SetError("called with incorrect number of arguments");
+    status.SetError("called with incorrect number of arguments");
     return false;
   }
 
   std::string const& testVariable = args[0];
-  if (!this->Makefile->IsOn(testVariable)) {
+  if (!status.GetMakefile().IsOn(testVariable)) {
     return true;
   }
   std::string const& resultVariable = args[1];
   bool requirementsMet = true;
   std::string notSet;
   bool hasAdvanced = false;
-  cmState* state = this->Makefile->GetState();
+  cmState* state = status.GetMakefile().GetState();
   for (unsigned int i = 2; i < args.size(); ++i) {
-    if (!this->Makefile->IsOn(args[i])) {
+    if (!status.GetMakefile().IsOn(args[i])) {
       requirementsMet = false;
       notSet += args[i];
       notSet += "\n";
@@ -38,12 +37,12 @@ bool cmVariableRequiresCommand::InitialPass(
       }
     }
   }
-  const char* reqVar = this->Makefile->GetDefinition(resultVariable);
+  const char* reqVar = status.GetMakefile().GetDefinition(resultVariable);
   // if reqVar is unset, then set it to requirementsMet
   // if reqVar is set to true, but requirementsMet is false , then
   // set reqVar to false.
-  if (!reqVar || (!requirementsMet && this->Makefile->IsOn(reqVar))) {
-    this->Makefile->AddDefinitionBool(resultVariable, requirementsMet);
+  if (!reqVar || (!requirementsMet && status.GetMakefile().IsOn(reqVar))) {
+    status.GetMakefile().AddDefinitionBool(resultVariable, requirementsMet);
   }
 
   if (!requirementsMet) {
diff --git a/Source/cmVariableRequiresCommand.h 
b/Source/cmVariableRequiresCommand.h
index 38e7490..fb0520e 100644
--- a/Source/cmVariableRequiresCommand.h
+++ b/Source/cmVariableRequiresCommand.h
@@ -8,21 +8,9 @@
 #include <string>
 #include <vector>
 
-#include "cm_memory.hxx"
-
-#include "cmCommand.h"
-
 class cmExecutionStatus;
 
-class cmVariableRequiresCommand : public cmCommand
-{
-public:
-  std::unique_ptr<cmCommand> Clone() override
-  {
-    return cm::make_unique<cmVariableRequiresCommand>();
-  }
-  bool InitialPass(std::vector<std::string> const& args,
-                   cmExecutionStatus& status) override;
-};
+bool cmVariableRequiresCommand(std::vector<std::string> const& args,
+                               cmExecutionStatus& status);
 
 #endif

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=185fa2c4f3e21542dd42bfb396fc8520d996772a
commit 185fa2c4f3e21542dd42bfb396fc8520d996772a
Author:     Gabor Bencze <b.gabo...@gmail.com>
AuthorDate: Wed Aug 21 20:53:52 2019 +0200
Commit:     Brad King <brad.k...@kitware.com>
CommitDate: Mon Aug 26 11:48:46 2019 -0400

    cmCommand refactor: cmUtilitySourceCommand

diff --git a/Source/cmCommands.cxx b/Source/cmCommands.cxx
index f71be0d..ad14c6b 100644
--- a/Source/cmCommands.cxx
+++ b/Source/cmCommands.cxx
@@ -323,8 +323,7 @@ void GetProjectCommands(cmState* state)
     "subdir_depends", cmSubdirDependsCommand, cmPolicies::CMP0029,
     "The subdir_depends command should not be called; see CMP0029.");
   state->AddDisallowedCommand(
-    "utility_source", cm::make_unique<cmUtilitySourceCommand>(),
-    cmPolicies::CMP0034,
+    "utility_source", cmUtilitySourceCommand, cmPolicies::CMP0034,
     "The utility_source command should not be called; see CMP0034.");
   state->AddDisallowedCommand(
     "variable_requires", cm::make_unique<cmVariableRequiresCommand>(),
diff --git a/Source/cmUtilitySourceCommand.cxx 
b/Source/cmUtilitySourceCommand.cxx
index d255b67..25fe4ad 100644
--- a/Source/cmUtilitySourceCommand.cxx
+++ b/Source/cmUtilitySourceCommand.cxx
@@ -4,20 +4,19 @@
 
 #include <string.h>
 
+#include "cmExecutionStatus.h"
 #include "cmMakefile.h"
 #include "cmState.h"
 #include "cmStateTypes.h"
 #include "cmStringAlgorithms.h"
 #include "cmSystemTools.h"
 
-class cmExecutionStatus;
-
 // cmUtilitySourceCommand
-bool cmUtilitySourceCommand::InitialPass(std::vector<std::string> const& args,
-                                         cmExecutionStatus&)
+bool cmUtilitySourceCommand(std::vector<std::string> const& args,
+                            cmExecutionStatus& status)
 {
   if (args.size() < 3) {
-    this->SetError("called with incorrect number of arguments");
+    status.SetError("called with incorrect number of arguments");
     return false;
   }
 
@@ -25,15 +24,15 @@ bool 
cmUtilitySourceCommand::InitialPass(std::vector<std::string> const& args,
 
   // The first argument is the cache entry name.
   std::string const& cacheEntry = *arg++;
-  const char* cacheValue = this->Makefile->GetDefinition(cacheEntry);
+  const char* cacheValue = status.GetMakefile().GetDefinition(cacheEntry);
   // If it exists already and appears up to date then we are done.  If
   // the string contains "(IntDir)" but that is not the
   // CMAKE_CFG_INTDIR setting then the value is out of date.
   std::string const& intDir =
-    this->Makefile->GetRequiredDefinition("CMAKE_CFG_INTDIR");
+    status.GetMakefile().GetRequiredDefinition("CMAKE_CFG_INTDIR");
 
   bool haveCacheValue = false;
-  if (this->Makefile->IsOn("CMAKE_CROSSCOMPILING")) {
+  if (status.GetMakefile().IsOn("CMAKE_CROSSCOMPILING")) {
     haveCacheValue = (cacheValue != nullptr);
     if (!haveCacheValue) {
       std::string msg = cmStrCat(
@@ -44,7 +43,7 @@ bool 
cmUtilitySourceCommand::InitialPass(std::vector<std::string> const& args,
       cmSystemTools::Message(msg, "Warning");
     }
   } else {
-    cmState* state = this->Makefile->GetState();
+    cmState* state = status.GetMakefile().GetState();
     haveCacheValue = (cacheValue &&
                       (strstr(cacheValue, "(IntDir)") == nullptr ||
                        (intDir == "$(IntDir)")) &&
@@ -63,7 +62,7 @@ bool 
cmUtilitySourceCommand::InitialPass(std::vector<std::string> const& args,
   // The third argument specifies the relative directory of the source
   // of the utility.
   std::string const& relativeSource = *arg++;
-  std::string utilitySource = this->Makefile->GetCurrentSourceDirectory();
+  std::string utilitySource = status.GetMakefile().GetCurrentSourceDirectory();
   utilitySource = utilitySource + "/" + relativeSource;
 
   // If the directory doesn't exist, the source has not been included.
@@ -81,11 +80,12 @@ bool 
cmUtilitySourceCommand::InitialPass(std::vector<std::string> const& args,
 
   // The source exists.
   const std::string& cmakeCFGout =
-    this->Makefile->GetRequiredDefinition("CMAKE_CFG_INTDIR");
-  std::string utilityDirectory = this->Makefile->GetCurrentBinaryDirectory();
+    status.GetMakefile().GetRequiredDefinition("CMAKE_CFG_INTDIR");
+  std::string utilityDirectory =
+    status.GetMakefile().GetCurrentBinaryDirectory();
   std::string exePath;
-  if (this->Makefile->GetDefinition("EXECUTABLE_OUTPUT_PATH")) {
-    exePath = this->Makefile->GetDefinition("EXECUTABLE_OUTPUT_PATH");
+  if (status.GetMakefile().GetDefinition("EXECUTABLE_OUTPUT_PATH")) {
+    exePath = status.GetMakefile().GetDefinition("EXECUTABLE_OUTPUT_PATH");
   }
   if (!exePath.empty()) {
     utilityDirectory = exePath;
@@ -95,21 +95,22 @@ bool 
cmUtilitySourceCommand::InitialPass(std::vector<std::string> const& args,
 
   // Construct the cache entry for the executable's location.
   std::string utilityExecutable = utilityDirectory + "/" + cmakeCFGout + "/" +
-    utilityName + this->Makefile->GetDefinition("CMAKE_EXECUTABLE_SUFFIX");
+    utilityName +
+    status.GetMakefile().GetDefinition("CMAKE_EXECUTABLE_SUFFIX");
 
   // make sure we remove any /./ in the name
   cmSystemTools::ReplaceString(utilityExecutable, "/./", "/");
 
   // Enter the value into the cache.
-  this->Makefile->AddCacheDefinition(cacheEntry, utilityExecutable.c_str(),
-                                     "Path to an internal program.",
-                                     cmStateEnums::FILEPATH);
+  status.GetMakefile().AddCacheDefinition(
+    cacheEntry, utilityExecutable.c_str(), "Path to an internal program.",
+    cmStateEnums::FILEPATH);
   // add a value into the cache that maps from the
   // full path to the name of the project
   cmSystemTools::ConvertToUnixSlashes(utilityExecutable);
-  this->Makefile->AddCacheDefinition(utilityExecutable, utilityName.c_str(),
-                                     "Executable to project name.",
-                                     cmStateEnums::INTERNAL);
+  status.GetMakefile().AddCacheDefinition(
+    utilityExecutable, utilityName.c_str(), "Executable to project name.",
+    cmStateEnums::INTERNAL);
 
   return true;
 }
diff --git a/Source/cmUtilitySourceCommand.h b/Source/cmUtilitySourceCommand.h
index cef7fed..934d539 100644
--- a/Source/cmUtilitySourceCommand.h
+++ b/Source/cmUtilitySourceCommand.h
@@ -8,21 +8,9 @@
 #include <string>
 #include <vector>
 
-#include "cm_memory.hxx"
-
-#include "cmCommand.h"
-
 class cmExecutionStatus;
 
-class cmUtilitySourceCommand : public cmCommand
-{
-public:
-  std::unique_ptr<cmCommand> Clone() override
-  {
-    return cm::make_unique<cmUtilitySourceCommand>();
-  }
-  bool InitialPass(std::vector<std::string> const& args,
-                   cmExecutionStatus& status) override;
-};
+bool cmUtilitySourceCommand(std::vector<std::string> const& args,
+                            cmExecutionStatus& status);
 
 #endif

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=c8deeac68f1462461a464acd6d2c2728b9a293c2
commit c8deeac68f1462461a464acd6d2c2728b9a293c2
Author:     Gabor Bencze <b.gabo...@gmail.com>
AuthorDate: Wed Aug 21 20:50:44 2019 +0200
Commit:     Brad King <brad.k...@kitware.com>
CommitDate: Mon Aug 26 11:48:46 2019 -0400

    cmCommand refactor: cmSubdirDependsCommand

diff --git a/Source/cmCommands.cxx b/Source/cmCommands.cxx
index cd1b5af..f71be0d 100644
--- a/Source/cmCommands.cxx
+++ b/Source/cmCommands.cxx
@@ -320,8 +320,7 @@ void GetProjectCommands(cmState* state)
     "output_required_files", cmOutputRequiredFilesCommand, cmPolicies::CMP0032,
     "The output_required_files command should not be called; see CMP0032.");
   state->AddDisallowedCommand(
-    "subdir_depends", cm::make_unique<cmSubdirDependsCommand>(),
-    cmPolicies::CMP0029,
+    "subdir_depends", cmSubdirDependsCommand, cmPolicies::CMP0029,
     "The subdir_depends command should not be called; see CMP0029.");
   state->AddDisallowedCommand(
     "utility_source", cm::make_unique<cmUtilitySourceCommand>(),
diff --git a/Source/cmSubdirDependsCommand.cxx 
b/Source/cmSubdirDependsCommand.cxx
index 0bb2c0a..496c60d 100644
--- a/Source/cmSubdirDependsCommand.cxx
+++ b/Source/cmSubdirDependsCommand.cxx
@@ -4,8 +4,8 @@
 
 class cmExecutionStatus;
 
-bool cmSubdirDependsCommand::InitialPass(std::vector<std::string> const&,
-                                         cmExecutionStatus&)
+bool cmSubdirDependsCommand(std::vector<std::string> const&,
+                            cmExecutionStatus&)
 {
   return true;
 }
diff --git a/Source/cmSubdirDependsCommand.h b/Source/cmSubdirDependsCommand.h
index 64c28b9..bf99bd1 100644
--- a/Source/cmSubdirDependsCommand.h
+++ b/Source/cmSubdirDependsCommand.h
@@ -8,21 +8,9 @@
 #include <string>
 #include <vector>
 
-#include "cm_memory.hxx"
-
-#include "cmCommand.h"
-
 class cmExecutionStatus;
 
-class cmSubdirDependsCommand : public cmCommand
-{
-public:
-  std::unique_ptr<cmCommand> Clone() override
-  {
-    return cm::make_unique<cmSubdirDependsCommand>();
-  }
-  bool InitialPass(std::vector<std::string> const& args,
-                   cmExecutionStatus& status) override;
-};
+bool cmSubdirDependsCommand(std::vector<std::string> const& args,
+                            cmExecutionStatus& status);
 
 #endif

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=c2c222eba13476a95a362731528d85a3e76ed83a
commit c2c222eba13476a95a362731528d85a3e76ed83a
Author:     Gabor Bencze <b.gabo...@gmail.com>
AuthorDate: Wed Aug 21 20:49:22 2019 +0200
Commit:     Brad King <brad.k...@kitware.com>
CommitDate: Mon Aug 26 11:48:43 2019 -0400

    cmCommand refactor: cmOutputRequiredFilesCommand

diff --git a/Source/cmCommands.cxx b/Source/cmCommands.cxx
index 6f79c9a..cd1b5af 100644
--- a/Source/cmCommands.cxx
+++ b/Source/cmCommands.cxx
@@ -317,8 +317,7 @@ void GetProjectCommands(cmState* state)
     "load_command", cmLoadCommandCommand, cmPolicies::CMP0031,
     "The load_command command should not be called; see CMP0031.");
   state->AddDisallowedCommand(
-    "output_required_files", cm::make_unique<cmOutputRequiredFilesCommand>(),
-    cmPolicies::CMP0032,
+    "output_required_files", cmOutputRequiredFilesCommand, cmPolicies::CMP0032,
     "The output_required_files command should not be called; see CMP0032.");
   state->AddDisallowedCommand(
     "subdir_depends", cm::make_unique<cmSubdirDependsCommand>(),
diff --git a/Source/cmOutputRequiredFilesCommand.cxx 
b/Source/cmOutputRequiredFilesCommand.cxx
index 38e86e3..eb12ea0 100644
--- a/Source/cmOutputRequiredFilesCommand.cxx
+++ b/Source/cmOutputRequiredFilesCommand.cxx
@@ -5,9 +5,12 @@
 #include "cmsys/FStream.hxx"
 #include "cmsys/RegularExpression.hxx"
 #include <map>
+#include <set>
+#include <stdio.h>
 #include <utility>
 
 #include "cmAlgorithms.h"
+#include "cmExecutionStatus.h"
 #include "cmGeneratorExpression.h"
 #include "cmMakefile.h"
 #include "cmSourceFile.h"
@@ -15,8 +18,7 @@
 #include "cmSystemTools.h"
 #include "cmTarget.h"
 
-class cmExecutionStatus;
-
+namespace {
 /** \class cmDependInformation
  * \brief Store dependency information for a single source file.
  *
@@ -453,43 +455,47 @@ protected:
   DirectoryToFileToPathMapType DirectoryToFileToPathMap;
 };
 
+void ListDependencies(cmDependInformation const* info, FILE* fout,
+                      std::set<cmDependInformation const*>* visited);
+}
+
 // cmOutputRequiredFilesCommand
-bool cmOutputRequiredFilesCommand::InitialPass(
-  std::vector<std::string> const& args, cmExecutionStatus&)
+bool cmOutputRequiredFilesCommand(std::vector<std::string> const& args,
+                                  cmExecutionStatus& status)
 {
   if (args.size() != 2) {
-    this->SetError("called with incorrect number of arguments");
+    status.SetError("called with incorrect number of arguments");
     return false;
   }
 
   // store the arg for final pass
-  this->File = args[0];
-  this->OutputFile = args[1];
+  const std::string& file = args[0];
+  const std::string& outputFile = args[1];
 
   // compute the list of files
   cmLBDepend md;
-  md.SetMakefile(this->Makefile);
-  md.AddSearchPath(this->Makefile->GetCurrentSourceDirectory());
+  md.SetMakefile(&status.GetMakefile());
+  md.AddSearchPath(status.GetMakefile().GetCurrentSourceDirectory());
   // find the depends for a file
-  const cmDependInformation* info = md.FindDependencies(this->File.c_str());
+  const cmDependInformation* info = md.FindDependencies(file.c_str());
   if (info) {
     // write them out
-    FILE* fout = cmsys::SystemTools::Fopen(this->OutputFile, "w");
+    FILE* fout = cmsys::SystemTools::Fopen(outputFile, "w");
     if (!fout) {
-      this->SetError(cmStrCat("Can not open output file: ", this->OutputFile));
+      status.SetError(cmStrCat("Can not open output file: ", outputFile));
       return false;
     }
     std::set<cmDependInformation const*> visited;
-    this->ListDependencies(info, fout, &visited);
+    ListDependencies(info, fout, &visited);
     fclose(fout);
   }
 
   return true;
 }
 
-void cmOutputRequiredFilesCommand::ListDependencies(
-  cmDependInformation const* info, FILE* fout,
-  std::set<cmDependInformation const*>* visited)
+namespace {
+void ListDependencies(cmDependInformation const* info, FILE* fout,
+                      std::set<cmDependInformation const*>* visited)
 {
   // add info to the visited set
   visited->insert(info);
@@ -504,7 +510,8 @@ void cmOutputRequiredFilesCommand::ListDependencies(
           fprintf(fout, "%s\n", d->FullPath.c_str());
         }
       }
-      this->ListDependencies(d, fout, visited);
+      ListDependencies(d, fout, visited);
     }
   }
 }
+}
diff --git a/Source/cmOutputRequiredFilesCommand.h 
b/Source/cmOutputRequiredFilesCommand.h
index faffabd..4c11894 100644
--- a/Source/cmOutputRequiredFilesCommand.h
+++ b/Source/cmOutputRequiredFilesCommand.h
@@ -5,34 +5,12 @@
 
 #include "cmConfigure.h" // IWYU pragma: keep
 
-#include <set>
-#include <stdio.h>
 #include <string>
 #include <vector>
 
-#include "cm_memory.hxx"
-
-#include "cmCommand.h"
-
-class cmDependInformation;
 class cmExecutionStatus;
 
-class cmOutputRequiredFilesCommand : public cmCommand
-{
-public:
-  std::unique_ptr<cmCommand> Clone() override
-  {
-    return cm::make_unique<cmOutputRequiredFilesCommand>();
-  }
-  bool InitialPass(std::vector<std::string> const& args,
-                   cmExecutionStatus& status) override;
-
-  void ListDependencies(cmDependInformation const* info, FILE* fout,
-                        std::set<cmDependInformation const*>* visited);
-
-private:
-  std::string File;
-  std::string OutputFile;
-};
+bool cmOutputRequiredFilesCommand(std::vector<std::string> const& args,
+                                  cmExecutionStatus& status);
 
 #endif

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=8909a450a6fb74447ef6dc49f16d747bae3c72ea
commit 8909a450a6fb74447ef6dc49f16d747bae3c72ea
Author:     Daniel Eiband <daniel.eib...@brainlab.com>
AuthorDate: Mon Aug 26 15:22:43 2019 +0200
Commit:     Daniel Eiband <daniel.eib...@brainlab.com>
CommitDate: Mon Aug 26 15:22:43 2019 +0200

    VS: Add support for generator expressions to VS_CONFIGURATION_TYPE
    
    Generator expressions in target property VS_CONFIGURATION_TYPE might be 
used to
    set the ConfigurationType to Utility for certain configurations to not build
    the target while still linking to the target in other configurations.
    
    Fixes: #19613

diff --git a/Help/prop_tgt/VS_CONFIGURATION_TYPE.rst 
b/Help/prop_tgt/VS_CONFIGURATION_TYPE.rst
index ff987ff..640bed5 100644
--- a/Help/prop_tgt/VS_CONFIGURATION_TYPE.rst
+++ b/Help/prop_tgt/VS_CONFIGURATION_TYPE.rst
@@ -4,6 +4,8 @@ VS_CONFIGURATION_TYPE
 Visual Studio project configuration type.
 
 Sets the ``ConfigurationType`` attribute for a generated Visual Studio project.
+The property value may use
+:manual:`generator expressions <cmake-generator-expressions(7)>`.
 If this property is set, it overrides the default setting that is based on the
 target type (e.g. ``StaticLibrary``, ``Application``, ...).
 
diff --git a/Help/release/dev/vs-configuration-type-genex.rst 
b/Help/release/dev/vs-configuration-type-genex.rst
new file mode 100644
index 0000000..d930d5b
--- /dev/null
+++ b/Help/release/dev/vs-configuration-type-genex.rst
@@ -0,0 +1,5 @@
+vs-configuration-type-genex
+---------------------------
+
+* :prop_tgt:`VS_CONFIGURATION_TYPE` now supports
+  :manual:`generator expressions <cmake-generator-expressions(7)>`.
diff --git a/Source/cmVisualStudio10TargetGenerator.cxx 
b/Source/cmVisualStudio10TargetGenerator.cxx
index c5cf9a7..ea2d16c 100644
--- a/Source/cmVisualStudio10TargetGenerator.cxx
+++ b/Source/cmVisualStudio10TargetGenerator.cxx
@@ -1115,7 +1115,10 @@ void 
cmVisualStudio10TargetGenerator::WriteProjectConfigurationValues(Elem& e0)
       std::string configType;
       if (const char* vsConfigurationType =
             this->GeneratorTarget->GetProperty("VS_CONFIGURATION_TYPE")) {
-        configType = vsConfigurationType;
+        cmGeneratorExpression ge;
+        std::unique_ptr<cmCompiledGeneratorExpression> cge =
+          ge.Parse(vsConfigurationType);
+        configType = cge->Evaluate(this->LocalGenerator, c);
       } else {
         switch (this->GeneratorTarget->GetType()) {
           case cmStateEnums::SHARED_LIBRARY:
diff --git a/Tests/RunCMake/VS10Project/VsConfigurationType-check.cmake 
b/Tests/RunCMake/VS10Project/VsConfigurationType-check.cmake
index 4690970..bbd34da 100644
--- a/Tests/RunCMake/VS10Project/VsConfigurationType-check.cmake
+++ b/Tests/RunCMake/VS10Project/VsConfigurationType-check.cmake
@@ -9,7 +9,7 @@ file(STRINGS "${vcProjectFile}" lines)
 foreach(line IN LISTS lines)
   if(line MATCHES "^ *<ConfigurationType>(.*)</ConfigurationType>$")
     set(propertyFound TRUE)
-    set(expectedValue "MyValue")
+    set(expectedValue "MyValue foo")
     set(actualValue ${CMAKE_MATCH_1})
     if(NOT (${actualValue} STREQUAL ${expectedValue}))
       set(RunCMake_TEST_FAILED "ConfigurationType \"${actualValue}\" differs 
from expected value \"${expectedValue}\".")
diff --git a/Tests/RunCMake/VS10Project/VsConfigurationType.cmake 
b/Tests/RunCMake/VS10Project/VsConfigurationType.cmake
index a73dfe8..a2f544a 100644
--- a/Tests/RunCMake/VS10Project/VsConfigurationType.cmake
+++ b/Tests/RunCMake/VS10Project/VsConfigurationType.cmake
@@ -1,3 +1,3 @@
 enable_language(CXX)
 add_library(foo foo.cpp)
-set_target_properties(foo PROPERTIES VS_CONFIGURATION_TYPE "MyValue")
+set_target_properties(foo PROPERTIES VS_CONFIGURATION_TYPE "MyValue 
$<TARGET_PROPERTY:foo,NAME>")

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=7533e47cccb8828885de518e40d58b629200d23d
commit 7533e47cccb8828885de518e40d58b629200d23d
Author:     Gabor Bencze <b.gabo...@gmail.com>
AuthorDate: Wed Aug 21 20:04:45 2019 +0200
Commit:     Gabor Bencze <b.gabo...@gmail.com>
CommitDate: Sun Aug 25 14:31:16 2019 +0200

    cmCommand refactor: cmLoadCommandCommand

diff --git a/Source/cmCommands.cxx b/Source/cmCommands.cxx
index bbfea90..6f79c9a 100644
--- a/Source/cmCommands.cxx
+++ b/Source/cmCommands.cxx
@@ -314,8 +314,7 @@ void GetProjectCommands(cmState* state)
     "The export_library_dependencies command should not be called; "
     "see CMP0033.");
   state->AddDisallowedCommand(
-    "load_command", cm::make_unique<cmLoadCommandCommand>(),
-    cmPolicies::CMP0031,
+    "load_command", cmLoadCommandCommand, cmPolicies::CMP0031,
     "The load_command command should not be called; see CMP0031.");
   state->AddDisallowedCommand(
     "output_required_files", cm::make_unique<cmOutputRequiredFilesCommand>(),
diff --git a/Source/cmLoadCommandCommand.cxx b/Source/cmLoadCommandCommand.cxx
index 180e65b..f650eb1 100644
--- a/Source/cmLoadCommandCommand.cxx
+++ b/Source/cmLoadCommandCommand.cxx
@@ -14,14 +14,14 @@
 
 #include "cmCPluginAPI.cxx"
 #include "cmCPluginAPI.h"
+#include "cmCommand.h"
 #include "cmDynamicLoader.h"
+#include "cmExecutionStatus.h"
 #include "cmMakefile.h"
 #include "cmState.h"
 #include "cmStringAlgorithms.h"
 #include "cmSystemTools.h"
 
-class cmExecutionStatus;
-
 #ifdef __QNX__
 #  include <malloc.h> /* for malloc/free on QNX */
 #endif
@@ -175,8 +175,8 @@ bool cmLoadedCommand::InitialPass(std::vector<std::string> 
const& args,
 } // namespace
 
 // cmLoadCommandCommand
-bool cmLoadCommandCommand::InitialPass(std::vector<std::string> const& args,
-                                       cmExecutionStatus&)
+bool cmLoadCommandCommand(std::vector<std::string> const& args,
+                          cmExecutionStatus& status)
 {
   if (args.empty()) {
     return true;
@@ -185,13 +185,13 @@ bool 
cmLoadCommandCommand::InitialPass(std::vector<std::string> const& args,
   // Construct a variable to report what file was loaded, if any.
   // Start by removing the definition in case of failure.
   std::string reportVar = cmStrCat("CMAKE_LOADED_COMMAND_", args[0]);
-  this->Makefile->RemoveDefinition(reportVar);
+  status.GetMakefile().RemoveDefinition(reportVar);
 
   // the file must exist
   std::string moduleName = cmStrCat(
-    this->Makefile->GetRequiredDefinition("CMAKE_SHARED_MODULE_PREFIX"), "cm",
-    args[0],
-    this->Makefile->GetRequiredDefinition("CMAKE_SHARED_MODULE_SUFFIX"));
+    status.GetMakefile().GetRequiredDefinition("CMAKE_SHARED_MODULE_PREFIX"),
+    "cm", args[0],
+    status.GetMakefile().GetRequiredDefinition("CMAKE_SHARED_MODULE_SUFFIX"));
 
   // search for the file
   std::vector<std::string> path;
@@ -209,7 +209,7 @@ bool 
cmLoadCommandCommand::InitialPass(std::vector<std::string> const& args,
   if (fullPath.empty()) {
     std::ostringstream e;
     e << "Attempt to load command failed from file \"" << moduleName << "\"";
-    this->SetError(e.str());
+    status.SetError(e.str());
     return false;
   }
 
@@ -224,12 +224,12 @@ bool 
cmLoadCommandCommand::InitialPass(std::vector<std::string> const& args,
       err += " Additional error info is:\n";
       err += error;
     }
-    this->SetError(err);
+    status.SetError(err);
     return false;
   }
 
   // Report what file was loaded for this command.
-  this->Makefile->AddDefinition(reportVar, fullPath);
+  status.GetMakefile().AddDefinition(reportVar, fullPath);
 
   // find the init function
   std::string initFuncName = args[0] + "Init";
@@ -243,12 +243,12 @@ bool 
cmLoadCommandCommand::InitialPass(std::vector<std::string> const& args,
   // if the symbol is found call it to set the name on the
   // function blocker
   if (initFunction) {
-    this->Makefile->GetState()->AddScriptedCommand(
+    status.GetMakefile().GetState()->AddScriptedCommand(
       args[0],
       cmLegacyCommandWrapper(cm::make_unique<cmLoadedCommand>(initFunction)));
     return true;
   }
-  this->SetError("Attempt to load command failed. "
-                 "No init function found.");
+  status.SetError("Attempt to load command failed. "
+                  "No init function found.");
   return false;
 }
diff --git a/Source/cmLoadCommandCommand.h b/Source/cmLoadCommandCommand.h
index d81cefb..f5fd754 100644
--- a/Source/cmLoadCommandCommand.h
+++ b/Source/cmLoadCommandCommand.h
@@ -8,21 +8,9 @@
 #include <string>
 #include <vector>
 
-#include "cm_memory.hxx"
-
-#include "cmCommand.h"
-
 class cmExecutionStatus;
 
-class cmLoadCommandCommand : public cmCommand
-{
-public:
-  std::unique_ptr<cmCommand> Clone() override
-  {
-    return cm::make_unique<cmLoadCommandCommand>();
-  }
-  bool InitialPass(std::vector<std::string> const& args,
-                   cmExecutionStatus& status) override;
-};
+bool cmLoadCommandCommand(std::vector<std::string> const& args,
+                          cmExecutionStatus& status);
 
 #endif

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=9d6fc3f5ed527874d44a111eb80c09e740710e48
commit 9d6fc3f5ed527874d44a111eb80c09e740710e48
Author:     Gabor Bencze <b.gabo...@gmail.com>
AuthorDate: Wed Aug 21 19:56:15 2019 +0200
Commit:     Gabor Bencze <b.gabo...@gmail.com>
CommitDate: Sun Aug 25 14:29:25 2019 +0200

    cmCommand refactor: cmExportLibraryDependenciesCommand

diff --git a/Source/cmCommands.cxx b/Source/cmCommands.cxx
index 6cb7d80..bbfea90 100644
--- a/Source/cmCommands.cxx
+++ b/Source/cmCommands.cxx
@@ -309,8 +309,8 @@ void GetProjectCommands(cmState* state)
                            cm::make_unique<cmSourceGroupCommand>());
 
   state->AddDisallowedCommand(
-    "export_library_dependencies",
-    cm::make_unique<cmExportLibraryDependenciesCommand>(), cmPolicies::CMP0033,
+    "export_library_dependencies", cmExportLibraryDependenciesCommand,
+    cmPolicies::CMP0033,
     "The export_library_dependencies command should not be called; "
     "see CMP0033.");
   state->AddDisallowedCommand(
diff --git a/Source/cmExportLibraryDependenciesCommand.cxx 
b/Source/cmExportLibraryDependenciesCommand.cxx
index 81237db..bab394a 100644
--- a/Source/cmExportLibraryDependenciesCommand.cxx
+++ b/Source/cmExportLibraryDependenciesCommand.cxx
@@ -8,6 +8,7 @@
 
 #include "cm_memory.hxx"
 
+#include "cmExecutionStatus.h"
 #include "cmGeneratedFileStream.h"
 #include "cmGlobalGenerator.h"
 #include "cmMakefile.h"
@@ -18,8 +19,6 @@
 #include "cmTargetLinkLibraryType.h"
 #include "cmake.h"
 
-class cmExecutionStatus;
-
 static void FinalAction(cmMakefile& makefile, std::string const& filename,
                         bool append)
 {
@@ -140,19 +139,20 @@ static void FinalAction(cmMakefile& makefile, std::string 
const& filename,
   fout << "endif()\n";
 }
 
-bool cmExportLibraryDependenciesCommand::InitialPass(
-  std::vector<std::string> const& args, cmExecutionStatus&)
+bool cmExportLibraryDependenciesCommand(std::vector<std::string> const& args,
+                                        cmExecutionStatus& status)
 {
   if (args.empty()) {
-    this->SetError("called with incorrect number of arguments");
+    status.SetError("called with incorrect number of arguments");
     return false;
   }
 
   std::string const& filename = args[0];
   bool const append = args.size() > 1 && args[1] == "APPEND";
-  this->Makefile->AddFinalAction([filename, append](cmMakefile& makefile) {
-    FinalAction(makefile, filename, append);
-  });
+  status.GetMakefile().AddFinalAction(
+    [filename, append](cmMakefile& makefile) {
+      FinalAction(makefile, filename, append);
+    });
 
   return true;
 }
diff --git a/Source/cmExportLibraryDependenciesCommand.h 
b/Source/cmExportLibraryDependenciesCommand.h
index 4817162..230c906 100644
--- a/Source/cmExportLibraryDependenciesCommand.h
+++ b/Source/cmExportLibraryDependenciesCommand.h
@@ -8,21 +8,9 @@
 #include <string>
 #include <vector>
 
-#include "cm_memory.hxx"
-
-#include "cmCommand.h"
-
 class cmExecutionStatus;
 
-class cmExportLibraryDependenciesCommand : public cmCommand
-{
-public:
-  std::unique_ptr<cmCommand> Clone() override
-  {
-    return cm::make_unique<cmExportLibraryDependenciesCommand>();
-  }
-  bool InitialPass(std::vector<std::string> const& args,
-                   cmExecutionStatus& status) override;
-};
+bool cmExportLibraryDependenciesCommand(std::vector<std::string> const& args,
+                                        cmExecutionStatus& status);
 
 #endif

https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=524d72151449acf5d76e55172174552b83a74f61
commit 524d72151449acf5d76e55172174552b83a74f61
Author:     Gabor Bencze <b.gabo...@gmail.com>
AuthorDate: Wed Aug 21 19:53:29 2019 +0200
Commit:     Gabor Bencze <b.gabo...@gmail.com>
CommitDate: Sun Aug 25 14:29:25 2019 +0200

    cmCommand refactor: cmUseMangledMesaCommand

diff --git a/Source/cmCommands.cxx b/Source/cmCommands.cxx
index ead16d2..6cb7d80 100644
--- a/Source/cmCommands.cxx
+++ b/Source/cmCommands.cxx
@@ -208,8 +208,7 @@ void GetScriptingCommands(cmState* state)
     "build_name", cmBuildNameCommand, cmPolicies::CMP0036,
     "The build_name command should not be called; see CMP0036.");
   state->AddDisallowedCommand(
-    "use_mangled_mesa", cm::make_unique<cmUseMangledMesaCommand>(),
-    cmPolicies::CMP0030,
+    "use_mangled_mesa", cmUseMangledMesaCommand, cmPolicies::CMP0030,
     "The use_mangled_mesa command should not be called; see CMP0030.");
 
 #endif
diff --git a/Source/cmUseMangledMesaCommand.cxx 
b/Source/cmUseMangledMesaCommand.cxx
index 3d83760..cfc00e8 100644
--- a/Source/cmUseMangledMesaCommand.cxx
+++ b/Source/cmUseMangledMesaCommand.cxx
@@ -5,26 +5,30 @@
 #include "cmsys/FStream.hxx"
 #include "cmsys/RegularExpression.hxx"
 
+#include "cmExecutionStatus.h"
 #include "cmStringAlgorithms.h"
 #include "cmSystemTools.h"
 
-class cmExecutionStatus;
+namespace {
+void CopyAndFullPathMesaHeader(const std::string& source,
+                               const std::string& outdir);
+}
 
-bool cmUseMangledMesaCommand::InitialPass(std::vector<std::string> const& args,
-                                          cmExecutionStatus&)
+bool cmUseMangledMesaCommand(std::vector<std::string> const& args,
+                             cmExecutionStatus& status)
 {
   // expected two arguments:
   // argument one: the full path to gl_mangle.h
   // argument two : directory for output of edited headers
   if (args.size() != 2) {
-    this->SetError("called with incorrect number of arguments");
+    status.SetError("called with incorrect number of arguments");
     return false;
   }
   const std::string& inputDir = args[0];
   std::string glh = cmStrCat(inputDir, "/gl.h");
   if (!cmSystemTools::FileExists(glh)) {
     std::string e = cmStrCat("Bad path to Mesa, could not find: ", glh, ' ');
-    this->SetError(e);
+    status.SetError(e);
     return false;
   }
   const std::string& destDir = args[1];
@@ -37,14 +41,15 @@ bool 
cmUseMangledMesaCommand::InitialPass(std::vector<std::string> const& args,
   cmSystemTools::MakeDirectory(destDir);
   for (std::string const& f : files) {
     std::string path = cmStrCat(inputDir, '/', f);
-    this->CopyAndFullPathMesaHeader(path, destDir);
+    CopyAndFullPathMesaHeader(path, destDir);
   }
 
   return true;
 }
 
-void cmUseMangledMesaCommand::CopyAndFullPathMesaHeader(
-  const std::string& source, const std::string& outdir)
+namespace {
+void CopyAndFullPathMesaHeader(const std::string& source,
+                               const std::string& outdir)
 {
   std::string dir;
   std::string file;
@@ -96,3 +101,4 @@ void cmUseMangledMesaCommand::CopyAndFullPathMesaHeader(
   cmSystemTools::CopyFileIfDifferent(tempOutputFile, outFile);
   cmSystemTools::RemoveFile(tempOutputFile);
 }
+}
diff --git a/Source/cmUseMangledMesaCommand.h b/Source/cmUseMangledMesaCommand.h
index 1c01596..215e4a3 100644
--- a/Source/cmUseMangledMesaCommand.h
+++ b/Source/cmUseMangledMesaCommand.h
@@ -8,25 +8,9 @@
 #include <string>
 #include <vector>
 
-#include "cm_memory.hxx"
-
-#include "cmCommand.h"
-
 class cmExecutionStatus;
 
-class cmUseMangledMesaCommand : public cmCommand
-{
-public:
-  std::unique_ptr<cmCommand> Clone() override
-  {
-    return cm::make_unique<cmUseMangledMesaCommand>();
-  }
-  bool InitialPass(std::vector<std::string> const& args,
-                   cmExecutionStatus& status) override;
-
-protected:
-  void CopyAndFullPathMesaHeader(const std::string& source,
-                                 const std::string& outdir);
-};
+bool cmUseMangledMesaCommand(std::vector<std::string> const& args,
+                             cmExecutionStatus& status);
 
 #endif

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

Summary of changes:
 Help/prop_tgt/VS_CONFIGURATION_TYPE.rst            |   2 +
 Help/release/dev/vs-configuration-type-genex.rst   |   5 +
 Source/CMakeLists.txt                              |   2 -
 Source/CPack/IFW/cmCPackIFWGenerator.cxx           | 119 +++++++++++++--------
 Source/cmCommands.cxx                              |  22 ++--
 Source/cmDisallowedCommand.cxx                     |  29 -----
 Source/cmDisallowedCommand.h                       |  47 --------
 Source/cmExportLibraryDependenciesCommand.cxx      |  16 +--
 Source/cmExportLibraryDependenciesCommand.h        |  16 +--
 Source/cmExtraCodeBlocksGenerator.cxx              |   2 +-
 Source/cmExtraSublimeTextGenerator.cxx             |   6 +-
 Source/cmFileAPICodemodel.cxx                      |   2 +-
 Source/cmGeneratorTarget.cxx                       |   4 +-
 Source/cmGetSourceFilePropertyCommand.cxx          |   4 -
 Source/cmJsonObjects.cxx                           |   2 +-
 Source/cmLoadCommandCommand.cxx                    |  28 ++---
 Source/cmLoadCommandCommand.h                      |  16 +--
 Source/cmOutputRequiredFilesCommand.cxx            |  41 ++++---
 Source/cmOutputRequiredFilesCommand.h              |  26 +----
 Source/cmSourceFile.cxx                            |  26 +++--
 Source/cmSourceFile.h                              |   2 +-
 Source/cmState.cxx                                 |  11 --
 Source/cmState.h                                   |   3 -
 Source/cmSubdirDependsCommand.cxx                  |   4 +-
 Source/cmSubdirDependsCommand.h                    |  16 +--
 Source/cmUseMangledMesaCommand.cxx                 |  22 ++--
 Source/cmUseMangledMesaCommand.h                   |  20 +---
 Source/cmUtilitySourceCommand.cxx                  |  43 ++++----
 Source/cmUtilitySourceCommand.h                    |  16 +--
 Source/cmVariableRequiresCommand.cxx               |  21 ++--
 Source/cmVariableRequiresCommand.h                 |  16 +--
 Source/cmVisualStudio10TargetGenerator.cxx         |   5 +-
 Tests/COnly/CMakeLists.txt                         |   6 --
 .../VS10Project/VsConfigurationType-check.cmake    |   2 +-
 .../RunCMake/VS10Project/VsConfigurationType.cmake |   2 +-
 Tests/SourceFileProperty/CMakeLists.txt            |  22 ++--
 bootstrap                                          |   1 -
 37 files changed, 240 insertions(+), 387 deletions(-)
 create mode 100644 Help/release/dev/vs-configuration-type-genex.rst
 delete mode 100644 Source/cmDisallowedCommand.cxx
 delete mode 100644 Source/cmDisallowedCommand.h


hooks/post-receive
-- 
CMake
_______________________________________________
Cmake-commits mailing list
Cmake-commits@cmake.org
https://cmake.org/mailman/listinfo/cmake-commits

Reply via email to